Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
communicator_bgnet.h
Go to the documentation of this file.
1 
14 #ifndef COMMUNICATOR_BGNET_INCLUDED
15 #define COMMUNICATOR_BGNET_INCLUDED
16 
17 #include <exception>
18 #include <cassert>
19 
20 #include <bgnet.h>
21 
22 #include "channel.h"
23 
25 
39  public:
40  static int init(int *pargc, char ***pargv);
41  static int finalize();
42  static void abort();
43 
44  static int setup(int ninstance = 1);
45 
47  static bool is_primary();
48 
49 #ifdef ENABLE_MULTI_INSTANCE
50  static bool is_primary_master();
51 #endif
52 
53  static int self(); //< rank within small world.
54  static int size(); //< size of small world.
55 
56 #ifdef ENABLE_MULTI_INSTANCE
57  static int self_global();
58  static int world_id();
59 #endif
60 
61 
62  // static MPI_Comm& world() { return m_comm; }
63  static int world() { return m_comm; }
64 
65  // synchronize
66  static int sync();
67 
68 #ifdef ENABLE_MULTI_INSTANCE
69  static int sync_global();
70 #endif
71 
73  static double get_time();
74 
76  static int status();
77 
79  class Base {
80  public:
81  static int reduce(int count, void *recv_buf, void *send_buf,
82  int type, int op, int pattern);
83 
84  static int broadcast(size_t size, void *data, int sender);
85 
86  static int exchange(size_t size, void *recv_buf, void *send_buf,
87  int idir, int ipm, int tag);
88 
89  static int send_1to1(size_t size, void *recv_buf, void *send_buf,
90  int send_to, int recv_from, int tag);
91  };
92 
94  static int broadcast_string(int count, string& data, int sender);
95  static int broadcast_double(int count, double *data, int sender);
96  static int broadcast_int(int count, int *data, int sender);
97 
99  static Channel *send_init(int count, int idir, int ipm);
100  static Channel *recv_init(int count, int idir, int ipm);
101 
103  class Layout;
104 
105  private:
109 
111 
112 #ifdef ENABLE_MULTI_INSTANCE
113  static int m_n_instance;
114  static int m_instance_id;
115 
116  static int m_global_rank;
117  static int m_global_size;
118 #endif
119 
120  static int m_grid_rank;
121  static int m_grid_size;
122 
123  static int m_comm;
124 };
125 #endif /* #ifndef COMMUNICATOR_BGNET_INCLUDED */
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 broadcast_double(int count, double *data, int sender)
static int sync()
synchronize within small world.
static int setup(int ninstance=1)
static int status()
for debug
static int broadcast_int(int count, int *data, int sender)
static bool is_primary()
info about rank
Channel class for asynchronous communication.
Definition: channel.h:24
static int reduce(int count, void *recv_buf, void *send_buf, int type, int op, int pattern)
static int init(int *pargc, char ***pargv)
Layout class for logical organisation of parallel nodes.
Definition: layout.h:19
static int m_comm
instead of MPI_Comm m_comm;
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:98
static Channel * send_init(int count, int idir, int ipm)
async communication
Definition: channel.cpp:61
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)