I think there is still some problem. I create different datatypes by resizing MPI_SHORT with different negative lower bounds (depending on the rank) and the same extent (only depending on the number of processes).
However, I get an error as soon as MPI_File_set_view is called with my new datatype: Error: Unsupported datatype passed to ADIOI_Count_contiguous_blocks [aim-nano_02:22229] MPI_ABORT invoked on rank 0 in communicator MPI_COMM_WORLD with errorcode 1 The same error occurs, if i set the lower bounds to 0. Is it perhaps not possible to use resized datatypes in MPI_File_set_view? Here's my code: #include <stdio.h> #include "mpi.h" //----------------------------------------------------------------------------- // main // // int main(int iArgC, char *apArgV[]) { int iNumProcs; int iID; MPI_Init(&iArgC, &apArgV); MPI_Comm_size(MPI_COMM_WORLD, &iNumProcs); MPI_Comm_rank(MPI_COMM_WORLD, &iID); // get the size of a MPI_SHORT MPI_Aint lbs; MPI_Aint exts; MPI_Type_get_extent(MPI_SHORT, &lbs, &exts); // resize the MPI_SHORT datatype // same extent but differennt position of the MPI_SHORT MPI_Datatype dtWHoles; MPI_Aint lb = -iID * exts; MPI_Aint ext = iNumProcs * exts; MPI_Type_create_resized(MPI_SHORT, lb, ext, &dtWHoles); // commit the datatype MPI_Type_commit(&dtWHoles); // open the file for writing MPI_File fh; MPI_File_open(MPI_COMM_WORLD, "testwrite.dat", MPI_MODE_WRONLY | MPI_MODE_CREATE, MPI_INFO_NULL, &fh); // set the file view MPI_File_set_view(fh, 0, MPI_SHORT, dtWHoles, "native", MPI_INFO_NULL); // here we would do some writing // close the file MPI_File_close(&fh); // clean up MPI_Type_free(&dtWHoles); MPI_Finalize(); } On 7/10/07, George Bosilca <bosi...@cs.utk.edu> wrote:
MPI_LB and MPI_UB is what you're looking for. Or better, for MPI-2 compliant libraries such as Open MPI and MPICH2, you can use MPI_Type_create_resized. This will allow you to create the gap at the beginning and/or the end of a data-type description. george. On Jul 10, 2007, at 10:53 AM, jody wrote: > hi > I want to create datatypes of the form > XX000000... > 00XX0000... > 0000XX00... > etc. > > I tried MPI_Type_indexed(1, ais, ait, MPI_SHORT, &dtNewType) > where ais= {2} and ait = {2} but this only gives me a datatype of > the form > 00XX, i.e. no holes at the end. > > I guess MPI_Type_vector won't work, because there seems to be > no way to create holes at the beginning of the datatype > > > I need these datatypes to let each process write its data into the > file > in the following way: > XXYYZZXXYYZZXXYYZZ.... > (X is data from proc 0, Y is data from proc 1, Z is data from proc 2) > > My intended approach was to define datatypes of the form XX0000, > 00XX00, 0000XX > for the respective processors, and then call MPI_File_set_view > with displacement 0 and the respective datatypes fo the "filetype" > parameter, > and finally let each processor write its stuff to file > sequentially using MPI_File_write. > > However, my plan failed since i am unable to create datatypes with > holes in front and at the end. > > What function should i use to create the desired datatypes? > > Thank You > > Jody > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users _______________________________________________ users mailing list us...@open-mpi.org http://www.open-mpi.org/mailman/listinfo.cgi/users