散点错误,是一个派生数据类型的块

时间:2013-02-21 22:10:16

标签: c parallel-processing mpi

我是并行编程的初学者,所以我需要一些帮助。 我将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");
}

0 个答案:

没有答案