【发布时间】:2016-01-16 10:33:56
【问题描述】:
我正在尝试在二维数组中广播我的第一行。代码如下:
double *chunkPtr = malloc(sizeof(double) * columns);
if (rank == 0) {
chunkPtr = &chunk[0][0];
}
MPI_Bcast(chunkPtr, columns, MPI_DOUBLE, 0, MPI_COMM_WORLD);
chunk 是一个二维双精度数组(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
我做错了什么?
【问题讨论】:
-
您需要发布minimal, complete and verifiable example。我无法使用您提供的代码重现错误。