我正在尝试通过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来运行它,并且我想等到所有进程完成后如果正在使用12个核心。基本上,我会同时运行12个可执行文件,然后等到它们完成,然后转到下一个12。
希望我明白我的观点。
干杯。
答案 0 :(得分:3)
改为使用gnu parallel:
parallel ./myscript {1} ::: {1..100}
您可以使用-P
选项指定并行进程数,但默认为系统中的核心数。
您还可以指定-k
以保持输出顺序并重定向文件。
要将输出重定向到单个文件,您可以指定输出重定向,但必须引用它,以便shell不会对其进行解析。例如:
parallel ./run {1} '>' {1}_out ::: {1..10}
相当于将./run 1 > 1_out
投放到./run 10 > 10_out