Boost.MPI recv 到现有矢量的切片中


vector<int> master(100);
vector<reference_wrapper<int>> sub = master(&master[10], &master[20]);
boost::mpi::irecv(source, tag, sub);

上述内容对于接收和更新向量子集是否有效且有效?

如果没有,除了 recv 和 copy 之外,是否有等效的替代方案?

你的代码是无效的,因为你的编译器会很乐意告诉你。std::vector<std::reference_wrapper<int>>没有这样的构造函数。reference_wrapper也不会神奇地以这种方式工作。

有人可能会认为,在这种情况下使用boost::iterator_range是个好主意,但它不支持序列化。因此,除了构建自己的支持序列化的范围适配器外,您还必须手动执行此操作。幸运的是,通过使用数组重载,这非常简单:

comm.irecv(source, tag, &master[10], 10);

这是有效的,因为std::vector保证使用连续存储。请注意,您还必须以数组形式发送数据。不要只发送较小的 10 元素向量。

最新更新