【问题标题】:MPI_Bcast - One row in a 2D arrayMPI_Bcast - 二维数组中的一行
【发布时间】: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

我做错了什么?

【问题讨论】:

标签: c arrays mpi


【解决方案1】:

原来我的代码中有多余的 MP_Bcast 搞砸了我的整个程序。

解决方案:确保您的所有广播都设置妥当!

【讨论】:

  • 什么意思,你的参数有错误吗?
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多