Hi Prashanth,
Thanks a lot for your help.
Let us take a look at all possible synchronization
mechanisms.
1). Passive: The target process takes no part in either
the synchronization nor the communication. This is
not what I wanted since I would like the target
to pick up the computation for efficient data accessing
of the array A[].
2). Active: There are two sub-classes:
a). Collective synchronization: Obviously this one uses
MPI_WIN_FENCE() which is a global synchronization.
b). Pair-wise synchronization: This is probably the closest.
But the target would need to know that it needs to
call MPI_WIN_POST() and MPI_WIN_WAIT(). Notice that
in my example, I assume the decision factor X is
only available on p1. So the actual target, p2 or p3
depending on the value of X, would not know that
it is supposed to call MPI_WIN_POST() and MPI_WIN_WAIT(),
unless a broadcast of X is made.
Maybe I am missing something in the above. Could you show
me with simple pseudocode how this can be done please?
Thanks a lot,
-Lei mailto:pan_at_[hidden]
Tuesday, March 9, 2004, 6:51:05 PM, you wrote:
P> Hello,
P> MPI_Put probably provides the functionality you are looking for. MPI_Put
P> though requires that the receiving process have a buffer large enough to
P> hold the data that is being 'put'.
P> The following URL seems to give very good information on MPI_Put and the
P> subsequent synchronization needed (not necessarily global).
P> http://www.epcc.ed.ac.uk/overview/publications/training_material/tech_watch/98_tw/techwatch-mpi2/MPI2-3.html
P> MPI_Put does not require global synchronization nor global broadcasting.
P> Hope this helps.
P> Prashanth Charapalli,
P> LAM/MPI Team.
P> Thus spake Lei_at_ICS in the message sent on Tue, 9 Mar 2004
->>Hi all,
->>
->>The following simple example illustrates
->>what I wanted to do with one-sided communication.
->>
->>I have three processors p1, p2, and p3.
->>On p1 there is a large array A[10000]
->>that needs to be sent to p2 or p3 depending
->>on a parameter X which is computed on
->>p1. X is not available initially on p2 or p3.
->>
->>if(X < 0.5)
->> put A[10000] to p2;
->>else
->> put A[10000] to p3;
->>
->>Now after this I want whoever owns A[]
->>to compute using it. In other words,
->>p2 or p3, but not p1 will compute using A[].
->>This is for efficiency.
->>
->>I would like to have p2 or p3 be interrupted
->>or awakened by p1 only when the data A[]
->>is coming to the processor. In other words,
->>the one who does not get the data should
->>not waste a single CPU cycle doing busy
->>waiting. A solution with a global synchronization
->>or broadcasting is not desirable.
->>
->>Is there a way to do it with MPI-2 one-sided
->>communication?
->>
->>Thanks a lot for your help in advance,
->>-Lei mailto:pan_at_[hidden]
->>
->>_______________________________________________
->>This list is archived at http://www.lam-mpi.org/MailArchives/lam/
->>
|