bash中循环的并行嵌套
我试图通过bash运行一个c可执行文件。可执行文件将在每次迭代中采用不同的参数,我希望并行执行,因为我有12个可用的内核 我试过了bash中循环的并行嵌套,bash,nested-loops,Bash,Nested Loops,我试图通过bash运行一个c可执行文件。可执行文件将在每次迭代中采用不同的参数,我希望并行执行,因为我有12个可用的内核 我试过了 w=1; for i in {1..100} do l=$(($i-1)); for j in {12*l..12*i} do ./run $w/100 > "$w"_out & done expr=$w % 12; if ["$expr" -eq "0"] then wait; fi; done run是c的可执行文件。我希望在每一步中以递增的参数
w=1;
for i in {1..100}
do
l=$(($i-1));
for j in {12*l..12*i}
do
./run $w/100 > "$w"_out &
done
expr=$w % 12;
if ["$expr" -eq "0"]
then wait;
fi;
done
run是c的可执行文件。我希望在每一步中以递增的参数w运行它,如果有12个内核在使用,我希望等待所有进程完成。所以基本上,我将同时运行12个可执行文件,然后等待它们完成,然后移动到下一个12个
希望我把我的观点说清楚
干杯。改用:
您可以使用-p
选项指定并行进程的数量,但默认为系统中的内核数量
您还可以指定-k
,以保持输出顺序并重定向文件
要将输出重定向到单个文件,可以指定输出重定向,但必须引用它,以便shell不会解析它。例如:
parallel ./run {1} '>' {1}_out ::: {1..10}
相当于运行
/run 1>1\u out
到/run 10>10\u out
那{12*l..12*i}
应该做算术吗?乘法运算?您没有在循环中使用该j
。这是有意的吗?$W%12
是否也应该执行数学运算?您是否也对所有不同调用的错误处理感兴趣?您是否知道变量w
从未更改?刚开始时它被设置为1
,就是这样。使用expr
作为变量名可能会在某个时候引起悲伤。。。一些代码缩进/格式化可能会使事情更容易理解。在循环之前添加一个set-x
,以查看正在运行的内容…谢谢。但是,你能说得更具体一点吗?我现在学习平行线很困难。我在shell中调用./run 1>1_,然后将1增加到某个数字。我的输出将是1,2,3(对于1,2,3),你可以通过引用重定向字符来实现。有关示例,请参见编辑。@user178882查看manparallel\u教程
是否帮助您学习GNU并行。
parallel ./run {1} '>' {1}_out ::: {1..10}