Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
communicator_mpi.h
Go to the documentation of this file.
1 
14 #ifndef COMMUNICATOR_MPI_INCLUDED
15 #define COMMUNICATOR_MPI_INCLUDED
16 
17 #include <cstdarg>
18 #include <cstring>
19 #include <mpi.h>
20 #include <exception>
21 #include <cassert>
22 
23 #include "communicator.h"
24 #include "channel.h"
25 
27 
34 class Communicator_impl {
35  public:
36  static int init(int *pargc, char ***pargv);
37  static int finalize();
38  static void abort();
39 
40  static int setup(int ninstance = 1);
41 
42 // info about rank
43  static bool is_primary();
44 
45 #ifdef ENABLE_MULTI_INSTANCE
46  static bool is_primary_master();
47 
48 #endif
49 
50  static int self(); //< rank within small world.
51  static int size(); //< size of small world.
52 
53 #ifdef ENABLE_MULTI_INSTANCE
54  static int self_global();
55  static int world_id();
56 
57 #endif
58 
59 //XXX
60  static MPI_Comm& world() { return m_comm; }
61 
62 #if 0
63 // layout
64  static int ipe(const int dir); //< logical coordinate of current proc.
65  static int npe(const int dir); //< logical grid extent
66 
67  static int grid_rank(int *rank, const int *grid_coord);
68  static int grid_coord(int *grid_coord, const int rank);
69  static int grid_dims(int *grid_dims);
70 
71 #endif
72 
73 // synchronize
74  static int sync(); //< synchronize within small world.
75 
76 #ifdef ENABLE_MULTI_INSTANCE
77  static int sync_global(); //< synchronize all processes.
78 
79 #endif
80 
81 // info
82  static double get_time();
83 
84 // debug
85  static int status();
86 
87 // base case
88  class Base {
89  public:
90  static int reduce(int count, void *recv_buf, void *send_buf, MPI_Datatype type, MPI_Op op, int pattern);
91  static int broadcast(size_t size, void *data, int sender);
92  static int exchange(size_t size, void *recv_buf, void *send_buf, int idir, int ipm, int tag);
93 
94  static int send_1to1(size_t size, void *recv_buf, void *send_buf, int send_to, int recv_from, int tag);
95  };
96 
97 // for specific datatypes
98  static int broadcast_string(int count, string& data, int sender);
99 
100 // async communication
101  static Channel *send_init(int count, int idir, int ipm);
102  static Channel *recv_init(int count, int idir, int ipm);
103 
104  // logical and physical layout
105  class Layout;
106 
107  private:
108 
112 
114 
115 #ifdef ENABLE_MULTI_INSTANCE
116  static int m_n_instance; // number of instances
117  static int m_instance_id; // id of present instance
118 
119  static int m_global_rank;
120  static int m_global_size;
121 #endif
122 
123  static int m_grid_rank;
124  static int m_grid_size;
125 
126  static MPI_Comm m_comm;
127 };
128 #endif /* m__COMMUNICATOR_MPI_H */
static int send_1to1(size_t size, void *recv_buf, void *send_buf, int send_to, int recv_from, int tag)
static int broadcast(size_t size, void *data, int sender)
static int sync()
synchronize within small world.
static int setup(int ninstance=1)
static int status()
for debug
static bool is_primary()
info about rank
Channel class for asynchronous communication.
Definition: channel.h:16
static int reduce(int count, void *recv_buf, void *send_buf, int type, int op, int pattern)
static int init(int *pargc, char ***pargv)
static int m_comm
instead of MPI_Comm m_comm;
static MPI_Comm & world()
retrieves current communicator.
static int broadcast_string(int count, string &data, int sender)
for specific datatypes
Communicator_impl & operator=(const Communicator_impl &)
static double get_time()
for getting time interval using clock count.
static Channel * recv_init(int count, int idir, int ipm)
Definition: channel.cpp:100
static Channel * send_init(int count, int idir, int ipm)
async communication
Definition: channel.cpp:63
Communicator_impl(const Communicator_impl &)
Implementation of Communicator with BGNET library.
static int exchange(size_t size, void *recv_buf, void *send_buf, int idir, int ipm, int tag)