DASH  0.3.0
dash::GlobHeapPtr< ElementType, MemSpaceT > Class Template Reference

Iterator on global buckets. More...

#include <GlobHeapPtr.h>

Classes

struct  local_index
 

Public Types

typedef GlobHeapMemType::index_type index_type
 
typedef std::make_unsigned< index_type >::type size_type
 
typedef ElementType value_type
 
typedef GlobSharedRef< value_type, self_treference
 
typedef GlobSharedRef< const value_type, self_tconst_reference
 
typedef value_type * raw_pointer
 
typedef GlobHeapMemType globmem_type
 
typedef GlobHeapMemType::local_pointer local_pointer
 
template<typename U >
using rebind = GlobHeapPtr< U, MemSpaceT >
 

Public Member Functions

 GlobHeapPtr ()
 Default constructor. More...
 
 GlobHeapPtr (const MemSpaceT *gmem, index_type position=0)
 Constructor, creates a global pointer on global memory from global offset in logical storage order. More...
 
 GlobHeapPtr (const MemSpaceT *gmem, team_unit_t unit, index_type local_index)
 Constructor, creates a global pointer on global memory from unit and local offset in logical storage order. More...
 
template<typename E_ , typename M_ >
 GlobHeapPtr (const GlobHeapPtr< E_, M_ > &other)
 Copy constructor. More...
 
template<typename E_ , typename M_ >
self_toperator= (const GlobHeapPtr< E_, M_ > &other)
 Assignment operator. More...
 
dart_gptr_t dart_gptr () const
 Explicit conversion to dart_gptr_t. More...
 
reference operator* () const
 Dereference operator. More...
 
reference operator[] (index_type g_index) const
 Subscript operator, returns global reference to element at given global index. More...
 
bool is_local () const
 Checks whether the element referenced by this global pointer is in the calling unit's local memory. More...
 
local_pointer local () const
 Conversion to local bucket pointer. More...
 
local_index lpos () const
 Unit and local offset at the pointer's position. More...
 
self_t global () const
 Map pointer to global index domain. More...
 
index_type pos () const
 Position of the pointer in global index space. More...
 
index_type gpos () const
 Position of the pointer in global index range. More...
 
const globmem_type & globmem () const
 The instance of GlobStaticMem used by this pointer to resolve addresses in global memory. More...
 
globmem_type & globmem ()
 The instance of GlobStaticMem used by this pointer to resolve addresses in global memory. More...
 
self_toperator++ ()
 Prefix increment operator. More...
 
self_toperator-- ()
 Prefix decrement operator. More...
 
self_t operator++ (int)
 Postfix increment operator. More...
 
self_t operator-- (int)
 Postfix decrement operator. More...
 
self_toperator+= (index_type offset)
 
self_toperator-= (index_type offset)
 
self_t operator+ (index_type offset) const
 
self_t operator- (index_type offset) const
 
index_type operator+ (const self_t &other) const
 
index_type operator- (const self_t &other) const
 
template<typename E_ , typename M_ >
bool operator< (const GlobHeapPtr< E_, M_ > &other) const
 
template<typename E_ , typename M_ >
bool operator<= (const GlobHeapPtr< E_, M_ > &other) const
 
template<typename E_ , typename M_ >
bool operator> (const GlobHeapPtr< E_, M_ > &other) const
 
template<typename E_ , typename M_ >
bool operator>= (const GlobHeapPtr< E_, M_ > &other) const
 
template<typename E_ , typename M_ >
bool operator== (const GlobHeapPtr< E_, M_ > &other) const
 
template<typename E_ , typename M_ >
bool operator!= (const GlobHeapPtr< E_, M_ > &other) const
 

Friends

template<typename ElementType_ , class MemSpaceT_ >
std::ostream & operator<< (std::ostream &os, const dash::GlobHeapPtr< ElementType_, MemSpaceT_ > &gptr)
 

Detailed Description

template<typename ElementType, class MemSpaceT>
class dash::GlobHeapPtr< ElementType, MemSpaceT >

Iterator on global buckets.

Represents global pointer type.

Definition at line 32 of file GlobHeapMem.h.

Constructor & Destructor Documentation

◆ GlobHeapPtr() [1/4]

template<typename ElementType, class MemSpaceT>
dash::GlobHeapPtr< ElementType, MemSpaceT >::GlobHeapPtr ( )
inline

Default constructor.

Definition at line 90 of file GlobHeapPtr.h.

