[MPICH] question about MPI-IO Read_all

Rajeev Thakur thakur at mcs.anl.gov
Thu Apr 26 08:51:23 CDT 2007


The datatype passed to Read_all describes the layout in the memory buffer.
Any datatype is allowed, basic or derived, just as any datatype can be
passed to MPI_Send or Recv.

Rajeev 

> -----Original Message-----
> From: owner-mpich-discuss at mcs.anl.gov 
> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of Russell 
> L. Carter
> Sent: Wednesday, April 25, 2007 10:02 PM
> To: Rajeev Thakur
> Cc: mpich-discuss at mcs.anl.gov
> Subject: Re: [MPICH] question about MPI-IO Read_all
> 
> Hi Rajeev,
> Thanks! The following is very helpful:
> 
> Rajeev Thakur wrote:
> > 2^31 is 2 Gbytes. If you are reading 2 GB per process with a single
> > Read_all, you are already doing quite well 
> performance-wise. If you want to
> > read more than that you can create a derived datatype of 
> say 10 contiguous
> > bytes and pass that as the datatype to Read_all. That would 
> give you 20 GB.
> > You read even more by using 100 or 1000 instead of 10.
> > 
> > In practice, you might encounter some errors, because the MPI-IO
> > implementation internally may use some types that are 
> 32-bit, not expecting
> > anyone to read larger than that with a single call. So try 
> it once, and if
> > it doesn't work, read in 2GB chunks.
> 
> Another way of phrasing my question is, what Datatypes are allowed
> in Read_all?  Apparently contiguous fundamental types are ok. 
>  Anything
> else?  Where is this defined?  I do not see it defined in
> 
> http://www.mpi-forum.org/docs/mpi-20-html/node192.htm#Node192
> 
> If there's a community understood reason for a 2GB (say) limitation I
> would like to be able to reference it.
> 
> Thanks,
> Russell
> 
> > Rajeev
> > 
> > 
> >> -----Original Message-----
> >> From: owner-mpich-discuss at mcs.anl.gov 
> >> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of Russell 
> >> L. Carter
> >> Sent: Wednesday, April 25, 2007 6:33 PM
> >> To: mpich-discuss at mcs.anl.gov
> >> Subject: [MPICH] question about MPI-IO Read_all
> >>
> >> Hi,
> >> I have a question about the amount of data it is possible to read
> >> using MPI::Create_hindex with a fundamental type of MPI::BYTE, and 
> >> MPI::File::Read_all.
> >>
> >> Following the discussion about irregularly distributed 
> arras beginning
> >> on p. 78 of "Using MPI-2", I want to read my data by doing this:
> >>
> >> double *buf = ...;
> >> int count, bufsize = ...;
> >> MPI::Offset offset = ...;
> >> MPI::File f = MPI::File::Open(...);
> >> MPI::Datatype filetype(MPI::BYTE);
> >> filetype.Create_hindexed(count, blocks, displacements);
> >> f.Set_view(offset, MPI::BYTE, filetype, "native", info_);
> >> f.Read_all(buf, bufsize, MPI::BYTE);
> >>
> >> What I a curious about is the amount of data that can
> >> be read with Read_all.  Since bufsize is an int, then
> >> that would seem to imply that the maximum Read_all (per node)
> >> is 2^31.  Which in bytes, is not gigantic.
> >>
> >> Is there some other technique I can use to increase the amount
> >> of data I can Read_all at one time?  I have different sized
> >> data interspersed, so I can't offset by a larger fundamental
> >> type.  My arrays are not contiguous in the fortran calling program,
> >> and are of int and 4 or 8 byte reals.  If I use a Create_struct
> >> to make a filetype that I use to Set_view, doesn't this have
> >> the same read size limitation?  Only now it is for all the
> >> arrays in the struct.  Hopefully I am missing something.
> >>
> >> Thanks,
> >> Russell
> >>
> >>
> > 
> 
> 




More information about the mpich-discuss mailing list