QMCPACK
CommUtilities.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
8 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
9 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
10 //
11 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
12 //////////////////////////////////////////////////////////////////////////////////////
13 
14 
15 /** @file CommUtilities.h
16  * @brief define convenience functions for mpi operations.
17  */
18 #ifndef OHMMS_COMMUNICATION_UTILITY_FUNCTIONS_H
19 #define OHMMS_COMMUNICATION_UTILITY_FUNCTIONS_H
20 #include "Message/Communicate.h"
21 #if defined(HAVE_MPI)
22 namespace qmcplusplus
23 {
24 template<typename IT>
25 inline void wait_all(IT first, IT last)
26 {
27  std::vector<Communicate::request> r(first, last);
28  std::vector<Communicate::status> st(r.size());
29  MPI_Waitall(r.size(), &(r[0]), &(st[0]));
30 }
31 
32 template<typename CT>
33 inline void wait_all(CT& requests)
34 {
35  std::vector<Communicate::status> st(requests.size());
36  MPI_Waitall(requests.size(), &(requests[0]), &(st[0]));
37 }
38 
39 
40 inline void wait_all(int n, Communicate::request* pending)
41 {
42  std::vector<Communicate::status> st(n);
43  MPI_Waitall(n, pending, &(st[0]));
44 }
45 
46 template<typename CT>
47 inline void cancel(CT& r)
48 {
49  for (int i = 0; i < r.size(); i++)
50  MPI_Cancel(&r[i]);
51 }
52 
53 template<typename IT>
54 inline void cancel(IT first, IT last)
55 {
56  while (first != last)
57  {
58  MPI_Cancel(&(*first));
59  ++first;
60  }
61 }
62 
63 template<typename T>
64 inline void bcast(T& a, Communicate* comm)
65 {
66  comm->bcast(a);
67 }
68 
69 } // namespace qmcplusplus
70 #else
71 namespace qmcplusplus
72 {
73 template<typename CT>
74 inline void cancel(CT& r)
75 {}
76 
77 template<typename T>
78 inline void bcast(T& a, Communicate* comm)
79 {}
80 } // namespace qmcplusplus
81 #endif
82 #endif
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
void cancel(CT &r)
Definition: CommUtilities.h:74
Wrapping information on parallelism.
Definition: Communicate.h:68
void bcast(T &a, Communicate *comm)
Definition: CommUtilities.h:78
void bcast(T &)