【问题标题】:Send a c++ std::vector<bool> via mpi通过 mpi 发送一个 c++ std::vector<bool>
【发布时间】:2020-01-22 13:35:13
【问题描述】:

我知道存储了一个std::vector&lt;bool&gt;is not necessarily an array of bools

如果我想发送接收存储在std::vector&lt;int&gt; 中的int 数据,我会使用MPI_Send(vect.data(),num_of_ints,MPI_INT,dest_rk,tag,comm)

我应该如何使用MPI_Send 发送std::vector&lt;bool&gt; ?特别是:

  • 我可以/应该使用vect.data() 作为指向缓冲区的指针吗?
  • 我应该提供什么 MPI 类型?不知何故,我觉得MPI_CXX_BOOL 不适用(请参阅此question
  • 我应该给出多少个元素? (与上一点有关)

【问题讨论】:

  • 在这种情况下我不会使用std::vector&lt;bool&gt;,因为严格来说它不是bools 的向量。 std::vector&lt;char&gt;struct Bool { bool x;}; 的向量是可能的替代方案
  • 你也可以考虑使用boost::vector&lt;bool&gt; 这是标准向量 where T=bool.

标签: c++ boolean mpi


【解决方案1】:

std::vector&lt;bool&gt; specialization 没有data() 成员函数。底层存储方案is not specified按标准:

不要求将数据存储为bool 值的连续分配。建议使用空间优化的位表示。

发送std::vector&lt;bool&gt; 的唯一合理选择是将其复制到char 的向量中(或类似std::int8_t 的类型),然后发送该向量。更好的选择可能是从一开始就避免在代码中使用std::vector&lt;bool&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多