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

bec*_*cko 6 gnu-parallel

将选项指定--jobs给 GNU 时parallel,它究竟是什么意思?

我执行:

parallel --jobs 10 ./program ::: {1..100}
Run Code Online (Sandbox Code Playgroud)

哪里program是一个密集的任务,而且这些工作是完全相互独立的。{1..100}代表每个任务的符号输入。当我检查 PC 上运行的进程时,我发现很多时候同时运行的作业少于10 个。

那么具体是指什么--jobs呢?

Mun*_*nir 7

根据手册页,--jobs每台机器上并行运行的最大作业数(重点是我的):

——职位N

每台机器上的作业槽数。并行运行最多N 个作业。0 表示尽可能多。

这并不意味着它总是等于那个。并行计算的首要要求是作业可以独立运行,并且最终的输出可以组合起来,这样如果作业顺序运行,就会产生相同的输出。如果不可能,则任务无法并行完成。

另外,来自 GNU 并行手册页:

GNU并行是一种shell工具,用于使用一台或多台计算机并行执行作业。作业可以是单个命令或必须针对输入中的每一行运行的小脚本。

现在,如果文件只有 2 行,但您传递--jobs 10,则parallel无法为 2 行运行 10 个作业,因为它需要的最小输入是一行。因此,您只会看到 2 个职位。

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