0

問題は、ブースト MPI ラッパーがどのように機能するかについての私の誤解にあります。Microsoft MPI 実装を使用しています。このコードではstd::vector、プロセスに分散しようとしていますが、デバッグ アサーションvector subscript out of rangeエラーが発生します。

このコードは、ブースト ラッパーと Microsoft MPI を使用してハイパーソート アルゴリズムを実装するためのブートストラップです。

ブースト ライブラリの例を試しましたが、同じアサーションが得られました。<vector>また、両方を含めようとしまし<boost/serialization/vector>たが、役に立ちませんでした。ブースト 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 アルゴリズムの順次実装

コミュニケーターのすべてのプロセスには、ソートされていないリストがあると思います。

このエラーは、デバッグ ビルドでのみ発生する可能性があります

4

2 に答える 2