Boost.MPI recv 到现有矢量的切片中
Boost.MPI recv into slice of existing vector
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 元素向量。
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- MPI突然停止了对多个核心的操作
- 如何优雅地切片对象
- 设置 Visual Studio for MPI: 找不到标识符错误
- 避免矢量中的对象切片<Base><shared_ptr>
- 从 std::vector<无符号字符>切片中提取 int?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 重载 MPI 中的运算符 ()
- MPI:检查是否有任何进程已终止
- 使用 pybind11 共享 MPI 通信器
- 专门化模板覆盖函数/避免对象切片
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- 在具有 MPI 的超立方体中广播
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 我如何告诉叮叮当当的整洁切片特定类是可以的?
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- 使用 MPI 的 C++ 中的并行 for 循环
- 如何将 OpenMP 和 MPI 导入到大型 CLion CMake 项目中?
- 如何在 c++ 中进行 python 样式的字符串切片