“parallel --jobs 10”是否意味着将运行 10 个作业?

“parallel --jobs 10”是否意味着将运行 10 个作业?

--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 10parallel则无法为 2 行运行 10 个作业,因为它需要的最小输入是一行。因此,您只会看到 2 个职位。

这不仅是 GNU 并行的情况,几乎是所有并行计算引擎的情况。

相关内容