1

我想使用 gnu-parallel 来并行化以下代码片段

for a in `seq 5` ; do
    for b in `seq $a` ; do
        echo $a $b
    done
done

这是否可以使用类似的东西来实现

parallel echo {1} {2} ::: $(seq 5) ::: $(seq {1})

上面的语法不起作用。

动机:

我想使用并行来向集群提交一些作业,如此处所述 http://docs.rcc.uchicago.edu/software/scheduler/parallel/README.html

4

1 回答 1

1

GNU Parallel 可以做笛卡尔积。您想要的是其中的一半(产品的下三角形)。GNU Parallel 不能直接这样做。所以你将不得不跳过上面的三角形:

parallel [ {2} -gt {1} ] '||' echo {1} {2} ::: $(seq 5) ::: $(seq 5)

对于更复杂的任务,使用 $job->skip():

parallel echo {=1' $arg[2] > $arg[1] and $job->skip();' =} {2} ::: $(seq 5) ::: $(seq 5)
于 2014-02-11T09:05:26.257 回答