gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:30:25 25 4
gpt4 key购买 nike

我正在尝试使用 MPI 发送和接收字符串,但结果毫无希望。

发送函数:

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

和 recv 函数:

    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 wrappers .

关于c++ - 如何使用 MPI 发送和接收字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20620421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com