91  : _globmem(nullptr),
92  _bucket_cumul_sizes(nullptr),
93  _idx(0),
94  _max_idx(0),
95  _myid(dash::Team::GlobalUnitID()),
96  _idx_unit_id(DART_UNDEFINED_UNIT_ID),
97  _idx_local_idx(-1),
98  _idx_bucket_idx(-1),
99  _idx_bucket_phase(-1)
100  {
101  DASH_LOG_TRACE_VAR("GlobHeapPtr()", _idx);
102  DASH_LOG_TRACE_VAR("GlobHeapPtr()", _max_idx);
103  }
static global_unit_t GlobalUnitID()
The invariant unit ID in dash::Team::All().
Definition: Team.h:221
#define DART_UNDEFINED_UNIT_ID
Undefined unit ID.
Definition: dart_types.h:160

◆ GlobHeapPtr() [2/4]

template<typename ElementType, class MemSpaceT>
dash::GlobHeapPtr< ElementType, MemSpaceT >::GlobHeapPtr ( const MemSpaceT *  gmem,
index_type  position = 0 
)
inline

Constructor, creates a global pointer on global memory from global offset in logical storage order.

Definition at line 109 of file GlobHeapPtr.h.

112  : _globmem(reinterpret_cast<const globmem_type *>(gmem)),
113  _bucket_cumul_sizes(&_globmem->_bucket_cumul_sizes),
114  _lbegin(_globmem->lbegin()),
115  _idx(position),
116  _max_idx(gmem->size() - 1),
117  _myid(gmem->team().myid()),
118  _idx_unit_id(0),
119  _idx_local_idx(0),
120  _idx_bucket_idx(0),
121  _idx_bucket_phase(0)
122  {
123  DASH_LOG_TRACE("GlobHeapPtr(gmem,idx)", "gidx:", position);
124  for (auto unit_bucket_cumul_sizes : *_bucket_cumul_sizes) {
125  DASH_LOG_TRACE_VAR("GlobHeapPtr(gmem,idx)",
126  unit_bucket_cumul_sizes);
127  size_type bucket_cumul_size_prev = 0;
128  for (auto bucket_cumul_size : unit_bucket_cumul_sizes) {
129  DASH_LOG_TRACE_VAR("GlobHeapPtr(gmem,idx)", bucket_cumul_size);
130  if (position < bucket_cumul_size) {
131  DASH_LOG_TRACE_VAR("GlobHeapPtr(gmem,idx)", position);
132  _idx_bucket_phase -= bucket_cumul_size;
133  position = 0;
134  _idx_local_idx = position;
135  _idx_bucket_phase = position - bucket_cumul_size_prev;
136  break;
137  }
138  bucket_cumul_size_prev = bucket_cumul_size;
139  ++_idx_bucket_idx;
140  }
141  if (position == 0) {
142  break;
143  }
144  // Advance to next unit, adjust position relative to next unit's
145  // local index space:
146  position -= unit_bucket_cumul_sizes.back();
147  ++_idx_unit_id;
148  }
149  DASH_LOG_TRACE("GlobHeapPtr(gmem,idx)",
150  "gidx:", _idx,
151  "unit:", _idx_unit_id,
152  "lidx:", _idx_local_idx,
153  "bucket:", _idx_bucket_idx,
154  "phase:", _idx_bucket_phase);
155  }

◆ GlobHeapPtr() [3/4]

template<typename ElementType, class MemSpaceT>
dash::GlobHeapPtr< ElementType, MemSpaceT >::GlobHeapPtr ( const MemSpaceT *  gmem,
team_unit_t  unit,
index_type  local_index 
)
inline

Constructor, creates a global pointer on global memory from unit and local offset in logical storage order.

Definition at line 161 of file GlobHeapPtr.h.

165  : _globmem(reinterpret_cast<const globmem_type *>(gmem)),
166  _bucket_cumul_sizes(&_globmem->_bucket_cumul_sizes),
167  _lbegin(_globmem->lbegin()),
168  _idx(0),
169  _max_idx(gmem->size() - 1),
170  _myid(gmem->team().myid()),
171  _idx_unit_id(unit),
172  _idx_local_idx(0),
173  _idx_bucket_idx(0),
174  _idx_bucket_phase(0)
175  {
176  DASH_LOG_TRACE("GlobHeapPtr(gmem,unit,lidx)",
177  "unit:", unit,
178  "lidx:", local_index);
179  DASH_ASSERT_LT(unit, _bucket_cumul_sizes->size(), "invalid unit id");
180 
181  for (size_type unit = 0; unit < _idx_unit_id; ++unit) {
182  auto prec_unit_local_size = (*_bucket_cumul_sizes)[unit].back();
183  _idx += prec_unit_local_size;
184  }
185  increment(local_index);
186  DASH_LOG_TRACE("GlobHeapPtr(gmem,unit,lidx) >",
187  "gidx:", _idx,
188  "maxidx:", _max_idx,
189  "unit:", _idx_unit_id,
190  "lidx:", _idx_local_idx,
191  "bucket:", _idx_bucket_idx,
192  "phase:", _idx_bucket_phase);
193  }

