DASH  0.3.0
Onesided.h
1 #ifndef DASH__ONESIDED_H__
2 #define DASH__ONESIDED_H__
3 
4 #include <dash/Team.h>
5 
6 #include <dash/dart/if/dart.h>
7 
8 
9 namespace dash {
10 
11 namespace internal {
12 
19  template<typename T>
20  inline
21  void
22  put(const dart_gptr_t& gptr, const T *src, size_t nelem) {
23  dash::dart_storage<T> ds(nelem);
24  DASH_ASSERT_RETURNS(
25  dart_put(gptr,
26  src,
27  ds.nelem,
28  ds.dtype,
29  ds.dtype),
30  DART_OK);
31  }
32 
39  template<typename T>
40  inline
41  void
42  get(const dart_gptr_t& gptr, T *dst, size_t nelem) {
43  dash::dart_storage<T> ds(nelem);
44  DASH_ASSERT_RETURNS(
45  dart_get(dst,
46  gptr,
47  ds.nelem,
48  ds.dtype,
49  ds.dtype),
50  DART_OK);
51  }
52 
59  template<typename T>
60  inline
61  void
62  put_blocking(const dart_gptr_t& gptr, const T *src, size_t nelem) {
63  dash::dart_storage<T> ds(nelem);
64  DASH_ASSERT_RETURNS(
65  dart_put_blocking(gptr,
66  src,
67  ds.nelem,
68  ds.dtype,
69  ds.dtype),
70  DART_OK);
71  }
72 
79  template<typename T>
80  inline
81  void
82  get_blocking(const dart_gptr_t& gptr, T *dst, size_t nelem) {
83  dash::dart_storage<T> ds(nelem);
84  DASH_ASSERT_RETURNS(
86  gptr,
87  ds.nelem,
88  ds.dtype,
89  ds.dtype),
90  DART_OK);
91  }
92 
100  template<typename T>
101  inline
102  void
103  put_handle(
104  const dart_gptr_t & gptr,
105  const T * src,
106  size_t nelem,
107  dart_handle_t * handle) {
108  dash::dart_storage<T> ds(nelem);
109  DASH_ASSERT_RETURNS(
110  dart_put_handle(gptr,
111  src,
112  ds.nelem,
113  ds.dtype,
114  ds.dtype,
115  handle),
116  DART_OK);
117  }
118 
126  template<typename T>
127  inline
128  void
129  get_handle(
130  const dart_gptr_t & gptr,
131  T * dst,
132  size_t nelem,
133  dart_handle_t * handle) {
134  dash::dart_storage<T> ds(nelem);
135  DASH_ASSERT_RETURNS(
136  dart_get_handle(dst,
137  gptr,
138  ds.nelem,
139  ds.dtype,
140  ds.dtype,
141  handle),
142  DART_OK);
143  }
144 
145 } // namespace internal
146 
151 template<typename T, typename GlobPtrType>
152 void fence(
153  const GlobPtrType & gptr)
154 {
155  DASH_ASSERT_RETURNS(
156  dart_flush(gptr.dart_gptr()),
157  DART_OK);
158 }
159 
163 template<typename T, typename GlobPtrType>
165  const GlobPtrType & gptr)
166 {
167  DASH_ASSERT_RETURNS(
168  dart_flush_local(gptr.dart_gptr()),
169  DART_OK);
170 }
171 
178 template<typename T, typename GlobPtrType>
179 inline
182  const T & newval,
184  const GlobPtrType & gptr)
185 {
186  dash::internal::put(gptr.dart_gptr(), &newval, 1);
187 }
188 
195 template<typename T, typename GlobPtrType>
196 inline
200  T * ptr,
202  const GlobPtrType & gptr)
203 {
204  dash::internal::get(gptr.dart_gptr(), ptr, 1);
205 }
206 
212 template<typename T, typename GlobPtrType>
213 inline
216  const T & newval,
218  const GlobPtrType & gptr)
219 {
220  dash::internal::put_blocking(gptr.dart_gptr(), &newval, 1);
221 }
222 
228 template<typename T, typename GlobPtrType>
229 inline
233  T * ptr,
235  const GlobPtrType & gptr)
236 {
237  dash::internal::get_blocking(gptr.dart_gptr(), ptr, 1);
238 }
239 
240 } // namespace dash
241 
242 #endif // DASH__ONESIDED_H__
This class is a simple memory pool which holds allocates elements of size ValueType.
Definition: AllOf.h:8
dart_ret_t dart_put(dart_gptr_t gptr, const void *src, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type)
&#39;REGULAR&#39; variant of dart_put.
dart_ret_t dart_put_blocking(dart_gptr_t gptr, const void *src, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type)
&#39;BLOCKING&#39; variant of dart_put.
Signals success.
Definition: dart_types.h:33
void put_value_async(const T &newval, const GlobPtrType &gptr)
Write a value to a global pointer, non-blocking.
Definition: Onesided.h:180
void get_value_async(T *ptr, const GlobPtrType &gptr)
Read a value fom a global pointer, non-blocking.
Definition: Onesided.h:197
void fence(const GlobPtrType &gptr)
Block until local and global completion of operations on a global address.
Definition: Onesided.h:152
dart_ret_t dart_flush_local(dart_gptr_t gptr)
Guarantee local completion of all outstanding operations involving a segment on a certain unit...
dart_ret_t dart_get_blocking(void *dest, dart_gptr_t gptr, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type)
&#39;BLOCKING&#39; variant of dart_get.
dart_ret_t dart_get(void *dest, dart_gptr_t gptr, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type)
&#39;REGULAR&#39; variant of dart_get.
void fence_local(const GlobPtrType &gptr)
Block until local completion of operations on a global address.
Definition: Onesided.h:164
void put_value(const T &newval, const GlobPtrType &gptr)
Write a value to a global pointer.
Definition: Onesided.h:214
DART Global pointer type.
Definition: dart_globmem.h:77
struct dart_handle_struct * dart_handle_t
Handle returned by dart_get_handle and the like used to wait for a specific operation to complete usi...
Convencience wrapper to determine the DART type and number of elements required for the given templat...
Definition: Types.h:295
void get_value(T *ptr, const GlobPtrType &gptr)
Read a value fom a global pointer.
Definition: Onesided.h:230
dart_ret_t dart_put_handle(dart_gptr_t gptr, const void *src, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type, dart_handle_t *handle)
&#39;HANDLE&#39; variant of dart_put.
dart_ret_t dart_get_handle(void *dest, dart_gptr_t gptr, size_t nelem, dart_datatype_t src_type, dart_datatype_t dst_type, dart_handle_t *handle)
&#39;HANDLE&#39; variant of dart_get.
dart_ret_t dart_flush(dart_gptr_t gptr)
Guarantee completion of all outstanding operations involving a segment on a certain unit...