You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
101 lines
3.6 KiB
101 lines
3.6 KiB
// 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_GRAPH_PARALLEL_PROCESS_GROUP_HPP |
|
#define BOOST_GRAPH_PARALLEL_PROCESS_GROUP_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 <cstdlib> |
|
#include <utility> |
|
|
|
namespace boost { namespace graph { namespace parallel { |
|
|
|
/** |
|
* A special type used as a flag to a process group constructor that |
|
* indicates that the copy of a process group will represent a new |
|
* distributed data structure. |
|
*/ |
|
struct attach_distributed_object { }; |
|
|
|
/** |
|
* Describes the context in which a trigger is being invoked to |
|
* receive a message. |
|
*/ |
|
enum trigger_receive_context { |
|
/// No trigger is active at this time. |
|
trc_none, |
|
/// The trigger is being invoked during synchronization, at the end |
|
/// of a superstep. |
|
trc_in_synchronization, |
|
/// The trigger is being invoked as an "early" receive of a message |
|
/// that was sent through the normal "send" operations to be |
|
/// received by the end of the superstep, but the process group sent |
|
/// the message earlier to clear its buffers. |
|
trc_early_receive, |
|
/// The trigger is being invoked for an out-of-band message, which |
|
/// must be handled immediately. |
|
trc_out_of_band, |
|
/// The trigger is being invoked for an out-of-band message, which |
|
/// must be handled immediately and has alredy been received by |
|
/// an MPI_IRecv call. |
|
trc_irecv_out_of_band |
|
}; |
|
|
|
// Process group tags |
|
struct process_group_tag {}; |
|
struct linear_process_group_tag : virtual process_group_tag {}; |
|
struct messaging_process_group_tag : virtual process_group_tag {}; |
|
struct immediate_process_group_tag : virtual messaging_process_group_tag {}; |
|
struct bsp_process_group_tag : virtual messaging_process_group_tag {}; |
|
struct batch_process_group_tag : virtual messaging_process_group_tag {}; |
|
struct locking_process_group_tag : virtual process_group_tag {}; |
|
struct spawning_process_group_tag : virtual process_group_tag {}; |
|
|
|
struct process_group_archetype |
|
{ |
|
typedef int process_id_type; |
|
}; |
|
|
|
void wait(process_group_archetype&); |
|
void synchronize(process_group_archetype&); |
|
int process_id(const process_group_archetype&); |
|
int num_processes(const process_group_archetype&); |
|
|
|
template<typename T> void send(process_group_archetype&, int, int, const T&); |
|
|
|
template<typename T> |
|
process_group_archetype::process_id_type |
|
receive(const process_group_archetype& pg, |
|
process_group_archetype::process_id_type source, int tag, T& value); |
|
|
|
template<typename T> |
|
std::pair<process_group_archetype::process_id_type, std::size_t> |
|
receive(const process_group_archetype& pg, int tag, T values[], std::size_t n); |
|
|
|
template<typename T> |
|
std::pair<process_group_archetype::process_id_type, std::size_t> |
|
receive(const process_group_archetype& pg, |
|
process_group_archetype::process_id_type source, int tag, T values[], |
|
std::size_t n); |
|
|
|
} } } // end namespace boost::graph::parallel |
|
|
|
namespace boost { namespace graph { namespace distributed { |
|
using parallel::trigger_receive_context; |
|
using parallel::trc_early_receive; |
|
using parallel::trc_out_of_band; |
|
using parallel::trc_irecv_out_of_band; |
|
using parallel::trc_in_synchronization; |
|
using parallel::trc_none; |
|
using parallel::attach_distributed_object; |
|
} } } // end namespace boost::graph::distributed |
|
|
|
#endif // BOOST_GRAPH_PARALLEL_PROCESS_GROUP_HPP
|
|
|