Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
Realm::XferDes Class Referenceabstract

#include <channel.h>

Inheritance diagram for Realm::XferDes:
Collaboration diagram for Realm::XferDes:

Classes

struct  ControlPortState
 
class  DeferredXDEnqueue
 
class  SequenceCache
 
struct  UnalignedStorage
 
struct  XferPort
 

Public Types

enum  { XFERDES_NO_GUID = 0 }
 
typedef IntrusivePriorityList< XferDes, int, REALM_PMTA_USE(XferDes, xd_link), REALM_PMTA_USE(XferDes, priority), DummyLockXferDesList
 
typedef SequenceCache<&XferDes::update_bytes_readReadSequenceCache
 
typedef SequenceCache<&XferDes::update_bytes_writeWriteSequenceCache
 

Public Member Functions

 REALM_ALIGNED_TYPE_CONST (AlignedStorage, UnalignedStorage, 16)
 
 REALM_PMTA_DEFN (XferDes, IntrusivePriorityListLink< XferDes >, xd_link)
 
 REALM_PMTA_DEFN (XferDes, int, priority)
 
 XferDes (uintptr_t _dma_op, Channel *_channel, NodeID _launch_node, XferDesID _guid, const std::vector< XferDesPortInfo > &inputs_info, const std::vector< XferDesPortInfo > &outputs_info, int _priority, const void *_fill_data, size_t fill_size)
 
void add_reference (void)
 
void remove_reference (void)
 
void add_update_pre_bytes_total_received (void)
 
virtual Event request_metadata ()
 
virtual long get_requests (Request **requests, long nr)=0
 
virtual void notify_request_read_done (Request *req)
 
virtual void notify_request_write_done (Request *req)
 
virtual void flush ()
 
long default_get_requests (Request **requests, long nr, unsigned flags=0)
 
void default_notify_request_read_done (Request *req)
 
void default_notify_request_write_done (Request *req)
 
virtual void update_bytes_read (int port_idx, size_t offset, size_t size)
 
virtual void update_bytes_write (int port_idx, size_t offset, size_t size)
 
void update_pre_bytes_write (int port_idx, size_t offset, size_t size)
 
void update_pre_bytes_total (int port_idx, size_t pre_bytes_total)
 
void update_next_bytes_read (int port_idx, size_t offset, size_t size)
 
void begin_completion ()
 
void mark_completed ()
 
unsigned current_progress (void)
 
bool check_for_progress (unsigned last_counter)
 
void update_progress (void)
 
virtual bool request_available ()
 
virtual Requestdequeue_request ()
 
virtual void enqueue_request (Request *req)
 
size_t update_control_info (ReadSequenceCache *rseqcache)
 
size_t get_addresses (size_t min_xfer_size, ReadSequenceCache *rseqcache)
 
size_t get_addresses (size_t min_xfer_size, ReadSequenceCache *rseqcache, const InstanceLayoutPieceBase *&in_nonaffine, const InstanceLayoutPieceBase *&out_nonaffine)
 
bool record_address_consumption (size_t total_read_bytes, size_t total_write_bytes)
 
void replicate_fill_data (size_t new_size)
 

Public Attributes

uintptr_t dma_op
 
XferDesQueuexferDes_queue
 
NodeID launch_node
 
atomic< bool > iteration_completed
 
atomic< int64_t > bytes_write_pending
 
atomic< bool > transfer_completed
 
uint64_t current_in_port_mask
 
uint64_t current_out_port_mask
 
uint64_t current_in_port_remain
 
uint64_t current_out_port_remain
 
std::vector< XferPortinput_ports
 
std::vector< XferPortoutput_ports
 
ControlPortState input_control
 
ControlPortState output_control
 
uint64_t max_req_size
 
int priority
 
XferDesID guid
 
XferDesKind kind
 
Channelchannel
 
void * fill_data
 
size_t fill_size
 
size_t orig_fill_size
 
AlignedStorage inline_fill_storage
 
Mutex xd_lock
 
Mutex update_read_lock
 
Mutex update_write_lock
 
atomic< unsigned > progress_counter
 
