ブースト グラフ ライブラリを使用していますが、実行時エラーが発生し、修正方法がわかりません。
頂点数とプロセッサ数の組み合わせが間違っている rmat グラフを作成して幅優先検索すると、MPI_Unpack
実行時エラーが発生します。
Number of Vertices
Processors | 1,000,000 | 2,000,000
1 | pass | pass
2 | pass | fail
3 | pass | pass
4 | pass | pass
スタック トレースから、幅優先検索コード内で処理する頂点のキューが空であるかどうかが最初にチェックされるときに、同期の呼び出しでコードが失敗していると思います。
私のコードで何が間違っているのか教えてください。Red Hat Linux (リリース 6.2) と gcc 4.4.6 を実行している Mac Pro でブースト バージョン 1.41.0 を使用しています。
私のコードは次のとおりです。
#include <boost/graph/use_mpi.hpp>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/graph/distributed/concepts.hpp>
#include <boost/graph/adj_list_serialize.hpp>
#include <boost/graph/distributed/mpi_process_group.hpp>
#include <boost/graph/distributed/adjacency_list.hpp>
#include <boost/random/linear_congruential.hpp>
#include <boost/graph/distributed/breadth_first_search.hpp>
#include <boost/graph/rmat_graph_generator.hpp>
using namespace boost;
using namespace graph;
using namespace distributed;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
int verts = 20;
if(argc > 1){
verts = atoi(argv[1]);
}
int edgs = 12*verts;
if(argc > 2){
edgs = atoi(argv[2]);
}
typedef adjacency_list<listS, distributedS<mpi_process_group, vecS>, undirectedS> Graph;
minstd_rand gen_rmat;
typedef rmat_iterator<minstd_rand, Graph> RMATgen;
Graph g(RMATgen(gen_rmat, verts, 12*verts, 0.33, 0.15, 0.49, 0.03), RMATgen(), verts);
world.barrier();
synchronize(g.process_group());
world.barrier();
breadth_first_search(g, vertex(0, g), visitor(bfs_visitor<null_visitor>()));
world.barrier();
return 0;
}
そして、私が得る実行時エラーは次のとおりです。
boost::exception_detail::clone_impl のインスタンスをスローした後に呼ばれる終了
<boost::exception_detail::error_info_injector<boost::mph::exception> >
what(): MPI_Unpack: MPI_ERR_ARG: 他の種類の無効な引数