Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
Realm::MultiAffineAccessor< FT, N, T > Class Template Reference

#include <inst_layout.h>

Inheritance diagram for Realm::MultiAffineAccessor< FT, N, T >:
Collaboration diagram for Realm::MultiAffineAccessor< FT, N, T >:

Public Member Functions

REALM_CUDA_HD MultiAffineAccessor (void)
 
 MultiAffineAccessor (RegionInstance inst, FieldID field_id, size_t subfield_offset=0)
 
 MultiAffineAccessor (RegionInstance inst, FieldID field_id, const Rect< N, T > &subrect, size_t subfield_offset=0)
 
REALM_CUDA_HD ~MultiAffineAccessor (void)
 
 MultiAffineAccessor (const MultiAffineAccessor &)=default
 
MultiAffineAccessoroperator= (const MultiAffineAccessor &)=default
 
 MultiAffineAccessor (MultiAffineAccessor &&) noexcept=default
 
MultiAffineAccessoroperator= (MultiAffineAccessor &&) noexcept=default
 
REALM_CUDA_HD void reset ()
 
void reset (RegionInstance inst, FieldID field_id, size_t subfield_offset=0)
 
void reset (RegionInstance inst, FieldID field_id, const Rect< N, T > &subrect, size_t subfield_offset=0)
 
REALM_CUDA_HD FT & operator[] (const Point< N, T > &p) const
 
REALM_CUDA_HD FT * ptr (const Point< N, T > &p)
 
REALM_CUDA_HD FT * ptr (const Rect< N, T > &r, size_t strides[N])
 
REALM_CUDA_HD FT read (const Point< N, T > &p)
 
REALM_CUDA_HD void write (const Point< N, T > &p, FT newval)
 
REALM_CUDA_HD FT & operator[] (const Point< N, T > &p)
 
REALM_CUDA_HD FT * ptr (const Point< N, T > &p) const
 
REALM_CUDA_HD FT * ptr (const Rect< N, T > &r, size_t strides[N]) const
 
REALM_CUDA_HD FT read (const Point< N, T > &p) const
 
REALM_CUDA_HD void write (const Point< N, T > &p, FT newval) const
 

Static Public Member Functions

static bool is_compatible (RegionInstance inst, FieldID field_id)
 
static bool is_compatible (RegionInstance inst, FieldID field_id, const Rect< N, T > &subrect)
 

Protected Attributes

bool piece_valid
 
Rect< N, T > piece_bounds
 
uintptr_t piece_base
 
Point< N, size_t > piece_strides
 
const PieceLookup::Instructionstart_inst
 
size_t field_offset
 

Friends

std::ostream & operator (std::ostream &os, const MultiAffineAccessor< FT, N, T > &a)
 

Detailed Description

template<typename FT, int N, typename T>
class Realm::MultiAffineAccessor< FT, N, T >

A multi-affine accessor handles instances with multiple pieces, but only if all of them are affine. Multi-affine accessors may be accessed and copied in CUDA device code, but must be initially constructed on the host. The random-access look-ups are O(log(N)) in the number of pieces.

Constructor & Destructor Documentation

◆ MultiAffineAccessor() [1/5]

template<typename FT , int N, typename T >
REALM_CUDA_HD Realm::MultiAffineAccessor< FT, N, T >::MultiAffineAccessor ( void  )

◆ MultiAffineAccessor() [2/5]

template<typename FT , int N, typename T >
Realm::MultiAffineAccessor< FT, N, T >::MultiAffineAccessor ( RegionInstance  inst,
FieldID  field_id,
size_t  subfield_offset = 0 
)

Construct a multi-affine accessor for the given instance and field. The accessor will implicitly try to cover the entire instance's domain. NOTE: This constructor will crash if the conversion is not allowed - call is_compatible(...) first if you're not sure.

Parameters
instThe instance to access.
field_idThe field to access.
subfield_offsetThe offset of the subfield to access.

◆ MultiAffineAccessor() [3/5]

template<typename FT , int N, typename T >
Realm::MultiAffineAccessor< FT, N, T >::MultiAffineAccessor ( RegionInstance  inst,
FieldID  field_id,
const Rect< N, T > &  subrect,
size_t  subfield_offset = 0 
)

Construct a multi-affine accessor for the given instance and field. Limits the domain to the given subrectangle. (NOTE: subrect need not be entirely covered by the instance - a legal access must be both within the subrect AND within the coverage of the instance.)

Parameters
instThe instance to access.
field_idThe field to access.
subrectThe subrectangle to limit the domain to.
subfield_offsetThe offset of the subfield to access.

◆ ~MultiAffineAccessor()

template<typename FT , int N, typename T >
REALM_CUDA_HD Realm::MultiAffineAccessor< FT, N, T >::~MultiAffineAccessor ( void  )

◆ MultiAffineAccessor() [4/5]

