2013-01-08 55 views
0

有沒有辦法在FORTRAN程序中調用mprirun?我正在通過ssh在公共Linux集羣上工作,主要想法是在程序執行結束後自動將其排入隊列。FORTRAN自啓動MPI程序

我試圖在節目的最後寫的是這樣的:

CALL system('mpirun -np 16 -maxtime 100 TestNP') 

但收到此錯誤:

sh: mpirun: command not found 

任何想法?

+1

因此,嘗試在您的系統調用'mpirun'作爲前綴'mpirun'與您的系統上的'mpirun'的絕對路徑 - 如果你不知道是什麼看着在命令行使用哪個mpirun的結果。我對你爲什麼試圖這樣做有點困惑,你真的想在完成時重新提交程序嗎? (當然,重新提交它*無限*) –

+0

是的,我正在處理長期的流體動力學模擬,所以程序應該執行很多次(因爲集羣上的計劃你不能啓動涉及多時間的計算過程)。因此,一次迭代結束後,數據將被保存以供下次啓動。現在我正在手動啓動,但這絕對不方便。 –

+1

我想我明白你在做什麼,但我仍然不會使用'system'來調用它。我會做什麼取決於你沒有給我們的信息,比如你的集羣提供了什麼作業管理系統。 –

回答

2

問題是缺少路徑前綴,因此指定mpirun的絕對路徑應該有所幫助。但是有幾個問題,你的方法:

  • 如果每個MPI進程執行它,你將有太多的情況下運行,節點所以只有一個(例如主節點)應該執行它。

  • 原始程序不會完成,直到通過system()調用調用的程序沒有完成。所以,如果你的隊列受到時鐘限制,你根本沒有獲得任何東西。

通常,像這樣的任務是通過shell腳本完成的。例如。在bash,那麼你會寫是這樣的:

while true; do 
    mpirun your_program 
done 

這不是之前由您或排隊系統殺死不斷重新調用的mpirun。 (所以要小心與它!)