2013-04-10 86 views
0

我有一個MPI程序(Fortran,MPICH),我需要將其從shell腳本中提取出來,該腳本依次啓動自己的MPI程序(使用mpirun)。到目前爲止,我已經將shell(system)命令包裝在if(system_num .eq. root_system_num)事件中,所以只有一個MPI進程運行腳本。但是,這會導致一系列HYDU_create_process錯誤。調用從MPI進程調用MPI進程的腳本

我認爲使用MPI_Comm_spawn但也有像「MPI不說,如果你啓動的程序是一個shell腳本和shell腳本啓動調用MPI_INIT程序會發生什麼」,所以這似乎不太理想,以及警告。

幾點:

  • 稱爲shell腳本並不需要在所有調用程序進行交互的程序。調用程序只需等待該過程完成即可。
  • 將shell腳本轉換爲單獨的可執行文件(很多環境變量設置,等等)並不容易。
  • 理想情況下,這應該適用於MPICH和Open MPI

有沒有辦法做到這一點?

回答

1

對於MPICH,不幸的是,您最好使用MPI_Comm_spawn。你唯一的選擇是在調用嵌套的MPI程序之前,找出所有依賴於實現的依賴於版本的環境變量,這些變量在shell腳本中需要爲unset。 (對於MPICH)一些示例變量將包括PMI_RANKPMI_PORT

% mpiexec -n 1 env | egrep '^PMI|^HYD' 
HYDI_CONTROL_FD=8 
PMI_RANK=0 
PMI_FD=7 
PMI_SIZE=1 

顯然,不同的變量將需要重組後開放MPI或不同版本MPICH2/MPICH的。

+0

是的,我傾向於MPI_Comm_spawn。但是現在我需要解析各種文件來解析代碼本身解析文件之前應該提取哪些環境變量。設計爲由Fortran讀取的文件,現在我必須製作一個shell腳本來完成它。 – 2013-04-11 13:43:17