template<typename FT , int N, typename T >
Realm::MultiAffineAccessor< FT, N, T >::MultiAffineAccessor ( const MultiAffineAccessor< FT, N, T > &  )
default

◆ MultiAffineAccessor() [5/5]

template<typename FT , int N, typename T >
Realm::MultiAffineAccessor< FT, N, T >::MultiAffineAccessor ( MultiAffineAccessor< FT, N, T > &&  )
defaultnoexcept

Member Function Documentation

◆ is_compatible() [1/2]

template<typename FT , int N, typename T >
static bool Realm::MultiAffineAccessor< FT, N, T >::is_compatible ( RegionInstance  inst,
FieldID  field_id 
)
static

◆ is_compatible() [2/2]

template<typename FT , int N, typename T >
static bool Realm::MultiAffineAccessor< FT, N, T >::is_compatible ( RegionInstance  inst,
FieldID  field_id,
const Rect< N, T > &  subrect 
)
static

◆ operator=() [1/2]

template<typename FT , int N, typename T >
MultiAffineAccessor & Realm::MultiAffineAccessor< FT, N, T >::operator= ( const MultiAffineAccessor< FT, N, T > &  )
default

◆ operator=() [2/2]

template<typename FT , int N, typename T >
MultiAffineAccessor & Realm::MultiAffineAccessor< FT, N, T >::operator= ( MultiAffineAccessor< FT, N, T > &&  )
defaultnoexcept

◆ operator[]() [1/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT & Realm::MultiAffineAccessor< FT, N, T >::operator[] ( const Point< N, T > &  p)

◆ operator[]() [2/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT & Realm::MultiAffineAccessor< FT, N, T >::operator[] ( const Point< N, T > &  p) const

◆ ptr() [1/4]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT * Realm::MultiAffineAccessor< FT, N, T >::ptr ( const Point< N, T > &  p)

◆ ptr() [2/4]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT * Realm::MultiAffineAccessor< FT, N, T >::ptr ( const Point< N, T > &  p) const

Return a pointer to the given point in the instance. Nonconst version is allowed to remember the most-recently-accessed piece.

Parameters
pThe point to access.
Returns
A pointer to the given point.

◆ ptr() [3/4]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT * Realm::MultiAffineAccessor< FT, N, T >::ptr ( const Rect< N, T > &  r,
size_t  strides[N] 
)

◆ ptr() [4/4]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT * Realm::MultiAffineAccessor< FT, N, T >::ptr ( const Rect< N, T > &  r,
size_t  strides[N] 
) const

◆ read() [1/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT Realm::MultiAffineAccessor< FT, N, T >::read ( const Point< N, T > &  p)

◆ read() [2/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD FT Realm::MultiAffineAccessor< FT, N, T >::read ( const Point< N, T > &  p) const

◆ reset() [1/3]

template<typename FT , int N, typename T >
REALM_CUDA_HD void Realm::MultiAffineAccessor< FT, N, T >::reset ( )

◆ reset() [2/3]

template<typename FT , int N, typename T >
void Realm::MultiAffineAccessor< FT, N, T >::reset ( RegionInstance  inst,
FieldID  field_id,
const Rect< N, T > &  subrect,
size_t  subfield_offset = 0 
)

◆ reset() [3/3]

template<typename FT , int N, typename T >
void Realm::MultiAffineAccessor< FT, N, T >::reset ( RegionInstance  inst,
FieldID  field_id,
size_t  subfield_offset = 0 
)

◆ write() [1/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD void Realm::MultiAffineAccessor< FT, N, T >::write ( const Point< N, T > &  p,
FT  newval 
)

◆ write() [2/2]

template<typename FT , int N, typename T >
REALM_CUDA_HD void Realm::MultiAffineAccessor< FT, N, T >::write ( const Point< N, T > &  p,
FT  newval 
) const

Friends And Related Symbol Documentation

◆ operator

template<typename FT , int N, typename T >
std::ostream & operator ( std::ostream &  os,
const MultiAffineAccessor< FT, N, T > &  a 
)
friend

Member Data Documentation

◆ field_offset

template<typename FT , int N, typename T >
size_t Realm::MultiAffineAccessor< FT, N, T >::field_offset
protected

◆ piece_base

template<typename FT , int N, typename T >
uintptr_t Realm::MultiAffineAccessor< FT, N, T >::piece_base
protected

◆ piece_bounds

template<typename FT , int N, typename T >
Rect<N, T> Realm::MultiAffineAccessor< FT, N, T >::piece_bounds
protected

◆ piece_strides

template<typename FT , int N, typename T >
Point<N, size_t> Realm::MultiAffineAccessor< FT, N, T >::piece_strides
protected

◆ piece_valid

template<typename FT , int N, typename T >
bool Realm::MultiAffineAccessor< FT, N, T >::piece_valid
protected

◆ start_inst

template<typename FT , int N, typename T >
const PieceLookup::Instruction* Realm::MultiAffineAccessor< FT, N, T >::start_inst
protected

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