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