Dune Core Modules (2.4.1)

collectivecommunication.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_COLLECTIVECOMMUNICATION_HH
4 #define DUNE_COLLECTIVECOMMUNICATION_HH
12 #include <iostream>
13 #include <complex>
14 #include <algorithm>
15 
18 
38 namespace Dune
39 {
40 
41  /* define some type that definitely differs from MPI_Comm */
42  struct No_Comm {};
43 
44 
71  template<typename C>
73  {
74  public:
77  {}
78  CollectiveCommunication (const C&)
79  {}
80 
82  int rank () const
83  {
84  return 0;
85  }
86 
88  int size () const
89  {
90  return 1;
91  }
92 
96  template<typename T>
97  T sum (T& in) const // MPI does not know about const :-(
98  {
99  return in;
100  }
101 
105  template<typename T>
106  int sum (T* inout, int len) const
107  {
108  return 0;
109  }
110 
114  template<typename T>
115  T prod (T& in) const // MPI does not know about const :-(
116  {
117  return in;
118  }
119 
124  template<typename T>
125  int prod (T* inout, int len) const
126  {
127  return 0;
128  }
129 
133  template<typename T>
134  T min (T& in) const // MPI does not know about const :-(
135  {
136  return in;
137  }
138 
143  template<typename T>
144  int min (T* inout, int len) const
145  {
146  return 0;
147  }
148 
152  template<typename T>
153  T max (T& in) const // MPI does not know about const :-(
154  {
155  return in;
156  }
157 
162  template<typename T>
163  int max (T* inout, int len) const
164  {
165  return 0;
166  }
167 
170  int barrier () const
171  {
172  return 0;
173  }
174 
177  template<typename T>
178  int broadcast (T* inout, int len, int root) const
179  {
180  return 0;
181  }
182 
194  template<typename T>
195  int gather (T* in, T* out, int len, int root) const // note out must have same size as in
196  {
197  for (int i=0; i<len; i++)
198  out[i] = in[i];
199  return 0;
200  }
201 
220  template<typename T>
221  int gatherv (T* in, int sendlen, T* out, int* recvlen, int* displ, int root) const
222  {
223  for (int i=*displ; i<sendlen; i++)
224  out[i] = in[i];
225  return 0;
226  }
227 
240  template<typename T>
241  int scatter (T* send, T* recv, int len, int root) const // note out must have same size as in
242  {
243  for (int i=0; i<len; i++)
244  recv[i] = send[i];
245  return 0;
246  }
247 
265  template<typename T>
266  int scatterv (T* send, int* sendlen, int* displ, T* recv, int recvlen, int root) const
267  {
268  for (int i=*displ; i<*sendlen; i++)
269  recv[i] = send[i];
270  return 0;
271  }
272 
285  template<typename T>
286  int allgather(T* sbuf, int count, T* rbuf) const
287  {
288  for(T* end=sbuf+count; sbuf < end; ++sbuf, ++rbuf)
289  *rbuf=*sbuf;
290  return 0;
291  }
292 
308  template<typename T>
309  int allgatherv (T* in, int sendlen, T* out, int* recvlen, int* displ) const
310  {
311  for (int i=*displ; i<sendlen; i++)
312  out[i] = in[i];
313  return 0;
314  }
315 
327  template<typename BinaryFunction, typename Type>
328  int allreduce(Type* inout, int len) const
329  {
330  return 0;
331  }
332 
345  template<typename BinaryFunction, typename Type>
346  void allreduce(Type* in, Type* out, int len) const
347  {
348  std::copy(in, in+len, out);
349  return;
350  }
351 
352  };
353 }
354 
355 #endif
Various helper classes derived from from std::binary_function for stl-style functional programming.
Collective communication interface and sequential default implementation.
Definition: collectivecommunication.hh:73
int min(T *inout, int len) const
Compute the minimum over all processes for each component of an array and return the result in every ...
Definition: collectivecommunication.hh:144
int max(T *inout, int len) const
Compute the maximum over all processes for each component of an array and return the result in every ...
Definition: collectivecommunication.hh:163
int rank() const
Return rank, is between 0 and size()-1.
Definition: collectivecommunication.hh:82
int size() const
Number of processes in set, is greater than 0.
Definition: collectivecommunication.hh:88
int allreduce(Type *inout, int len) const
Compute something over all processes for each component of an array and return the result in every pr...
Definition: collectivecommunication.hh:328
int allgatherv(T *in, int sendlen, T *out, int *recvlen, int *displ) const
Gathers data of variable length from all tasks and distribute it to all.
Definition: collectivecommunication.hh:309
int sum(T *inout, int len) const
Compute the sum over all processes for each component of an array and return the result in every proc...
Definition: collectivecommunication.hh:106
int barrier() const
Wait until all processes have arrived at this point in the program.
Definition: collectivecommunication.hh:170
int gather(T *in, T *out, int len, int root) const
Gather arrays on root task.
Definition: collectivecommunication.hh:195
T max(T &in) const
Compute the maximum of the argument over all processes and return the result in every process....
Definition: collectivecommunication.hh:153
int scatterv(T *send, int *sendlen, int *displ, T *recv, int recvlen, int root) const
Scatter arrays of variable length from a root to all other tasks.
Definition: collectivecommunication.hh:266
int scatter(T *send, T *recv, int len, int root) const
Scatter array from a root to all other task.
Definition: collectivecommunication.hh:241
T min(T &in) const
Compute the minimum of the argument over all processes and return the result in every process....
Definition: collectivecommunication.hh:134
T sum(T &in) const
Compute the sum of the argument over all processes and return the result in every process....
Definition: collectivecommunication.hh:97
int allgather(T *sbuf, int count, T *rbuf) const
Gathers data from all tasks and distribute it to all.
Definition: collectivecommunication.hh:286
CollectiveCommunication()
Construct default object.
Definition: collectivecommunication.hh:76
int gatherv(T *in, int sendlen, T *out, int *recvlen, int *displ, int root) const
Gather arrays of variable size on root task.
Definition: collectivecommunication.hh:221
T prod(T &in) const
Compute the product of the argument over all processes and return the result in every process....
Definition: collectivecommunication.hh:115
int broadcast(T *inout, int len, int root) const
Distribute an array from the process with rank root to all other processes.
Definition: collectivecommunication.hh:178
int prod(T *inout, int len) const
Compute the product over all processes for each component of an array and return the result in every ...
Definition: collectivecommunication.hh:125
void allreduce(Type *in, Type *out, int len) const
Compute something over all processes for each component of an array and return the result in every pr...
Definition: collectivecommunication.hh:346
A few common exception classes.
Dune namespace.
Definition: alignment.hh:10
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 8, 22:30, 2024)