<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 5, 2013 at 11:28 AM, Sufeng Niu <span dir="ltr"><<a href="mailto:sniu@hawk.iit.edu" target="_blank">sniu@hawk.iit.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>1.<br></div><div><div style="margin-left:40px"><span style="font-family:arial,sans-serif;font-size:13px">MPI_Win_fence is not similar to MPI_Barrier in some cases.  The</span><br style="font-family:arial,sans-serif;font-size:13px">


<span style="font-family:arial,sans-serif;font-size:13px">MPICH implementation can turn some calls into no-ops and others into</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">MPI_Reduce_scatter.</span><br>


</div><div class="gmail_extra">I am not quite sure about "turn some calls into no-ops and others into MPI_Reduce_scatter" Could you please give an example if possible? Another thing is if a process create a window for other process, but the data access is available after some operations. Should I use MPI_Win_fence or MPI_Barrier to sync? or other methods? <br>
</div></div></div></blockquote><div><br></div><div style>When you call MPI_Win_fence, the MPI implementation does not need to wait for all processes to call the function before proceeding.  It does require that all RMA operations in a given process' access epoch are complete, and that all RMA accesses in its exposure epoch (i.e., targeting the given process) are also complete.  If, for example, there is no preceding epoch, the call to MPI_Win_fence is a no op.</div>
<div style><br></div><div style>Generally speaking, you should synchronize all accesses to data exposed in a window using RMA synchronization operations.  Barrier does not provide any consistency for RMA operations.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div class="gmail_extra">2.<br></div><div class="gmail_extra"><div style="margin-left:40px">
Regarding "use MPI window as thread level", I really don't<br>
understand your thinking at all.  MPI RMA is not shared memory nor is<br>
MPI a threading model.<br></div>Sorry for uncleared statements, right now I would like to do multithreads and MPI hybrid programming. let me give an example: I have 3 processes, each one has 8 threads. thread 0 in process 0 creates a RMA window. if I would like all other threads to access it, should I use thread 0 in process 1, thread 0 in process 2 to MPI_Get the data from window, then use shared memory for internal threads to load the data? i am not sure what is the proper way for RMA in hybrid model.<br>
</div></div></div></blockquote><div><br></div><div style>The threads can all access the data in the window, provided that the MPI process synchronizes accesses by threads in the process correctly with respect to what other processes are doing.  Note that data consistency across threads is outside of the MPI specification, and you should use e.g. Pthreads or OpenMP primitives to ensure that data is consistent across threads.</div>
<div style><br></div><div style> ~Jim.</div></div></div></div>