bash - 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)
...
}
解决方案
鉴于您的描述,您可能不希望 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
推荐阅读
- python - 如何将日期时间列标题(例如 2007-03-01 00:00:00)转换为日期-月-年格式,即 2007-03-01
- python - ksize和k在cornerHarris中是什么意思?
- python - Python中带有matplotlib的线性模型的3d曲面图
- c# - 两个不同的用户可以访问同一个数据库表来插入不同的数据吗?
- php - 在搜索结果中显示 2 列中 1 个表的信息。(PHP - Laravel)
- ios - Firebase 错误 - 来自此 ios 应用程序的请求
被封锁 - android - 从一个片段导航到另一个片段
- c# - 班级内的后台工作人员,我必须等待再次运行
- sql - Postgres SQL 选择查询语法
- random - 在单元格更改时从选定范围返回随机日期