2012-05-23 38 views
1

問題#1。MPJ Express Scatterv和Gatherv,int []位移的目的是什麼?

Scatterv的「displacements」參數的目的是什麼?它與Gatherv有什麼不同?以及它如何支持地址空間上的「重疊」?你的平均喬位移數組是什麼樣的?

Scatterv(Object sendbuf, int sendoffset, int[] sendcounts, 
int[] displs, Datatype sendtype, Object recvbuf, 
int recvoffset, int recvcount, Datatype recvtype, 
int root) 

Gatherv(Object sendbuf, Object sendbuf, int sendoffset, 
int sendcount, Datatype sendtype, Object recvbuf, 
int[] recvcounts, int[] displs, Datatype recvtype, 
int root) 

問題#2。

在Gatherv中哪兩個sendbuf參數正在接收還是發送?

回答

3

Q1。分散向量和聚集向量操作中的空位和計數的目的是相同的。兩者均指定大緩衝區中的位置(分散中的sendbuf,聚集中的recvbuf),每個數據塊的起始位置以及它的數量。在Scatterv中,這些用於定義sendbuf中要分散到通信器中所有進程的塊。在Gatherv中,這些用於定義recvbuf中的位置,以便在通信器中放置來自所有進程的不同數據片段。 MPI標準要求在分散期間不應多次讀取單個位置,並且在收集期間不應多次寫入單個位置,即各個塊不應重疊,但出於性能原因,大多數(如果不是全部的話)現有MPI實現不嚴格強制執行該約束。根據Joe在他的MPI代碼中的做法,平均Joe位移數組看起來不同。由於ScattervGatherv大多用於使能數據的散射和採集時它的元素的數量不能被的過程中的通信的數量,在大多數情況下(分別或recvcountsdispls[0] = 0displs[i] = sendcounts[0] + sendcounts[1] + ... + sendcounts[i-1]整除。 Q2302。 sendbuf,sendoffsetsendcount指定要收集的數據的本地部分。 recvbuf,recvcounts[]displs[]指定大緩衝區中要聚集那些本地碎片的部分。

這一切都寫在MPI標準,恕我直言,是由凡人是可讀的幾個標準之一。

+0

太感謝你了斯托伊奇! :)大量的幫助 – Killrawr

相關問題