ESyS-Particle  2.3.4
comm.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2017 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.apache.org/licenses/LICENSE-2.0 //
10 // //
12 
13 #ifndef __COMM_H
14 #define __COMM_H
15 
16 //--- MPI ---
17 #include <mpi.h>
18 
19 //--- project includes ---
20 #include "Foundation/console.h"
21 
22 //--- TML includes ---
23 #include "tml/type/gettype.h"
24 
25 //--- STL includes ---
26 #include <vector>
27 #include <map>
28 #include <utility>
29 #include <string>
30 
31 #undef barrier
32 
33 using std::vector;
34 using std::multimap;
35 using std::pair;
36 using std::string;
37 
46 class TML_Comm
47 {
48 protected:
49  MPI_Status m_status;
50  MPI_Comm m_comm;
51 
52 public:
53  bool isNull() const {return m_comm==MPI_COMM_NULL;};
54  int rank() const;
55  int size();
56  MPI_Comm comm() const {return m_comm;};
57 
58  // assignment
59  TML_Comm& operator=(const TML_Comm&);
60  void setComm(MPI_Comm);
61 
62  // construction of new communicators
63  TML_Comm();
64  TML_Comm(MPI_Comm);
65  TML_Comm include(const vector<int>&);
66  TML_Comm exclude(const vector<int>&);
67 
68  // send/recv for single data
69  template <typename T> void send(T,int,int=0);
70  template <typename T> void receive(T&,int,int=MPI_ANY_TAG);
71 
72  // send/recv for C-arrays with known dimension
73  template <typename T> void send_array(T*,int,int,int=0);
74  template <typename T> void receive_array(T*,int,int,int=MPI_ANY_TAG);
75 
76  // send/recv for STL containers
77  template <typename T> void send_cont(const T&,int,int=0);
78  template <typename T> void receive_cont(T&,int,int=MPI_ANY_TAG);
79 
80  // send/recv for STL containers of packable objects
81  template <typename T> void send_cont_packed(T,int,bool,int=0);
82  template <typename T> void receive_cont_packed(T&,int,bool,int=MPI_ANY_TAG);
83 
84  // sendrecv for single data
85  template <typename T,typename P> void sendrecv(T,P&,int,int,int=0);
86 
87  // sendrecv for C-arrays with known dimension
88  template <typename T,typename P> void sendrecv_array(T*,int,P*,int,int,int,int=0);
89 
90  // sendrecv for STL containers
91  template <typename T,typename P> void sendrecv_cont(T,P&,int,int,int=0);
92  template <typename T> void sendrecv_cont_replace(T&,int,int,int=0);
93 
94  // sendrecv for STL containers of packable objects
95  template <typename T,typename P> void sendrecv_cont_packed(T,P&,int,int,bool,int=0);
96  template <typename T> void sendrecv_cont_packed_replace(T&,int,int,bool,int=0);
97 
98  // broadcast
99  template <typename T> void broadcast(T);
100  template <typename T> void broadcast_array(T*,int);
101  template <typename T> void broadcast_cont(const T&);
102  template <typename T> void broadcast_cont_packed(const T &);
103 
104  // receive_broadcast
105  template <typename T> void recv_broadcast(T&,int);
106  template <typename T> void recv_broadcast_array(T*,int,int);
107  template <typename T> void recv_broadcast_cont(T&,int);
108  template <typename T> void recv_broadcast_cont_packed(T&,int);
109 
110  // scatter/gather
111  template <typename T> void scatter(const multimap<int,T>);
112  template <typename T> void recv_scatter(T&,int);
113  template <typename T> void gather(multimap<int,T>&);
114  template <typename T> void send_gather(T&,int);
115 
116  // debug versions
117  template <typename T> void gather_debug(multimap<int,T>&);
118  template <typename T> void send_gather_debug(T&,int);
119 
120  // scatter/gather packed
121  template <typename T> void scatter_packed(const multimap<int,T>);
122  template <typename T> void recv_scatter_packed(T&,int);
123  template <typename T> void gather_packed(multimap<int,T>&);
124  template <typename T> void send_gather_packed(const T &,int);
125 
126  // reduce ops
127  template <typename T> T sum_all(const T&);
128 
129  // syncronisation
130  void barrier();
131  void barrier(const string&);
132 };
133 
134 #include "tml/comm/comm.hpp"
135 #include "tml/comm/comm_coll.hpp"
136 
137 #endif //__COMM_H
comm.hpp
TML_Comm::barrier
void barrier()
Definition: comm.cpp:155
TML_Comm::recv_broadcast_cont_packed
void recv_broadcast_cont_packed(T &, int)
Definition: comm_coll.hpp:166
TML_Comm::send
void send(T, int, int=0)
Definition: comm.hpp:77
TML_Comm::sendrecv_array
void sendrecv_array(T *, int, P *, int, int, int, int=0)
Definition: comm.hpp:64
TML_Comm::receive_cont
void receive_cont(T &, int, int=MPI_ANY_TAG)
Definition: comm.hpp:163
TML_Comm::sum_all
T sum_all(const T &)
Definition: comm_coll.hpp:579
TML_Comm::sendrecv_cont
void sendrecv_cont(T, P &, int, int, int=0)
Definition: comm.hpp:192
TML_Comm::sendrecv_cont_replace
void sendrecv_cont_replace(T &, int, int, int=0)
Definition: comm.hpp:241
TML_Comm::sendrecv_cont_packed
void sendrecv_cont_packed(T, P &, int, int, bool, int=0)
Definition: comm.hpp:362
TML_Comm::setComm
void setComm(MPI_Comm)
Definition: comm.cpp:43
TML_Comm::send_cont_packed
void send_cont_packed(T, int, bool, int=0)
Definition: comm.hpp:294
Console::Debug
Console & Debug()
set verbose level of next message to "dbg"
TML_Comm::send_gather
void send_gather(T &, int)
Definition: comm_coll.hpp:357
comm_coll.hpp
TML_Comm::receive
void receive(T &, int, int=MPI_ANY_TAG)
Definition: comm.hpp:92
Console::Error
Console & Error()
set verbose level of next message to "err"
console.h
TML_Comm::gather_debug
void gather_debug(multimap< int, T > &)
Definition: comm_coll.hpp:315
TML_Comm::sendrecv_cont_packed_replace
void sendrecv_cont_packed_replace(T &, int, int, bool, int=0)
Definition: comm.hpp:418
TML_Comm::recv_broadcast_array
void recv_broadcast_array(T *, int, int)
Definition: comm_coll.hpp:126
TML_Comm::send_array
void send_array(T *, int, int, int=0)
Definition: comm.hpp:31
TML_Comm::recv_broadcast_cont
void recv_broadcast_cont(T &, int)
Definition: comm_coll.hpp:139
TML_Comm::include
TML_Comm include(const vector< int > &)
Definition: comm.cpp:89
TML_Comm::recv_scatter_packed
void recv_scatter_packed(T &, int)
Definition: comm_coll.hpp:455
TML_Comm::operator=
TML_Comm & operator=(const TML_Comm &)
Definition: comm.cpp:48
TML_Comm::recv_broadcast
void recv_broadcast(T &, int)
Definition: comm_coll.hpp:113
TML_Comm::broadcast_cont_packed
void broadcast_cont_packed(const T &)
Definition: comm_coll.hpp:85
TML_Comm::rank
int rank() const
Definition: comm.cpp:56
TML_Comm::recv_scatter
void recv_scatter(T &, int)
Definition: comm_coll.hpp:249
TML_Comm::send_gather_debug
void send_gather_debug(T &, int)
Definition: comm_coll.hpp:386
TML_Comm::receive_array
void receive_array(T *, int, int, int=MPI_ANY_TAG)
Definition: comm.hpp:46
comm.h
TML_Comm::m_comm
MPI_Comm m_comm
Definition: comm.h:50
TML_Comm::scatter
void scatter(const multimap< int, T >)
Definition: comm_coll.hpp:201
TML_Comm::comm
MPI_Comm comm() const
Definition: comm.h:56
TML_Comm
abstract base class for communicator
Definition: comm.h:47
TML_Comm::broadcast
void broadcast(T)
Definition: comm_coll.hpp:23
TML_Comm::broadcast_array
void broadcast_array(T *, int)
Definition: comm_coll.hpp:35
TML_Comm::gather_packed
void gather_packed(multimap< int, T > &)
Definition: comm_coll.hpp:480
TML_Comm::m_status
MPI_Status m_status
Definition: comm.h:49
gettype.h
TML_Comm::broadcast_cont
void broadcast_cont(const T &)
Definition: comm_coll.hpp:46
TML_Comm::TML_Comm
TML_Comm()
Definition: comm.cpp:23
TML_Comm::send_cont
void send_cont(const T &, int, int=0)
Definition: comm.hpp:120
TML_Comm::send_gather_packed
void send_gather_packed(const T &, int)
Definition: comm_coll.hpp:543
TML_Comm::gather
void gather(multimap< int, T > &)
Definition: comm_coll.hpp:273
TML_Comm::receive_cont_packed
void receive_cont_packed(T &, int, bool, int=MPI_ANY_TAG)
Definition: comm.hpp:326
console
Console console
Definition: console.cpp:25
TML_Comm::exclude
TML_Comm exclude(const vector< int > &)
Definition: comm.cpp:130
TML_Comm::isNull
bool isNull() const
Definition: comm.h:53
TML_Comm::scatter_packed
void scatter_packed(const multimap< int, T >)
Definition: comm_coll.hpp:418
TML_Comm::size
int size()
Definition: comm.cpp:69
TML_Comm::sendrecv
void sendrecv(T, P &, int, int, int=0)
Definition: comm.hpp:107