On Tue, Dec 21, 2010 at 06:38:59PM -0800, Tom Rosmond wrote:
> I use the function MPI_FILE_SET_VIEW with the 'native'
> data representation and correctly write a file with MPI_FILE_WRITE_ALL.
> However, if I change to the 'external32' representation, the file is
> truncated, with a length that suggest that either only one process did a
> write, or each process wrote to the same location.  

Hi T. Rosmond.  'external32', while part of the standard, has not been
widely implemented in MPI-IO libraries.  Neither OpenMPI nor MPICH2
support that data representation.  I suspect the MPI-IO routines are
returning an error in ierr (at least I hope they are). 

If you check the error code against MPI_SUCCESS and process it with
MPI_ERROR_STRING, then you'll quickly see it's not supported.

I added a subroutine "check_err" to your test program and your test
program prints out the following:

"Unsupported datarep passed to MPI_File_set_view , error stack:
MPI_FILE_SET_VIEW(117): Only native data representation currently
supported"

I'm not a fortran person so it took me a while to get the call right.
For posterity (and to maybe help out some other not-fortran guy down
the road), here's what check_err does:

      subroutine check_err(iret)
      include 'mpif.h'
      integer iret
      integer ierr
      integer outlen
      CHARACTER(LEN = MPI_MAX_ERROR_STRING) string
      if (iret .ne. MPI_SUCCESS) then
          call MPI_ERROR_STRING(iret, string, outlen, ierr)
          print *, string(1:outlen)
      endif
      end subroutine check_err


external32 is a good idea but nowadays portable files are better
served with something like HDF5, NetCDF-4 or Parallel-NetCDF, all of
which generate files that are not only portable but are also
self-describing.

==rob

-- 
Rob Latham
Mathematics and Computer Science Division
Argonne National Lab, IL USA

Reply via email to