如何使用 mpi 分散修复"vector subscript out of range"?
How to fix "vector subscript out of range" using mpi scatter?
问题在于我对 boost MPI 包装器如何工作的误解。我正在使用Microsoft MPI 实现。在此代码中,我尝试将std::vector
分散到进程中,但得到调试断言vector subscript out of range
错误。
这段代码是我使用提升包装器和Microsoft MPI 实现超排序算法的引导程序。
我尝试了来自提升库的示例,但得到了相同的断言。我也试图包括<vector>
和<boost/serialization/vector>
,但没有帮助。我使用 boost 1.70 和最新版本的 Microsoft MPI 在 Windows 10 上运行我的程序。
#pragma once
#include <boost/mpi.hpp>
#include <boost/mpi/collectives.hpp>
#include <boost/serialization/vector.hpp>
#include "qsort.hpp"
#include "utils.hpp"
namespace algo {
namespace mpi_extension {
namespace mpi = boost::mpi;
void hyperqsort_v1(int argc, char* argv[]) {
mpi::environment env(argc, argv);
mpi::communicator world;
int value = 0;
int recv_value = 0;
std::vector<int> unsorted_list{5, 3, 6, 2, 9, 1, 10, 7};
auto distribuion_number = unsorted_list.size() / world.size();
std::vector<std::vector<int>> unsorted_dist_list;
if(0 == world.rank()) {
for(size_t j = 0; j < world.size(); ++j) {
for(size_t k = 0 + j; k < distribuion_number + j; ++k) {
unsorted_dist_list[j].push_back(unsorted_list[j + k]);
}
}
}
std::vector<int> recv_vector;
recv_vector.resize(distribuion_number);
mpi::scatter(
world, unsorted_dist_list, recv_vector, 0);
}
} // namespace mpi_extension
} // namespace algo
qsort.hpp - qsort 算法的顺序实现
我希望通信器中的所有进程都有其未排序的列表。
我只能在调试版本中产生此错误
仅在调试版本中收到该错误,因为Microsoft编译器仅在调试版本中包含该签入。 问题在发布版本中仍然存在。
如果world.rank()
为零,则在unsorted_dist_list[j]
中使用时unsorted_dist_list
将是一个空向量。 至少,您应该添加
unsorted_dist_list.resize(world.size());
在for (size_t j = 0;
循环之前。
如果world.rank()
不为零,则传递给 mpi::scatter
时unsorted_dist_list
将为空。
正确的方法是使用 std::vector::d ata(( 来获取第一个元素的地址。可能它仅适用于Microsoft MPI 实现。
不上升调试断言的示例:mpiexec -n 4
mpi::environment env;
mpi::communicator world;
std::vector<int> unsorted_list{11, 36, 44, 50, 53, 67, 86, 95};
std::vector<int> list;
list.resize(2);
mpi::scatter(world, unsorted_list.data(), list.data(), 2, 0);
相关文章:
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 如何解决'vector subscript out of range'错误?
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- pop_back() 导致"Vector subscript out of range"
- 使用矢量"String subscript out of range"错误
- 我收到"vector subscript out of range"错误
- 我正在"string subscript out of range error".我不知道为什么
- 这里有一个错误:"string subscript is out of range"
- 每次调试此代码时,我都会得到"subscript out of range error"。有人可以帮我查明一个或多个错误吗?
- 为什么输入时出现错误? "expression: string subscript out of range"
- 为什么我的程序有一个实例,其中"Vector Subscript out of Range"?
- 从矢量字符串中读取和拉直多个图像,得到错误:"vector subscript out of range" [c++]
- 错误"String subscript out of range"
- 当我尝试运行此程序时,出现一个错误,该错误使程序停止并说"Vector subscript out of range"
- 无法在 Visual Studio 2012 中捕获"ctor subscript out of range"异常
- 为什么我的代码出现"vector subscript out of range"错误?
- 将向量传递到函数时出现"vector subscript out of range"错误:c++