예제 #1
0
파일: vector.hpp 프로젝트: neapel/vexcl
 typename std::enable_if<
     boost::proto::matches<
         typename boost::proto::result_of::as_expr<Expr>::type,
         mpi_vector_expr_grammar
     >::value,
     const vector&
 >::type
 operator=(const Expr &expr) {
     (*local_data) = extract_local_expression()(boost::proto::as_child(expr));
     return *this;
 }
예제 #2
0
파일: reduce.hpp 프로젝트: Quanteek/vexcl
        typename std::enable_if<
            boost::proto::matches<Expr, mpi_vector_expr_grammar>::value, T
        >::type
        operator()(const Expr &expr) const {
            T local = reduce(extract_local_expression()(boost::proto::as_child(expr)));
            T global;

            MPI_Allreduce(&local, &global, 1,
                    mpi_type<T>(), mpi_reduce_op<RDC>(), mpi.comm);

            return global;
        }
예제 #3
0
파일: reduce.hpp 프로젝트: Quanteek/vexcl
        typename std::enable_if<
            boost::proto::matches<Expr, mpi_multivector_expr_grammar>::value,
            std::array<T, boost::result_of<mutltiex_dimension(Expr)>::type::value>
        >::type
        operator()(const Expr &expr) const {
            std::array<T, boost::result_of<mutltiex_dimension(Expr)>::type::value>
                local = reduce(extract_local_expression()(boost::proto::as_child(expr))),
                global;

            MPI_Allreduce(local.data(), global.data(), boost::result_of<mutltiex_dimension(Expr)>::type::value,
                    mpi_type<T>(), mpi_reduce_op<RDC>(), mpi.comm);

            return global;
        }