MPI_Bcast - 2D阵列中的一行

时间:2015-10-17 20:41:23

标签: c arrays mpi

我正在尝试在2D数组中播放我的第一行。这是代码:

double *chunkPtr = malloc(sizeof(double) * columns);
if (rank == 0) {
    chunkPtr = &chunk[0][0];
}

MPI_Bcast(chunkPtr, columns, MPI_DOUBLE, 0, MPI_COMM_WORLD);

chunk 是一个2D双数组(double ** chunk),而 columns 是一行中的双精度数。

这是我的问题:当我从排名为0的流程(就像之前提供的代码一样)进行广播时,其他流程无法获得广播的双重播放阵列。相反,它们会在每个索引上得到一个值等于0.0的数组。

这是我在数组中打印值时得到的输出,当我用3个进程运行我的程序时:

>>>>>>>>RANK IS 0
6.807000 5.249000 0.073000 3.658000 8.930000 1.272000 7.544000 0.878000 1.000000 
>>>>>>>>RANK IS 1
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 
>>>>>>>>RANK IS 2
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

注意进程0如何在其数组中包含实际值,而进程1和2只有0值。

当我更改程序以使排名为1的进程广播其行时,一切都正常运行:

代码:

if (rank == 1) {
    chunkPtr = &chunk[0][0];
}

MPI_Bcast(chunkPtr, columns, MPI_DOUBLE, 1, MPI_COMM_WORLD);

输出:

>>>>>>>>RANK IS 0
0.979000 9.149000 6.579000 8.821000 1.967000 0.672000 1.393000 9.336000 5.000000 
>>>>>>>>RANK IS 1
0.979000 9.149000 6.579000 8.821000 1.967000 0.672000 1.393000 9.336000 5.000000 
>>>>>>>>RANK IS 2
0.979000 9.149000 6.579000 8.821000 1.967000 0.672000 1.393000 9.336000 5.000000

我做错了什么?

1 个答案:

答案 0 :(得分:2)

原来我的代码中有额外的MP_Bcast,搞乱了整个程序。

解决方案:确保所有bcast都设置良好!