總之:不,但你應該能夠做到這一點。
總之:您的建議非常有意義,而MPI論壇目前正在考慮新的功能,這些功能基本上可以滿足您的需求。
建議必須收集數據才能累計數據是不正確的。 MPI_Accumulate以片面的方式進行遠程堆積。您希望MPI_Sendrecv_accumulate而不是MPI_Sendrecv_replace。這非常有意義,並且實現可以在內部做得比您可以做得更好,例如,它可以基於每個數據包進行緩衝。
對於suszterpatt,MPI在eager協議內部緩衝區中,並且在彙集協議中可以設置一個管道以最小化緩衝。
MPI_Recv_accumulate的實現(爲簡單起見,該部分MPI_SEND不必考慮)是這樣的:
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, MPI_Op op, int source, int tag, MPI_Comm comm, MPI_Status *status)
{
if (eager)
MPI_Reduce_local(_eager_buffer, buf, count, datatype, op);
else /* rendezvous */
{
malloc _buffer
while (mycount<count)
{
receive part of the incoming data into _buffer
reduce_local from _buffer into buf
}
}
你的意思是像添加總和,或添加像追加? – 2013-03-20 13:03:43
我認爲對MPI_Reduce的引用表明他指的是數值加法而不是buffer.push_back。 – Jeff 2013-03-20 16:37:16