如何使用MPI发送和接收字符串

我正在尝试使用MPI发送和接收字符串,但结果是无跳的。

发送function:

MPI_Send(&result, result.size(), MPI_CHAR, 0, 0, MPI_COMM_WORLD); 

和recvfunction:

  MPI_Recv(&result, /* message buffer */ 128, /* one data item */ MPI_CHAR, /* of type char real */ MPI_ANY_SOURCE, /* receive from any sender */ MPI_ANY_TAG, /* any type of message */ MPI_COMM_WORLD, /* default communicator */ &status); /* info about the received message */ 

结果是字符串。

我没有得到任何错误,但程序不想完成。

std::string地址与底层C字符串的地址不同,因此发送应该像这样修复:

 MPI_Send(result.c_str(), result.size(), MPI_CHAR, 0, 0, MPI_COMM_WORLD); 

您尝试这样做时无法接收。 您需要一个缓冲区(一个char数组),您将传递给MPI_Recv并稍后使用它来创建一个std::string实例。 要获得接收到的字符串的长度,请使用MPI_Get_count – 这应该将指针传递给缓冲区到std::string构造函数。

为了避免预先分配缓冲区并允许它接收任何大小的字符串,您应该调用MPI_ProbeMPI_Get_count来获取长度。 知道了长度,您可以使用必要的确切大小来分配缓冲区,然后再调用MPI_Recv

如果这听起来有点复杂,那么你可以考虑使用BOOST MPI包装器 。