【问题标题】:Boost.MPI recv into slice of existing vectorBoost.MPI recv 到现有向量的切片中
【发布时间】:2016-08-02 00:27:06
【问题描述】:
vector<int> master(100);
vector<reference_wrapper<int>> sub = master(&master[10], &master[20]);
boost::mpi::irecv(source, tag, sub);

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

如果没有,除了 recv 和 copy,还有其他等效的替代方法吗?

【问题讨论】:

  • 请注意我已经修复了您帖子中过多的&lt;&lt;。也看看formatting help
  • 感谢@Zulan。我从手机上发布了问题,我能做的最好的就是使用冗余

标签: c++ boost vector mpi boost-mpi


【解决方案1】:

您的代码无效,您的编译器会很高兴地告诉您。 std::vector&lt;std::reference_wrapper&lt;int&gt;&gt; 没有这样的构造函数。 reference_wrapper 也不会以这种方式神奇地工作。

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

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

这是有效的,因为 std::vectorguaranteed to use contiguous storage。请注意,您还必须以数组形式发送数据。不要只发送一个较小的 10 元素向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2019-12-13
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2020-12-09
    • 2020-08-10
    • 2020-12-14
    相关资源
    最近更新 更多