On Jul 19, 2007, at 3:24 PM, Moreland, Kenneth wrote:
I've run into a problem with the File I/O with openmpi version 1.2.3.
It is not possible to call MPI_File_set_view with a datatype created
from a subarray. Instead of letting me set a view of this type, it
gives an invalid datatype error. I have attached a simple program
that
demonstrates the problem. In particular, the following sequence of
function calls should be supported, but they are not.
MPI_Type_create_subarray(3, sizes, subsizes, starts,
MPI_ORDER_FORTRAN, MPI_BYTE, &view);
MPI_File_set_view(fd, 20, MPI_BYTE, view, "native", MPI_INFO_NULL);
After poking around in the source code a bit, I discovered that the
I/O
implementation actually supports the subarray data type, but there
is a
check that is issuing an error before the underlying I/O layer (ROMIO)
has a chance to handle the request.
You need to commit the datatype after calling
MPI_Type_create_subarray. If you add:
MPI_Type_commit(&view);
after the Type_create, but before File_set_view, the code will run to
completion.
Well, the code will then complain about a Barrier after MPI_Finalize
due to an error in how we shut down when there are files that have
been opened but not closed (you should also add a call to
MPI_File_close after the set_view, but I'm assuming it's not there
because this is a test code). This is something we need to fix, but
also signifies a user error.
Brian
--
Brian W. Barrett
Networking Team, CCS-1
Los Alamos National Laboratory