// Copyright 2004 The Trustees of Indiana University. | |
// Use, modification and distribution is subject to the Boost Software | |
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
// Authors: Douglas Gregor | |
// Andrew Lumsdaine | |
#ifndef BOOST_PARALLEL_ALGORITHM_HPP | |
#define BOOST_PARALLEL_ALGORITHM_HPP | |
#ifndef BOOST_GRAPH_USE_MPI | |
#error "Parallel BGL files should not be included unless <boost/graph/use_mpi.hpp> has been included" | |
#endif | |
#include <boost/optional.hpp> | |
#include <boost/config.hpp> // for BOOST_STATIC_CONSTANT | |
#include <vector> | |
#include <functional> | |
namespace boost { namespace parallel { | |
template<typename BinaryOp> | |
struct is_commutative | |
{ | |
BOOST_STATIC_CONSTANT(bool, value = false); | |
}; | |
template<typename T> | |
struct minimum : std::binary_function<T, T, T> | |
{ | |
const T& operator()(const T& x, const T& y) const { return x < y? x : y; } | |
}; | |
template<typename T> | |
struct maximum : std::binary_function<T, T, T> | |
{ | |
const T& operator()(const T& x, const T& y) const { return x < y? y : x; } | |
}; | |
template<typename T> | |
struct sum : std::binary_function<T, T, T> | |
{ | |
const T operator()(const T& x, const T& y) const { return x + y; } | |
}; | |
template<typename ProcessGroup, typename InputIterator, | |
typename OutputIterator, typename BinaryOperation> | |
OutputIterator | |
reduce(ProcessGroup pg, typename ProcessGroup::process_id_type root, | |
InputIterator first, InputIterator last, OutputIterator out, | |
BinaryOperation bin_op); | |
template<typename ProcessGroup, typename T, typename BinaryOperation> | |
inline T | |
all_reduce(ProcessGroup pg, const T& value, BinaryOperation bin_op) | |
{ | |
T result; | |
all_reduce(pg, | |
const_cast<T*>(&value), const_cast<T*>(&value+1), | |
&result, bin_op); | |
return result; | |
} | |
template<typename ProcessGroup, typename T, typename BinaryOperation> | |
inline T | |
scan(ProcessGroup pg, const T& value, BinaryOperation bin_op) | |
{ | |
T result; | |
scan(pg, | |
const_cast<T*>(&value), const_cast<T*>(&value+1), | |
&result, bin_op); | |
return result; | |
} | |
template<typename ProcessGroup, typename InputIterator, typename T> | |
void | |
all_gather(ProcessGroup pg, InputIterator first, InputIterator last, | |
std::vector<T>& out); | |
} } // end namespace boost::parallel | |
#include <boost/graph/parallel/detail/inplace_all_to_all.hpp> | |
#endif // BOOST_PARALLEL_ALGORITHM_HPP |