簡體   English   中英

有沒有辦法通過升序和降序對 Mpi 中的排名進行排序

[英]Is there a way to sort the rank in Mpi by ascending and descending order

我正在嘗試按排名的升序和降序來顯示 Hello World 消息

我閱讀了雙音排序,但無法理解如何實現它,

int[] datalist = new int[8];
MPI.Init(args);

int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();

System.out.println("Hello World from <"+rank+"> of total "+size+" processes");

MPI.Finalize();

我從這個編碼中得到了輸出,但沒有如何通過排序來輸出它,我真的需要幫助,因為我對 mpi 的東西還是個新手

問題不是很清楚。 它可以有兩種解釋:

  1. 您希望按升序或降序查看打印的排名。 任何 MPI 庫,包括 MPJ Express,都遵循單程序多數據 (SPMD) 模型。 這實質上意味着將執行程序的多個副本。 副本數取決於您在使用 mpjrun 開關(使用 -np 開關)執行程序時指定的並行進程數。 MPJ Express 不可能以任何特定順序打印此行,因為它無法控制此程序的並行副本的執行順序。 所以輸出總是不確定的。

  2. 您希望看到 datalist 數組中的數據按升序或降序排序。 同樣,為此您將需要 Gather() 或 Reduce() 操作。 目前您的程序正在制作數據列表數組的 N 個副本(假設您啟動了 N 個並行進程)。

希望這可以幫助。

默認情況下,這個 Hello World 程序的輸出是不確定的。 但是可以強制該程序按順序輸出 Hello World,即通過強制執行 MPI 進程的順序執行順序。

說明: 【假設你熟悉SPMD編程模型】我們來看看這個程序的執行順序。

Step 1:Rank 0 的進程會先到達打印語句,並得到輸出通道來打印它。 所有其他進程將進入else-if並且必須等待Recv函數調用。 注意: Recv是一個阻塞調用,需要匹配的Send 請參閱完整的MPI 教程以獲得全面的解釋!

步驟 2:等級 0 的進程將向等級 1(等級+1)的進程發送消息。 現在 Rank 1 進程從阻塞Recv出來,因為匹配的Send被發布,並將獲得下一輪打印輸出。 之后,它會向下一個進程(rank+1)發送消息,讓它輪流打印。

后續步驟:在每個步驟中, else-if的進程將獲得匹配的Send並從阻塞Recv並打印 Hello World 並向下一個等級發送消息以允許其打印。 最后,最后一個else語句是最后一個工人打印輸出而不發送消息的極端情況。 之后執行就完成了。

int[] datalist = new int[8];
MPI.Init(args);

int rank = MPI.COMM_WORLD.Rank();
int size = MPI.COMM_WORLD.Size();

int buff[] = new int [1];
buff[0] = rank;
int tag = 1001;
if (rank == 0){ 
    System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
    MPI.COMM_WORLD.Send(buff, 0, 1, MPI.INT, rank+1, tag);
}
else if (rank < size-1){
    MPI.COMM_WORLD.Recv(buff, 0, 1, MPI.INT, rank-1, tag);
    System.out.println("Hello World from <"+rank+"> of total "+size+" processes");
    MPI.COMM_WORLD.Send(buff, 0, 1, MPI.INT, rank+1, tag);
}
else{
    MPI.COMM_WORLD.Recv(buff, 0, 1, MPI.INT, rank-1, tag);
    System.out.println("Hello World from <"+rank+"> of total "+size+" processes");

}

MPI.Finalize();

對於 4 個進程,輸出將始終為:

Hello World from <0> of total 4 processes
Hello World from <1> of total 4 processes
Hello World from <2> of total 4 processes
Hello World from <3> of total 4 processes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM