通过 mpi 发送一个 c++ std::vector<bool>

Posted

技术标签:

【中文标题】通过 mpi 发送一个 c++ std::vector<bool>【英文标题】:Send a c++ std::vector<bool> via mpi 【发布时间】: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) 我应该给出多少个元素? (与上一点有关)

【问题讨论】:

检查this answer regarding serialization 在这种情况下我不会使用std::vector&lt;bool&gt;,因为严格来说它不是bools 的向量。 std::vector&lt;char&gt;struct Bool bool x;; 的向量是可能的替代方案 你也可以考虑使用boost::vector&lt;bool&gt; 这是标准向量 where T=bool. 【参考方案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;

【讨论】:

以上是关于通过 mpi 发送一个 c++ std::vector<bool>的主要内容,如果未能解决你的问题,请参考以下文章

pybind11:将 MPI 通信器从 Python 发送到 CPP

通过 MPI 发送和接收二维数组

C++ MPI 创建并发送具有字段 char[16] 和 integer 的结构数组

分段错误:C++ 中的结构序列化和 MPI 数据传输

将 mpi 消息从 c++ 代码发送到 fortran 90 代码

使用 MPI 发送二维数组