我是并行编程的初学者,所以我需要一些帮助。我将 6*6 的 2D 矩阵相乘,处理器的数量为 4。我将它划分为 4 个 9 个元素的块,然后我使用派生数据类型并使用 MPI_TYPE_VECTOR 定义了一个新的数据类型。然后尝试将每个块分散到一个处理器。但它不起作用。我可以通过点对点发送和接收来做到这一点,但我想通过使用 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");
}