2015-06-10 35 views
1

我有四個不同的實驗因素。如何並行化嵌套循環的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選項。 –

回答

0

我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 

如果值包括需要外殼引號字符以上將不幸失敗(」 & \'*和喜歡)從你的例子看起來對你來說不會有任何問題