我有一個靜態分配的二維數組NxN,並且我想發送i
th列(使用i = 0 ... N-1
)。在C中使用MPI_Type_vector接收
我寫:
int main(int argc, char **argv) {
int myrank, nprocs;
int i,j;
int matrix[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int col[N];
...
// Define type "column"
MPI_Datatype column;
MPI_Type_vector(N,1,N,MPI_INT,&column);
MPI_Type_commit(&column);
if(myrank==0){
j=0;
MPI_Send(&matrix[0][j],1,column,1,99,MPI_COMM_WORLD);
}
if(myrank==1){
// **** FIRST MODE: Don't use "column" type *****
MPI_Recv(col,N,MPI_INT,0,99,MPI_COMM_WORLD,&info);
// **** SECOND MODE: Use "column" type *****
// MPI_Recv(col,1,column_INT,0,99,MPI_COMM_WORLD,&info);
printf("\nColumn: ");
for(j=0;j<N;j++)
printf("\n %d",col[j]);
}
MPI_Type_free(&column);
MPI_Finalize();
return 0;
}
爲什麼第一種模式正確返回:
1 5 9 13
而第二返回不正確?
1 -2 1980804601 1980804675
請接受Jonathan Dursi的回答:http://stackoverflow.com/a/13523051/281545 –