2014-03-27 66 views
0

我有兩個不同的可執行文件,每個文件都有特定的角色。其中一個進程通過調用MPI_isend發送其他信息。但是,我怎麼知道另一個進程的排名呢? 我發現,當我運行我的堆棧如下,exe1,接收過程,似乎總是有排名0,exe2似乎總是有排名1.因此,如果我發送從exe2排名0,消息接收。但我在這裏錯過了什麼,它看起來如此複雜?打開MPI,確定要發送到的進程的級別

的mpirun -np 1 EXE1:-NP 1 EXE2

+0

這是不正確的,一個有排名0,另一個排名1 – nvdstruis

+0

它只是取決於你如何執行你的程序'-np 1 firstPrograme:-np 1 secondProgram'列表中的第一個排名第npth等等... – user3018144

回答

0

的開放MPI進程到行列映射可以與各種參數的CLI被控制爲mpiexec與支撐更精細的控制較新版本(如1.7.x)比舊版本。默認級別按照提供的插槽中的進程順序排列。因此-np 1 exe1 : -np 1 exe2總是會導致exe1爲排名0exe2排名爲1MPI_COMM_WORLD。如果您使用-np 3 exe1 : -np 2 exe2相反,你會得到以下內容:

rank executable 
------------------ 
0  exe1 
1  exe1 
2  exe1 
3  exe2 
4  exe2 

也可以開始exe1exe2作爲單獨的MPI作業,讓他們過一個intercommunicator連接到對方,但被認爲是一種先進的MPI話題。

0

另一個解決方案是讓接收進程exe1發送一個消息,其排名在前。當第二個進程使用該消息的標籤監聽來自任何源的消息時,它將收到第一個進程的排名。