提升收集提升向量

boost gather a boost vector

本文关键字:向量      更新时间:2023-10-16

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

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是提升::数字::ublas::vector

我在编译中收到"调用没有匹配函数"错误,为什么?

最相关的重载是:

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);

或者传递 std::vector for out_values

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

住在科里鲁

#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);
}