首页 > 解决方案 > GNU Parallel - 备用参数

问题描述

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

我有一个处理图像的脚本,我使用 GNU Parallel 同时启动多个进程。我在这个脚本中使用了 GPU 核心,但只使用了我的 2 个 GPU 核心中的一个。

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

gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year $config" 每隔一次执行 $config 从 gpu_1 更改为 gpu_2

这可能吗?

谢谢

编辑:

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

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

任务函数中:

task(){
...
jobnumber=$4    
gpu=$(expr $jobnumber% 2)
...
}

标签: bashgnu-parallel

解决方案


鉴于您的描述,您可能不希望 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

推荐阅读