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
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:
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)
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
Mathematics and Computer Science Division
Argonne National Lab, IL USA