On 02/11/2010 01:42 PM, kostas pinokio wrote:
HALLO,
I would like to send a whole column of a dynamicly allocated array (in C language). When i use derived datatypes(for example MPI_Type_vector) i can send a column ONLY if i have static array but when i use dynamic allocation i have problem! Please tell me one way to send a column of a dynamc allocated array.
For example : MPI_Datatype columntype; MPI_Type_vector(10, 1, 10, MPI_INT, &columntype); MPI_Type_commit(&columntype); if(rank==0){ dyn_array=(int **) calloc(10,sizeof(int *)); for(i = 0; i < 10; i++){ dyn_array[i] =(int *) calloc(10,sizeof(int)); } for(i=0;i<10;i++){ for(j=0;j<10;j++) dyn_array[i][j]=9;} MPI_Send(&dyn_array[0][0], 1, columntype, dest, tag,MPI_COMM_WORLD); } if(rank==1){ MPI_Recv(&other_dyn_array[0][0], 1, columntype, 0, tag, MPI_COMM_WORLD, &Stat); }
the values of the receive are not correct!!
The MPI_Type_vector assumes your data is contiguous in memory and this is not the case in your code. As each raw is allocated using a different calloc. You need to arrange the 2D array in memory in a more clever way: if(rank==0){ dyn_array=(int **) calloc(10,sizeof(int *)); dyn_array[0] = (int*) calloc(10*10, sizeof(int)); for(i = 1; i < 10; i++) dyn_array[i] = dyn_array[0] + i*10; /*same code*/ } this should work! cheers, Simone
Thank You!
__________________________________________________ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ Yahoo!; οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ (spam); οΏ½οΏ½ Yahoo! Mail οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ http://mail.yahoo.gr
_______________________________________________ mpi-forum mailing list [email protected] http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum