如何并行化嵌套循环的csh脚本

问题描述:

我有四个不同的实验因素。如何并行化嵌套循环的csh脚本

对于每个实验,我需要改变三个参数并调用一个fortran程序。我使用EOF构造将参数传递给fortran程序。

下面是代码示例:

set expfac=(0.1 0.3 0.5 0.7) 
set fact1=(1 3 2 8) 
set fact2=(9 2 1 4) 
set fact3=(5 6 1 4) 

@ exp = 1 
while ($exp <= $#expfac) 
foreach i ($fact1) 
    foreach k ($fact2) 
    foreach h ($fact3) 
./PROGRAM << EOF 
expfac  |$expfac[$exp] 
fact1  |${i} 
fact2  |${k} 
fact3  |${h} 
EOF 
    end 
    end 
end 
@ exp += 1 
end 

我如何可以并行对于while循环?使用GNU并行可能吗?

+2

GNU并行将完全符合你的要求在Ubuntu上要小心,它们有一个愚蠢的默认参数,这使得它的行为不像文档中那样。它无法正常工作,请删除/ etc/parallel/config中的--tollef标志或在命令行中使用--gnu选项。 –

我CSH技能都是扯淡,所以这里是在bash:

parallel --header : './PROGRAM << EOF 
expfac  |{expfac} 
fact1  |{fact1} 
fact2  |{fact2} 
fact3  |{fact3} 
EOF' ::: expfac 0.1 0.3 0.5 0.7 ::: fact1 1 3 2 8 ::: fact2 9 2 1 4 ::: fact3 5 6 1 4 

如果值包括需要外壳引号字符以上将不幸失败(” & \'*和喜欢)从你的例子看起来对你来说不会有任何问题