1

私は並列プログラミングの初心者なので、助けが必要です。6*6 の 2D 行列を乗算しており、プロセッサの数は 4 です。それを 9 要素の 4 つのブロックに分割し、派生データ型を使用して、MPI_TYPE_VECTOR で新しいデータ型を定義しました。そして、各ブロックを1つのプロセッサに分散しようとしました。しかし、うまくいきません。ポイントツーポイントの送受信でそれを行うことができますが、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");
}
4

0 に答える 0