Added boost header
This commit is contained in:
101
test/external/boost/graph/parallel/process_group.hpp
vendored
Normal file
101
test/external/boost/graph/parallel/process_group.hpp
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user