--jobs
当指定GNU选项时parallel
,它到底意味着什么?
我执行:
parallel --jobs 10 ./program ::: {1..100}
其中program
是一项密集型任务,并且各个工作之间完全独立。{1..100}
代表每个任务的符号输入。当我检查PC上运行的进程时,我发现很多时候有较少的超过 10 个作业同时运行。
那么具体是--jobs
指什么呢?
答案1
根据手册页,--jobs
每台机器上并行运行的最大作业数(重点是我的):
——职位N
每台机器上的作业槽数。跑步取决于N 个作业并行。 0 表示尽可能多。
这并不意味着它总是等于那个。并行计算的首要要求是作业可以独立运行,并且最终的输出可以组合起来,这样如果作业顺序运行,就会产生相同的输出。如果不可能,则任务无法并行完成。
另外,来自 GNU 并行手册页:
GNU并行是一种shell工具,用于使用一台或多台计算机并行执行作业。作业可以是单个命令或必须针对输入中的每一行运行的小脚本。
现在,如果文件只有 2 行,但您传递--jobs 10
,parallel
则无法为 2 行运行 10 个作业,因为它需要的最小输入是一行。因此,您只会看到 2 个职位。
这不仅是 GNU 并行的情况,几乎是所有并行计算引擎的情况。