atomic< unsigned > reference_count
 
unsigned nb_update_pre_bytes_total_calls_expected
 
atomic< unsigned > nb_update_pre_bytes_total_calls_received
 
IntrusivePriorityListLink< XferDesxd_link
 
DeferredXDEnqueue deferred_enqueue
 

Static Public Attributes

static const size_t ALIGNED_FILL_STORAGE_SIZE = 32
 

Protected Member Functions

virtual ~XferDes ()
 

Protected Attributes

Mutex available_req_mutex
 
std::queue< Request * > available_reqs
 

Member Typedef Documentation

◆ ReadSequenceCache

◆ WriteSequenceCache

◆ XferDesList

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
XFERDES_NO_GUID 

Constructor & Destructor Documentation

◆ XferDes()

Realm::XferDes::XferDes ( uintptr_t  _dma_op,
Channel _channel,
NodeID  _launch_node,
XferDesID  _guid,
const std::vector< XferDesPortInfo > &  inputs_info,
const std::vector< XferDesPortInfo > &  outputs_info,
int  _priority,
const void *  _fill_data,
size_t  fill_size 
)

◆ ~XferDes()

virtual Realm::XferDes::~XferDes ( )
protectedvirtual

Member Function Documentation

◆ add_reference()

void Realm::XferDes::add_reference ( void  )

◆ add_update_pre_bytes_total_received()

void Realm::XferDes::add_update_pre_bytes_total_received ( void  )

◆ begin_completion()

void Realm::XferDes::begin_completion ( )

◆ check_for_progress()

bool Realm::XferDes::check_for_progress ( unsigned  last_counter)

◆ current_progress()

unsigned Realm::XferDes::current_progress ( void  )

◆ default_get_requests()

long Realm::XferDes::default_get_requests ( Request **  requests,
long  nr,
unsigned  flags = 0 
)

◆ default_notify_request_read_done()

void Realm::XferDes::default_notify_request_read_done ( Request req)

◆ default_notify_request_write_done()

void Realm::XferDes::default_notify_request_write_done ( Request req)

◆ dequeue_request()

virtual Request * Realm::XferDes::dequeue_request ( )
inlinevirtual

◆ enqueue_request()

virtual void Realm::XferDes::enqueue_request ( Request req)
inlinevirtual

◆ flush()

◆ get_addresses() [1/2]

size_t Realm::XferDes::get_addresses ( size_t  min_xfer_size,
ReadSequenceCache rseqcache 
)

◆ get_addresses() [2/2]

size_t Realm::XferDes::get_addresses ( size_t  min_xfer_size,
ReadSequenceCache rseqcache,
const InstanceLayoutPieceBase *&  in_nonaffine,
const InstanceLayoutPieceBase *&  out_nonaffine 
)

◆ get_requests()

◆ mark_completed()

void Realm::XferDes::mark_completed ( )

◆ notify_request_read_done()

virtual void Realm::XferDes::notify_request_read_done ( Request req)
virtual

◆ notify_request_write_done()

virtual void Realm::XferDes::notify_request_write_done ( Request req)
virtual

◆ REALM_ALIGNED_TYPE_CONST()

Realm::XferDes::REALM_ALIGNED_TYPE_CONST ( AlignedStorage  ,
UnalignedStorage  ,
16   
)

◆ REALM_PMTA_DEFN() [1/2]

Realm::XferDes::REALM_PMTA_DEFN ( XferDes  ,
int  ,
priority   
)

◆ REALM_PMTA_DEFN() [2/2]

Realm::XferDes::REALM_PMTA_DEFN ( XferDes  ,
IntrusivePriorityListLink< XferDes ,
xd_link   
)

◆ record_address_consumption()

bool Realm::XferDes::record_address_consumption ( size_t  total_read_bytes,
size_t  total_write_bytes 
)

◆ remove_reference()

void Realm::XferDes::remove_reference ( void  )

◆ replicate_fill_data()

void Realm::XferDes::replicate_fill_data ( size_t  new_size)

◆ request_available()

virtual bool Realm::XferDes::request_available ( )
inlinevirtual

