Библиотека графов Boost, распределенная в ширину, ошибка времени выполнения MPI_Unpack

Я использую библиотеку графов повышения и имею ошибку времени выполнения, которую я не могу понять, как исправить.

Когда я создаю и сначала ищу в ширину граф 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

Из трассировки стека я полагаю, что код дает сбой при вызове синхронизации в первый раз, когда очередь вершин для обработки проверяется на пустую в коде поиска в ширину.

Может ли кто-нибудь сказать мне, что не так в моем коде, пожалуйста? Я использую версию boost 1.41.0 на Mac Pro под управлением Red Hat Linux (выпуск 6.2) с gcc 4.4.6, если это поможет.

Мой код:

#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: неверный аргумент какого-то другого типа


person Clara Moore    schedule 23.07.2012    source источник


Ответы (1)


Как оказалось, обновление до Boost 1.50.0 решило эту проблему.

person Clara Moore    schedule 24.07.2012