小编Fed*_*nca的帖子

在C中使用MPI_Type_vector接收

我有一个静态分配的2D数组NxN,我想发送第一i列(带i = 0 ... N-1).

我写:

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;
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个模式正确返回:

1 5 9 13
Run Code Online (Sandbox Code Playgroud)

而第二次回报错误?

1  -2  1980804601  1980804675
Run Code Online (Sandbox Code Playgroud)

c parallel-processing mpi multidimensional-array

4
推荐指数
1
解决办法
2325
查看次数