【问题标题】:how to send a vector of string in mpi?如何在 mpi 中发送字符串向量?
【发布时间】:2014-01-28 01:32:14
【问题描述】:

我想在 MPI 中发送一个字符串向量,但我不知道应该如何使用 MPI_Send 和 MPI_receiev。例如,如果我想发送long 的向量,我将使用以下代码:

vector<double> local_data(n);

 MPI_Send(&local_data[0], n, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);

但是如果我想发送这样的字符串向量

vector<std::string> local_data(n);

我不知道我应该在 MPI_send 中使用什么作为 size of buffervariable 的类型, 或 MPI_recive。有什么解决办法吗?

【问题讨论】:

    标签: c++ vector mpi


    【解决方案1】:

    当您想在 MPI 中发送字符串时,您必须先将它们转换为 C 风格的 char 数组。没有MPI_STRING 类型(除非您使用一些非标准扩展)。当您转换为 c_str 时,您应该能够获取字符串的大小并将其用作 MPI_SENDMPI_RECV 的大小输入。

    【讨论】:

    • 非常感谢,我知道我不能直接在MPI中发送字符串,我找到了如何在MPI中发送单个字符串,但是现在我想发送一个字符串向量,什么是最好的解决方案吗?
    • 结果是一样的。您可以通过多次调用发送到MPI_SEND,或者您可以将所有字符串连接在一起并将它们作为一个大字符串发送。我建议第一个要容易得多。只需将一堆呼叫排队到MPI_ISEND 并一次完成。
    • 再次谢谢你,我还有一个问题,哪个更好:一次发送一个巨大的缓冲区或发送太小的消息3次,但在执行程序的不同时间而不是一次时间?
    • 你真的应该把你的额外问题分成另一个关于 SO 的问题。我很乐意在那里回答这个问题,但如果他们像这样串起来,这会让未来的访客感到困惑。
    猜你喜欢
    • 2013-04-23
    • 2013-11-13
    • 2014-01-04
    • 2018-07-21
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多