2013-03-22 129 views
7

我在MPI中使用MPI_Open_portMPI_Comm_accept實現了點對點連接。我運行一個服務器和不同的計算機上使用使用和不使用mpirun運行程序之間的區別

[email protected]:~$ mpirun server 
[email protected]:~$ mpirun client 

客戶端程序。我注意到

[email protected]:~$ ./server 
[email protected]:~$ ./client 

也工作得很好。你知道啓動MPI可執行文件時有沒有區別mpirun

當然,我不能給出額外的參數(例如mpirun --mca btl self,openib),並且所有進程的排名都是0,這一切都很好。但是有什麼不太明顯的?

回答

15

運行沒有mpirun/mpiexec被稱爲「單MPI_INIT」,是高品質的實現,最新的MPI標準的文檔中下§10.5.2發現MPI建議的一部分:

高品質實現將允許任何進程(包括不是以「並行應用程序」機制開始的進程)通過調用MPI_INIT成爲MPI進程。然後可以使用MPI_COMM_ACCEPTMPI_COMM_CONNECT例程連接到其他MPI進程,或者產生其他MPI進程。 MPI不強制這種行爲,但強烈鼓勵它在技術上可行。

如果一個進程進入MPI_INIT並且確定沒有采取特殊的步驟(即,它沒有被提供的信息,以形成與其他進程的MPI_COMM_WORLD)它成功並形成單MPI程序,即,在其中MPI_COMM_WORLD有大小1.

使用mpirun你的情況是「並行應用程序」機制,在標準文本中提到。它爲MPI_INIT提供了在所有啓動的過程中建立MPI_COMM_WORLD所需的信息。沒有來自mpirun的信息,進程只能作爲單例MPI實例運行,因此它們都具有排名0(這是可以的,因爲每個MPI_COMM_WORLD都是單獨的)。

相關問題