我有一个分布式的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;汇编错误,为什么?
答案 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);
}