GNU Parallel - 多个命令并行执行

5

我希望能够同时运行多个长时间运行的进程来处理多个输入。例如:

solver_a problem_1
solver_b problem_1
...
solver_b problem_18
solver_c problem_18

我知道如何为相同的命令运行多个参数-这是最核心的用例。这更像是相反的情况:为同一参数运行多个命令。
当然,你总是可以运行多个parallel实例-但那么,当调度资源时,同一台机器或同一用户下的实例是否知道彼此存在呢?

实际上,更像是数百个问题和少数几个求解器,但是没错。 - Leo
1个回答

7

我认为你想要使用GNU Parallel来让每个问题都通过3个求解器中的每一个进行运行,总共18个问题:

parallel echo solver_{1} problem_{2} ::: {a..c} ::: {1..18}

样例输出

solver_a problem_1
solver_a problem_2
solver_a problem_3
solver_a problem_4
...
...
solver_c problem_16
solver_c problem_17
solver_c problem_18

或者,更快地改变另一个参数:

parallel echo solver_{2} problem_{1} ::: {1..18} ::: {a..c}

直到现在我才意识到那些只是传递给某种 exec/eval 语句的字符串。因此,除了 shell 理解的内容之外,命令和参数之间实际上没有区别。手册一开始就有这样的一句话,但直到现在我才明白它的意义。谢谢! - Leo
我使用这个例子来阐明这一点:parallel "{1} {2}" ::: 'printf "%02d "' 'printf "%03d "' ::: 1 2 - Leo
1
你和我一样!我喜欢GNU Parallel并且经常使用它,因为CPU的核心数量不断增多而频率却没有提高,所以多进程处理是有意义的... 但每当GNU Parallel的作者Ole Tange在Stack Overflow上回答新问题时,我总能从中学到一些新的关于它能力的东西,这让我受益匪浅 :-) - Mark Setchell
5
当我对具有多个参数的问题运行求解器时,我经常使用--shuf,因为这样可以快速绘制整个输入范围的结果。绘图通常可以显示出一种趋势,使得不必运行完整个集合,而是停下来关注看起来有前途的范围。无论这是否与此处相关,我并不知道。 - Ole Tange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接