<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 12, 2015 at 9:27 AM, Dorier, Matthieu <span dir="ltr"><<a href="mailto:mdorier@anl.gov" target="_blank">mdorier@anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div style="direction:ltr;font-family:Tahoma;font-size:10pt"><font color="#333399">Hi,</font><br>
<br><font color="#333399">
I'm trying to refactor an MPI code using MPI one-sided communications.</font><br>
<br><font color="#333399">
The initial version of the code reads its data from a file containing a 3D array of floats. Each process has a series of subdomains (blocks) to load from the file, so they all open the file and then issue a series of MPI_File_set_view and MPI_File_read. The
type passed to MPI_File_set_view is constructed using MPI_Type_create_subarray to match the block that needs to be loaded.</font><br>
<br><font color="#333399">
This code performs very poorly even at small scale: the file is 7GB but the blocks are a few hundreds of bytes, and each process has many blocks to load.</font><br>
<br></div></div></blockquote><div><br></div><div>What is the root cause for the poor performance here?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-family:Tahoma;font-size:10pt"><font color="#ff0000">
Instead, I would like to have process rank 0 load the entire file, then expose it over RMA.</font><span style="color:rgb(51,51,153)"> I'm not </span></div></div></blockquote><div><br></div><div>I don't understand why you want to serialize your I/O through rank 0, limit your code to loading files that fit into the memory of one process, and then force every single process to obtain data via a point-to-point operation with one process. This seems triply unscalable.</div><div><br></div><div>Perhaps you can address your performance issues without compromising scalability.</div><div><br></div><div>Do you have a MCVE (<a href="http://stackoverflow.com/help/mcve">http://stackoverflow.com/help/mcve</a>) for this?</div><div><br></div><div>Jeff</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-family:Tahoma;color:#333399;font-size:10pt">familiar at all with MPI one-sided operations, since I never used them before, but I guess there should be a simple way to reuse the subarray datatype of my
MPI_File_set_view and use it in the context of an MPI_Get. I'm just not sure what the arguments of this MPI_Get would be. My guess is: origin_count would be the number of floats in a single block, origin_datatype would be MPI_FLOAT, target_rank = 0, target_disp
= 0, target_count = 1, target_datatype = my subarray datatype. Would that be correct?<br>
<br>
Thanks,<br>
<br>
Matthieu<br>
</div>
</div>
<br>_______________________________________________<br>
discuss mailing list <a href="mailto:discuss@mpich.org">discuss@mpich.org</a><br>
To manage subscription options or unsubscribe:<br>
<a href="https://lists.mpich.org/mailman/listinfo/discuss" rel="noreferrer" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Jeff Hammond<br><a href="mailto:jeff.science@gmail.com" target="_blank">jeff.science@gmail.com</a><br><a href="http://jeffhammond.github.io/" target="_blank">http://jeffhammond.github.io/</a></div>
</div></div>