<html dir="ltr"><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #333399;font-size: 10pt;">Hi,<br>
<br>
I'm trying to refactor an MPI code using MPI one-sided communications.<br>
<br>
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.<br>
<br>
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.<br>
<br>
Instead, I would like to have process rank 0 load the entire file, then expose it over RMA. I'm not 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>
</body>
</html>