提升收集提升矢量

时间:2014-12-29 12:33:15

标签: c++ boost vector mpi

我有一个分布式的boost :: numeric :: ublas :: vector distributed_boost_vector,我想在根处理器中收集整个分布式的boost向量。 我正在尝试使用该功能:

template<typename T> 
void gather(const communicator & comm, const T & in_value, T * out_values, 
          int root);

boost::mpi::gather<boost::numeric::ublas::vector<double> >
  (boost_comm, distributed_boost_vector, all_boost_vector, 0);

其中all_boost_vector是boost :: numeric :: ublas :: vector

我收到&#34;没有匹配的呼叫功能&#34;汇编错误,为什么?

1 个答案:

答案 0 :(得分:1)

最相关的重载是:

void gather( const boost::mpi::communicator &comm, const T &in_value, T *out_values, int root )
void gather( const boost::mpi::communicator &comm, const T &in_value, int root )
void gather( const boost::mpi::communicator &comm, const T &in_value, std::vector<T> &out_values, int root )

所以要么通过指针传递:

boost::mpi::gather(boost_comm, distributed_boost_vector, &all_boost_vector, 0);

或传递out_values的std :: vector:

std::vector<ublasv> out_values;
boost::mpi::gather(boost_comm, distributed_boost_vector, out_values, 0);

<强> Live On Coliru

#include <boost/numeric/ublas/vector.hpp>
#include <boost/mpi/collectives/gather.hpp>
#include <iostream>

int main() {
    boost::mpi::communicator boost_comm;
    typedef boost::numeric::ublas::vector<double> ublasv;

    ublasv distributed_boost_vector, all_boost_vector;
    boost::mpi::gather(boost_comm, distributed_boost_vector, &all_boost_vector, 0);

    std::vector<ublasv> out_values;
    boost::mpi::gather(boost_comm, distributed_boost_vector, out_values, 0);
}