◆ GlobHeapPtr() [4/4]

template<typename ElementType, class MemSpaceT>
template<typename E_ , typename M_ >
dash::GlobHeapPtr< ElementType, MemSpaceT >::GlobHeapPtr ( const GlobHeapPtr< E_, M_ > &  other)
inline

Copy constructor.

Definition at line 199 of file GlobHeapPtr.h.

201  : _globmem(other._globmem),
202  _bucket_cumul_sizes(other._bucket_cumul_sizes),
203  _lbegin(other._lbegin),
204  _idx(other._idx),
205  _max_idx(other._max_idx),
206  _idx_unit_id(other._idx_unit_id),
207  _idx_local_idx(other._idx_local_idx),
208  _idx_bucket_idx(other._idx_bucket_idx),
209  _idx_bucket_phase(other._idx_bucket_phase)
210  { }

Member Function Documentation

◆ dart_gptr()

template<typename ElementType, class MemSpaceT>
dart_gptr_t dash::GlobHeapPtr< ElementType, MemSpaceT >::dart_gptr ( ) const
inline

Explicit conversion to dart_gptr_t.

Returns
A DART global pointer to the element at the pointer's position

Definition at line 236 of file GlobHeapPtr.h.

Referenced by dash::UnorderedMapLocalIter< Key, Mapped, Hash, Pred, LMemSpace >::dart_gptr(), and dash::GlobHeapPtr< ElementType, MemSpaceT >::operator*().

237  {
238  DASH_LOG_TRACE_VAR("GlobHeapPtr.dart_gptr()", _idx);
239  // Create global pointer from unit, bucket and phase:
240  dart_gptr_t dart_gptr = _globmem->dart_gptr_at(
241  _idx_unit_id,
242  _idx_bucket_idx,
243  _idx_bucket_phase);
244  DASH_LOG_TRACE_VAR("GlobHeapPtr.dart_gptr >", dart_gptr);
245  return dart_gptr;
246  }
dart_gptr_t dart_gptr() const
Explicit conversion to dart_gptr_t.
Definition: GlobHeapPtr.h:236
DART Global pointer type.
Definition: dart_globmem.h:77

◆ global()

template<typename ElementType, class MemSpaceT>
self_t dash::GlobHeapPtr< ElementType, MemSpaceT >::global ( ) const
inline

Map pointer to global index domain.

Definition at line 319 of file GlobHeapPtr.h.

320  {
321  return *this;
322  }

◆ globmem() [1/2]

template<typename ElementType, class MemSpaceT>
const globmem_type& dash::GlobHeapPtr< ElementType, MemSpaceT >::globmem ( ) const
inline

The instance of GlobStaticMem used by this pointer to resolve addresses in global memory.

Definition at line 344 of file GlobHeapPtr.h.

345  {
346  return *_globmem;
347  }

◆ globmem() [2/2]

template<typename ElementType, class MemSpaceT>
globmem_type& dash::GlobHeapPtr< ElementType, MemSpaceT >::globmem ( )
inline

The instance of GlobStaticMem used by this pointer to resolve addresses in global memory.

Definition at line 353 of file GlobHeapPtr.h.

354  {
355  return *_globmem;
356  }

◆ gpos()

template<typename ElementType, class MemSpaceT>
index_type dash::GlobHeapPtr< ElementType, MemSpaceT >::gpos ( ) const
inline

Position of the pointer in global index range.

Definition at line 335 of file GlobHeapPtr.h.

336  {
337  return _idx;
338  }

◆ is_local()

template<typename ElementType, class MemSpaceT>
bool dash::GlobHeapPtr< ElementType, MemSpaceT >::is_local ( ) const
inline

Checks whether the element referenced by this global pointer is in the calling unit's local memory.

Definition at line 288 of file GlobHeapPtr.h.

289  {
290  return (_myid == _idx_unit_id);
291  }

◆ local()

template<typename ElementType, class MemSpaceT>
local_pointer dash::GlobHeapPtr< ElementType, MemSpaceT >::local ( ) const
inline

Conversion to local bucket pointer.

Definition at line 296 of file GlobHeapPtr.h.

Referenced by dash::GlobHeapPtr< ElementType, MemSpaceT >::operator*().

297  {
298  if (_myid != _idx_unit_id) {
299  // Iterator position does not point to local element
300  return nullptr;
301  }
302  return (_lbegin + _idx_local_idx);
303  }

