通过 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<bool>
is not necessarily an array of bools。
如果我想发送接收存储在std::vector<int>
中的int 数据,我会使用MPI_Send(vect.data(),num_of_ints,MPI_INT,dest_rk,tag,comm)
。
我应该如何使用MPI_Send
发送std::vector<bool>
?特别是:
vect.data()
作为指向缓冲区的指针吗?
我应该提供什么 MPI 类型?不知何故,我觉得MPI_CXX_BOOL
不适用(请参阅此question)
我应该给出多少个元素? (与上一点有关)
【问题讨论】:
检查this answer regarding serialization 在这种情况下我不会使用std::vector<bool>
,因为严格来说它不是bool
s 的向量。 std::vector<char>
或 struct Bool bool x;;
的向量是可能的替代方案
你也可以考虑使用boost::vector<bool>
这是标准向量std::vector<bool>
specialization 没有data()
成员函数。底层存储方案is not specified按标准:
不要求将数据存储为
bool
值的连续分配。建议使用空间优化的位表示。
发送std::vector<bool>
的唯一合理选择是将其复制到char
的向量中(或类似std::int8_t
的类型),然后发送该向量。更好的选择可能是从一开始就避免在代码中使用std::vector<bool>
。
【讨论】:
以上是关于通过 mpi 发送一个 c++ std::vector<bool>的主要内容,如果未能解决你的问题,请参考以下文章
pybind11:将 MPI 通信器从 Python 发送到 CPP
C++ MPI 创建并发送具有字段 char[16] 和 integer 的结构数组