GNU并行-备用参数

问题描述

我希望能够为每次执行并行命令替换一个参数。

我有一个脚本来处理图像,并且我使用GNU Parallel同时启动多个进程。 我在此脚本中使用GPU内核,但仅使用了我的2个GPU内核之一。

我希望能够使用2个不同的配置文件一个用于GPU 1,一个用于GPU 2),但是我不知道该怎么做。

Embed with signing $ config每隔一次执行将从gpu_1更改为gpu_2

这可能吗?

谢谢?

编辑:

使用并行命令(JitsiMeet)的作业号作为参数,然后使用该作业号的模数得到0或1:

gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year $config"

task 函数中:

{#}

解决方法

鉴于您的描述,您可能不希望GNU Parallel替代。想象一下,所有奇数作业都需要1秒,所有偶数作业都需要2秒。然后,您最终将在同一GPU上运行作业,而在另一个GPU上却没有运行。

您想要的是在GPU2上完成作业后立即在GPU2上开始作业。为此制作了{%}(又称工作槽):

parallel -j2 'sleep {}; echo {}-GPU{%} seq {#}' ::: 1 2 1 2 1 2 1 2 1 2 1 2
,

类似的事情应该起作用:

seq 14 | parallel -k echo task {} {= '$_=seq() % 2 ? "gpu1" : "gpu2"' =}

输出

task 1 gpu1
task 2 gpu2
task 3 gpu1
task 4 gpu2
task 5 gpu1
task 6 gpu2
task 7 gpu1
task 8 gpu2
task 9 gpu1
task 10 gpu2
task 11 gpu1
task 12 gpu2
task 13 gpu1
task 14 gpu2