◆ lpos()

template<typename ElementType, class MemSpaceT>
local_index dash::GlobHeapPtr< ElementType, MemSpaceT >::lpos ( ) const
inline

Unit and local offset at the pointer's position.

Definition at line 308 of file GlobHeapPtr.h.

309  {
310  local_index local_pos;
311  local_pos.unit = _idx_unit_id;
312  local_pos.index = _idx_local_idx;
313  return local_pos;
314  }

◆ operator*()

template<typename ElementType, class MemSpaceT>
reference dash::GlobHeapPtr< ElementType, MemSpaceT >::operator* ( ) const
inline

Dereference operator.

Returns
A global reference to the element at the pointer's position.

Definition at line 253 of file GlobHeapPtr.h.

References dash::GlobHeapPtr< ElementType, MemSpaceT >::dart_gptr(), and dash::GlobHeapPtr< ElementType, MemSpaceT >::local().

254  {
255  auto lptr = local();
256  if (lptr != nullptr) {
257  return reference(static_cast<raw_pointer>(lptr));
258  } else {
259  return reference(dart_gptr());
260  }
261  }
dart_gptr_t dart_gptr() const
Explicit conversion to dart_gptr_t.
Definition: GlobHeapPtr.h:236
local_pointer local() const
Conversion to local bucket pointer.
Definition: GlobHeapPtr.h:296

◆ operator++() [1/2]

template<typename ElementType, class MemSpaceT>
self_t& dash::GlobHeapPtr< ElementType, MemSpaceT >::operator++ ( )
inline

Prefix increment operator.

Definition at line 361 of file GlobHeapPtr.h.

362  {
363  increment(1);
364  return *this;
365  }

◆ operator++() [2/2]

template<typename ElementType, class MemSpaceT>
self_t dash::GlobHeapPtr< ElementType, MemSpaceT >::operator++ ( int  )
inline

Postfix increment operator.

Definition at line 379 of file GlobHeapPtr.h.

380  {
381  auto result = *this;
382  increment(1);
383  return result;
384  }

◆ operator--() [1/2]

template<typename ElementType, class MemSpaceT>
self_t& dash::GlobHeapPtr< ElementType, MemSpaceT >::operator-- ( )
inline

Prefix decrement operator.

Definition at line 370 of file GlobHeapPtr.h.

371  {
372  decrement(1);
373  return *this;
374  }

◆ operator--() [2/2]

template<typename ElementType, class MemSpaceT>
self_t dash::GlobHeapPtr< ElementType, MemSpaceT >::operator-- ( int  )
inline

Postfix decrement operator.

Definition at line 389 of file GlobHeapPtr.h.

390  {
391  auto result = *this;
392  decrement(1);
393  return result;
394  }

◆ operator=()

template<typename ElementType, class MemSpaceT>
template<typename E_ , typename M_ >
self_t& dash::GlobHeapPtr< ElementType, MemSpaceT >::operator= ( const GlobHeapPtr< E_, M_ > &  other)
inline

Assignment operator.

Definition at line 216 of file GlobHeapPtr.h.

218  {
219  _globmem = other._globmem;
220  _bucket_cumul_sizes = other._bucket_cumul_sizes;
221  _lbegin = other._lbegin;
222  _idx = other._idx;
223  _max_idx = other._max_idx;
224  _idx_unit_id = other._idx_unit_id;
225  _idx_local_idx = other._idx_local_idx;
226  _idx_bucket_idx = other._idx_bucket_idx;
227  _idx_bucket_phase = other._idx_bucket_phase;
228  }

◆ operator[]()

template<typename ElementType, class MemSpaceT>
reference dash::GlobHeapPtr< ElementType, MemSpaceT >::operator[] ( index_type  g_index) const
inline

Subscript operator, returns global reference to element at given global index.

Parameters
g_indexThe global position of the element

Definition at line 267 of file GlobHeapPtr.h.

270  {
271  DASH_LOG_TRACE_VAR("GlobHeapPtr.[]()", g_index);
272  auto git = *this;
273  git += g_index;
274  auto lptr = git.local();
275  if (lptr != nullptr) {
276  return reference(lptr);
277  } else {
278  auto gref = *git;
279  DASH_LOG_TRACE_VAR("GlobHeapPtr.[] >", gref);
280  return gref;
281  }
282  }

◆ pos()

template<typename ElementType, class MemSpaceT>
index_type dash::GlobHeapPtr< ElementType, MemSpaceT >::pos ( ) const
inline

Position of the pointer in global index space.

Definition at line 327 of file GlobHeapPtr.h.

328  {
329  return _idx;
330  }

The documentation for this class was generated from the following files: