我是并行编程的初学者,所以我需要一些帮助。 我将2D矩阵乘以6 * 6,处理器数量为4.I将其除以9个元素的4个块,然后使用派生数据类型并使用MPI_TYPE_VECTOR定义新数据类型。然后尝试将每个块SCATTER到一个处理器。 但它不起作用。我可以通过点对点发送和接收来做到这一点,但我想通过使用MPI_SCATTER来做到这一点。 有人可以帮助我。
以下是我的代码的一部分:
q = (int) sqrt((double) p); // p is number of processors
MPI_Datatype my_block,tmpType;
MPI_Type_vector(n / q, n / q, n, MPI_DOUBLE, &my_block);// n is size of matrics
MPI_Type_commit(&my_block);
MPI_Type_create_resized( my_block, 0, ((n*n)/ p) * sizeof(double), &tmpType );
MPI_Type_commit(&tmpType);
MPI_Scatter( Matrix_B, 1, tmpType, &b ,1, tmpType,0, grid_comm );
for (int i=0; i< n*0.5 ;i++){
for (int j=0; j< n*0.5;j++){
printf("Processor %d : %lf ,",my_grid_rank,*(b+(n/q )*i+j));
}
printf("\n");
}