我希望如此运行循环,使用具有以下形式的gnu parallels
outer loop about 5-10 iterations can be parallelized
loop that cant be parallelized
inner loop about 100s operations in parallel
inner loop bit that can't be parallelized
由于不可并行化循环的性质,没有办法制作这个1并行命令。 我希望至少还有一个外部循环开始,当内部循环在它的单线程位中运行时,有一些事情要做。
我希望它能够创建比CPU内核更多的作业,尽管在嵌套并行命令时这似乎很难实现。 更糟糕的是,如果我为内部循环指定一个节点文件,那么每次运行内部循环时,似乎节点将以相同的顺序使用 - 随着节点数量的增加导致非常差的缩放。有一种显而易见的方法可以使用多个节点文件,这些文件的节点顺序不同。
控制同时工作数量的好方法是这样的巢吗?使用命名信号量似乎是可能的,每次运行时传递一个不同的节点文件看起来很笨拙,或者使用了错误的工具?
答案 0 :(得分:0)
简单的解决方案就是只对内循环进行并行化。
但--load
也可能对您有用:
inner() {
# Do inner stuff
}
export -f inner
outer() {
parallel --load 100% -S .. --env inner inner ::: {1..100}
}
export -f outer
parallel outer ::: {5..10}