【发布时间】:2019-09-10 22:16:11
【问题描述】:
问题在于我对 boost MPI 包装器如何工作的误解。
我正在使用 Microsoft MPI 实现。
在这段代码中,我试图将std::vector 分散到进程中,但得到一个调试断言vector subscript out of range 错误。
这段代码是我使用 boost 包装器和 Microsoft MPI 实现超排序算法的引导程序。
我尝试了来自 boost 库的示例,但得到了相同的断言。
我还尝试将<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 算法的顺序实现
我希望通信器中的所有进程都有自己的未排序列表。
我只能在调试版本中产生这个错误
【问题讨论】:
-
我只能在调试版本中产生此错误我认为这是因为在发布模式下不存在越界检查。你还有一些错误。
-
第一步是让你的调试器告诉你哪一行包含越界访问。