OpenFPM_pdata  1.1.0
Project that contain the implementation of distributed structures
 All Data Structures Namespaces Functions Variables Typedefs Enumerations Friends Pages
MPI_IBcastW.hpp
1 /*
2  * MPI_IBcastW.hpp
3  *
4  * Created on: Apr 8, 2017
5  * Author: i-bird
6  */
7 
8 #ifndef OPENFPM_VCLUSTER_SRC_MPI_WRAPPER_MPI_IBCASTW_HPP_
9 #define OPENFPM_VCLUSTER_SRC_MPI_WRAPPER_MPI_IBCASTW_HPP_
10 
11 
12 
13 #include <mpi.h>
14 
32 {
33 public:
34  static inline void bcast(size_t proc ,void * buf, size_t sz, MPI_Request & req)
35  {
36  MPI_SAFE_CALL(MPI_Ibcast(buf,sz,MPI_BYTE, proc , MPI_COMM_WORLD,&req));
37  }
38 };
39 
46 template<typename T> class MPI_IBcastW
47 {
48 public:
49  static inline void bcast(size_t proc ,openfpm::vector<T> & v, MPI_Request & req)
50  {
51  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size() * sizeof(T),MPI_BYTE, proc , MPI_COMM_WORLD,&req));
52  }
53 };
54 
55 
59 template<> class MPI_IBcastW<int>
60 {
61 public:
62  static inline void bcast(size_t proc ,openfpm::vector<int> & v, MPI_Request & req)
63  {
64  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_INT, proc , MPI_COMM_WORLD,&req));
65  }
66 };
67 
71 template<> class MPI_IBcastW<unsigned int>
72 {
73 public:
74  static inline void bcast(size_t proc ,openfpm::vector<unsigned int> & v, MPI_Request & req)
75  {
76  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_UNSIGNED, proc , MPI_COMM_WORLD,&req));
77  }
78 };
79 
83 template<> class MPI_IBcastW<short>
84 {
85 public:
86  static inline void bcast(size_t proc ,openfpm::vector<short> & v, MPI_Request & req)
87  {
88  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_SHORT, proc , MPI_COMM_WORLD,&req));
89  }
90 };
91 
95 template<> class MPI_IBcastW<unsigned short>
96 {
97 public:
98  static inline void bcast(size_t proc ,openfpm::vector<unsigned short> & v, MPI_Request & req)
99  {
100  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_UNSIGNED_SHORT, proc , MPI_COMM_WORLD,&req));
101  }
102 };
103 
107 template<> class MPI_IBcastW<char>
108 {
109 public:
110  static inline void bcast(size_t proc ,openfpm::vector<char> & v, MPI_Request & req)
111  {
112  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_CHAR, proc , MPI_COMM_WORLD,&req));
113  }
114 };
115 
119 template<> class MPI_IBcastW<unsigned char>
120 {
121 public:
122  static inline void bcast(size_t proc ,openfpm::vector<unsigned char> & v, MPI_Request & req)
123  {
124  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_UNSIGNED_CHAR, proc , MPI_COMM_WORLD,&req));
125  }
126 };
127 
131 template<> class MPI_IBcastW<size_t>
132 {
133 public:
134  static inline void bcast(size_t proc ,openfpm::vector<size_t> & v, MPI_Request & req)
135  {
136  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_UNSIGNED_LONG, proc , MPI_COMM_WORLD,&req));
137  }
138 };
139 
143 template<> class MPI_IBcastW<long int>
144 {
145 public:
146  static inline void bcast(size_t proc ,openfpm::vector<long int> & v, MPI_Request & req)
147  {
148  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_LONG, proc , MPI_COMM_WORLD,&req));
149  }
150 };
151 
155 template<> class MPI_IBcastW<float>
156 {
157 public:
158  static inline void bcast(size_t proc ,openfpm::vector<float> & v, MPI_Request & req)
159  {
160  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_FLOAT, proc , MPI_COMM_WORLD,&req));
161  }
162 };
163 
167 template<> class MPI_IBcastW<double>
168 {
169 public:
170  static inline void bcast(size_t proc ,openfpm::vector<double> & v, MPI_Request & req)
171  {
172  MPI_SAFE_CALL(MPI_Ibcast(v.getPointer(), v.size(),MPI_DOUBLE, proc , MPI_COMM_WORLD,&req));
173  }
174 };
175 
176 
177 #endif /* OPENFPM_VCLUSTER_SRC_MPI_WRAPPER_MPI_IBCASTW_HPP_ */
size_t size()
Stub size.
Definition: map_vector.hpp:70
General recv for vector of.
Definition: MPI_IBcastW.hpp:46
Set of wrapping classing for MPI_Irecv.
Definition: MPI_IBcastW.hpp:31
Implementation of 1-D std::vector like structure.
Definition: map_vector.hpp:61