我有兩個不同的可執行文件,每個文件都有特定的角色。其中一個進程通過調用MPI_isend發送其他信息。但是,我怎麼知道另一個進程的排名呢? 我發現,當我運行我的堆棧如下,exe1,接收過程,似乎總是有排名0,exe2似乎總是有排名1.因此,如果我發送從exe2排名0,消息接收。但我在這裏錯過了什麼,它看起來如此複雜?打開MPI,確定要發送到的進程的級別
的mpirun -np 1 EXE1:-NP 1 EXE2
我有兩個不同的可執行文件,每個文件都有特定的角色。其中一個進程通過調用MPI_isend發送其他信息。但是,我怎麼知道另一個進程的排名呢? 我發現,當我運行我的堆棧如下,exe1,接收過程,似乎總是有排名0,exe2似乎總是有排名1.因此,如果我發送從exe2排名0,消息接收。但我在這裏錯過了什麼,它看起來如此複雜?打開MPI,確定要發送到的進程的級別
的mpirun -np 1 EXE1:-NP 1 EXE2
的開放MPI進程到行列映射可以與各種參數的CLI被控制爲mpiexec
與支撐更精細的控制較新版本(如1.7.x)比舊版本。默認級別按照提供的插槽中的進程順序排列。因此-np 1 exe1 : -np 1 exe2
總是會導致exe1
爲排名0
而exe2
排名爲1
於MPI_COMM_WORLD
。如果您使用-np 3 exe1 : -np 2 exe2
相反,你會得到以下內容:
rank executable
------------------
0 exe1
1 exe1
2 exe1
3 exe2
4 exe2
也可以開始exe1
和exe2
作爲單獨的MPI作業,讓他們過一個intercommunicator連接到對方,但被認爲是一種先進的MPI話題。
另一個解決方案是讓接收進程exe1發送一個消息,其排名在前。當第二個進程使用該消息的標籤監聽來自任何源的消息時,它將收到第一個進程的排名。
這是不正確的,一個有排名0,另一個排名1 – nvdstruis
它只是取決於你如何執行你的程序'-np 1 firstPrograme:-np 1 secondProgram'列表中的第一個排名第npth等等... – user3018144