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

Reply via email to