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/


Reply via email to