2013-07-08 24 views
0

我有一個函數需要發送3個NxNxN數組(N = 300)來執行其計算。單獨的MPI_Sends和MPI_Receives將無法正常工作。將多個3D陣列發送到MPI中的進程

是否還有其他的構造可以使用?

+1

是否有一個原因,每個結構不能發送一個單一的發送? –

+0

我傾向於同意@ Dr.Tower--作爲一般的經驗法則,最好發送一些大的消息而不是許多小消息,因此批量發送很有意義 - 但這裏的每個數組都是103MB(對於浮點數)206MB(對於雙倍),所以將每個陣列作爲單獨發送發送的等待時間將是通信時間的一小部分。所以我不會擔心這個問題,只會在個人發送時這樣做,除非這樣做有一個真正的問題。 –

+0

@ Dr.Tower我認爲批處理會提高性能,因爲我有3個數組發送到每個函數。 –

回答

1

如果數據連續存儲,您可以一次發送儘可能多的數據。只要做到:

MPI_Send(&data[i][j], 300, MPI_SOMETHING, ...); 

到一次發送一整行或:

MPI_Send(&data[i], 900, MPI_SOMETHING, ...); 

發送一個二維切片。根據您的實施情況,可能會有一些大小,然後發送郵件的速度會變得更快或更慢,以便隨時進行實驗。