我尝试使用mpfr_t
发送MPI_Scatter
类型的变量。例如:
mpfr_t *v1 = new mpfr_t[10];
mpfr_t *v2 = new mpfr_t[10];
MPI_Scatter(v1, 5, MPI_BYTE, v2, 5, MPI_BYTE, 0, MPI_COMM_WORLD );
for (int i = 0; i < 5; i++)
mpfr_printf("value rank %d - %RNf \n", ProcRank, v2[i]);
打印:
value rank 0 - nan
value rank 0 - nan
value rank 0 - nan
.....
value rank 1 - nan
value rank 0 - nan
但这是MPI_Bcast的工作。我做错了什么。代码C / C ++,MPI lib是OpenMPI-1.6。
答案 0 :(得分:0)
您将sendcount指定为5,将数据类型指定为MPI_BYTE。这看起来很奇怪。如果要使用MPI_BYTE并且要发送5 mpfr_t值,请指定5 * sizeof(mpfr_t)的sendcount。另一个选择是创建自己的MPI派生数据类型(如果你想摆脱sizeof())。