◆ request_metadata()

virtual Event Realm::XferDes::request_metadata ( )
virtual

◆ update_bytes_read()

virtual void Realm::XferDes::update_bytes_read ( int  port_idx,
size_t  offset,
size_t  size 
)
virtual

◆ update_bytes_write()

virtual void Realm::XferDes::update_bytes_write ( int  port_idx,
size_t  offset,
size_t  size 
)
virtual

Reimplemented in Realm::RemoteWriteXferDes.

◆ update_control_info()

size_t Realm::XferDes::update_control_info ( ReadSequenceCache rseqcache)

◆ update_next_bytes_read()

void Realm::XferDes::update_next_bytes_read ( int  port_idx,
size_t  offset,
size_t  size 
)

◆ update_pre_bytes_total()

void Realm::XferDes::update_pre_bytes_total ( int  port_idx,
size_t  pre_bytes_total 
)

◆ update_pre_bytes_write()

void Realm::XferDes::update_pre_bytes_write ( int  port_idx,
size_t  offset,
size_t  size 
)

◆ update_progress()

void Realm::XferDes::update_progress ( void  )

Member Data Documentation

◆ ALIGNED_FILL_STORAGE_SIZE

const size_t Realm::XferDes::ALIGNED_FILL_STORAGE_SIZE = 32
static

◆ available_req_mutex

Mutex Realm::XferDes::available_req_mutex
protected

◆ available_reqs

std::queue<Request *> Realm::XferDes::available_reqs
protected

◆ bytes_write_pending

atomic<int64_t> Realm::XferDes::bytes_write_pending

◆ channel

Channel* Realm::XferDes::channel

◆ current_in_port_mask

uint64_t Realm::XferDes::current_in_port_mask

◆ current_in_port_remain

uint64_t Realm::XferDes::current_in_port_remain

◆ current_out_port_mask

uint64_t Realm::XferDes::current_out_port_mask

◆ current_out_port_remain

uint64_t Realm::XferDes::current_out_port_remain

◆ deferred_enqueue

DeferredXDEnqueue Realm::XferDes::deferred_enqueue

◆ dma_op

uintptr_t Realm::XferDes::dma_op

◆ fill_data

void* Realm::XferDes::fill_data

◆ fill_size

size_t Realm::XferDes::fill_size

◆ guid

XferDesID Realm::XferDes::guid

◆ inline_fill_storage

AlignedStorage Realm::XferDes::inline_fill_storage

◆ input_control

ControlPortState Realm::XferDes::input_control

◆ input_ports

std::vector<XferPort> Realm::XferDes::input_ports

◆ iteration_completed

atomic<bool> Realm::XferDes::iteration_completed

◆ kind

XferDesKind Realm::XferDes::kind

◆ launch_node

NodeID Realm::XferDes::launch_node

◆ max_req_size

uint64_t Realm::XferDes::max_req_size

◆ nb_update_pre_bytes_total_calls_expected

unsigned Realm::XferDes::nb_update_pre_bytes_total_calls_expected

◆ nb_update_pre_bytes_total_calls_received

atomic<unsigned> Realm::XferDes::nb_update_pre_bytes_total_calls_received

◆ orig_fill_size

size_t Realm::XferDes::orig_fill_size

◆ output_control

ControlPortState Realm::XferDes::output_control

◆ output_ports

std::vector<XferPort> Realm::XferDes::output_ports

◆ priority

int Realm::XferDes::priority

◆ progress_counter

atomic<unsigned> Realm::XferDes::progress_counter

◆ reference_count

atomic<unsigned> Realm::XferDes::reference_count

◆ transfer_completed

atomic<bool> Realm::XferDes::transfer_completed

◆ update_read_lock

Mutex Realm::XferDes::update_read_lock

◆ update_write_lock

Mutex Realm::XferDes::update_write_lock

◆ xd_link

IntrusivePriorityListLink<XferDes> Realm::XferDes::xd_link

◆ xd_lock

Mutex Realm::XferDes::xd_lock

◆ xferDes_queue

XferDesQueue* Realm::XferDes::xferDes_queue

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