On Jun 28, 2010, at 4:03 AM, amjad ali wrote: > (1) > Call this subroutines 1000 times > ============================= > call MPI_RECV_Init() > call MPI_Send_Init() > call MPI_Startall() > call MPI_Free() > ============================= > > (2) > Call this subroutines 1000 times > =========================== > call MPI_RECV_Init() > call MPI_Send_Init() > call MPI_Startall() > ========================== > call MPI_Free() --------- call it only once at the end.
Neither is better. The idea is to do this: MPI_Recv_init() MPI_Send_init() for (i = 0; i < 1000; ++i) { MPI_Startall() /* do whatever */ MPI_Waitall() } for (i = 0; i < 1000; ++i) { MPI_Request_free() } So in your inner loop, you just call MPI_Startall() and a corresponding MPI_Test* / MPI_Wait* call to complete those requests. The idea is that the MPI_*_init() functions do some one-time setup on the requests and then you just start and complete those same requests over and over and over. When you're done, you free them. -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/