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 mpi-forum@lists.mpi-forum.org http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum