Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
communicator.h
Go to the documentation of this file.
1 
10 #ifndef __COMMUNICATOR_INCLUDED
11 #define __COMMUNICATOR_INCLUDED
12 
13 #include "configure.h"
14 #include "defs.h"
15 
16 #include <cstdio>
17 #include <cstdlib>
18 #include <cstddef>
19 #include <string>
20 using std::string;
21 
23 
37 // forward declaration
38 //class Channel;
39 
40 class Communicator {
41  public:
43 
52  static int init(int *pargc, char ***pargv);
53 
55 
60  static int finalize();
61 
63 
68  static void abort();
69 
71 
78  static int setup(int ninstance = 1);
79 
80 // info about rank
81  static bool is_primary();
82  static bool is_primary_master();
83 
84  static int self();
85 
86  static int nodeid() { return self(); }
87  static int size();
88 
89 #ifdef ENABLE_MULTI_INSTANCE
90  static int self_global();
91  static int world_id();
92 #endif
93 
94 // layout
95  static int ipe(const int dir);
96  static int npe(const int dir);
97 
98  static int grid_rank(int *rank, const int *grid_coord);
99  static int grid_coord(int *grid_coord, const int rank);
100  static int grid_dims(int *grid_dims);
101 
102 // synchronize
103  static int sync();
104 
105 #ifdef ENABLE_MULTI_INSTANCE
106  static int sync_global();
107 #endif
108 
109 // data transfer
110  static int broadcast(int count, double *data, int sender);
111  static int broadcast(int count, int *data, int sender);
112  static int broadcast(int count, string& data, int sender);
113 
114  static int exchange(int count, double *recv_buf, double *send_buf, int idir, int ipm, int tag);
115  static int exchange(int count, int *recv_buf, int *send_buf, int idir, int ipm, int tag);
116 
117  static int send_1to1(int count, double *recv_buf, double *send_buf, int p_to, int p_from, int tag);
118  static int send_1to1(int count, int *recv_buf, int *send_buf, int p_to, int p_from, int tag);
119 
120  static int reduce_sum(int count, double *recv_buf, double *send_buf, int pattern = 0);
121  static int reduce_sum(int count, int *recv_buf, int *send_buf, int pattern = 0);
122 
123  static int reduce_max(int count, double *recv_buf, double *send_buf, int pattern = 0);
124  static int reduce_max(int count, int *recv_buf, int *send_buf, int pattern = 0);
125 
126  static int reduce_min(int count, double *recv_buf, double *send_buf, int pattern = 0);
127  static int reduce_min(int count, int *recv_buf, int *send_buf, int pattern = 0);
128 
129  static double reduce_sum(double);
130  static double reduce_max(double);
131  static double reduce_min(double);
132 
133  static double get_time();
134 
135 // debug
136  static int status();
137 
139 
144  class Base {
145  public:
146  static int broadcast(size_t size, void *data, int sender);
147  static int exchange(size_t size, void *recv_buf, void *send_buf, int idir, int ipm, int tag);
148 
149  static int send_1to1(size_t size, void *recv_buf, void *send_buf, int send_to, int recv_from, int tag);
150  };
151 
152  private:
153 
155 
164 
166 };
167 #endif /* __COMMUNICATOR_INCLUDED */