如何使用MPI发送GMP或MPFR类型

时间:2012-06-16 14:04:23

标签: c++ c mpi gmp mpfr

我尝试使用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。

1 个答案:

答案 0 :(得分:0)

您将sendcount指定为5,将数据类型指定为MPI_BYTE。这看起来很奇怪。如果要使用MPI_BYTE并且要发送5 mpfr_t值,请指定5 * sizeof(mpfr_t)的sendcount。另一个选择是创建自己的MPI派生数据类型(如果你想摆脱sizeof())。