在许多节点上嵌套gnu并行

时间:2016-08-12 13:28:18

标签: parallel-processing gnu-parallel

我希望如此运行循环,使用具有以下形式的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内核更多的作业,尽管在嵌套并行命令时这似乎很难实现。 更糟糕的是,如果我为内部循环指定一个节点文件,那么每次运行内部循环时,似乎节点将以相同的顺序使用 - 随着节点数量的增加导致非常差的缩放。有一种显而易见的方法可以使用多个节点文件,这些文件的节点顺序不同。

控制同时工作数量的好方法是这样的巢吗?使用命名信号量似乎是可能的,每次运行时传递一个不同的节点文件看起来很笨拙,或者使用了错误的工具?

1 个答案:

答案 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}