20#ifndef REALM_DEPPART_SPARSITY_IMPL_H
21#define REALM_DEPPART_SPARSITY_IMPL_H
36 class PartitioningMicroOp;
58 const void *data,
size_t datalen);
68 const void *data,
size_t datalen);
77 template <
int N,
typename T>
86 size_t total_count,
bool disjoint,
87 const void *data =
nullptr,
size_t datalen = 0);
90 size_t total_count,
bool disjoint,
91 const void *data =
nullptr,
size_t datalen = 0);
104 template <
int N,
typename T>
129 bool disjoint,
size_t total_count);
147 const void *data,
size_t datalen);
159 const void *data,
size_t datalen);
167 const void *data,
size_t datalen);
221 unsigned owner{std::numeric_limits<unsigned>::max()};
232 template <
int N,
typename T>
238 const void *data,
size_t datalen);
247#include "realm/deppart/sparsity_impl.inl"
Definition activemsg.h:303
static const Event NO_EVENT
The value should be usued to initialize an event handle. NO_EVENT is always in has triggered state .
Definition event.h:71
ID_Types
Definition id.h:250
@ ID_SPARSITY
Definition id.h:262
::realm_id_t IDType
Definition id.h:32
static ID make_sparsity(unsigned owner_node, unsigned creator_node, unsigned sparsity_idx)
Definition partitions.h:98
Definition sparsity_impl.h:78
virtual ~SparsityMapCommunicator()=default
virtual void send_contribute(NodeID target, SparsityMap< N, T > me, size_t piece_count, size_t total_count, bool disjoint, const void *data=nullptr, size_t datalen=0)
virtual void send_request(SparsityMap< N, T > me, bool request_precise, bool request_approx)
virtual void send_contribute(SparsityMap< N, T > me, size_t piece_count, size_t total_count, bool disjoint, const void *data=nullptr, size_t datalen=0)
virtual size_t recommend_max_payload(NodeID owner, bool with_congestion)
Definition sparsity_impl.h:199
atomic< unsigned > references
Definition sparsity_impl.h:225
atomic< void * > map_impl
Definition sparsity_impl.h:224
static ID make_id(const SparsityMapImplWrapper &dummy, int owner, ID::IDType index)
Definition sparsity_impl.h:215
bool report_leaks
Definition sparsity_impl.h:228
static constexpr ID::ID_Types ID_TYPE
Definition sparsity_impl.h:201
SparsityMapImplWrapper(void)
unsigned owner
Definition sparsity_impl.h:221
void remove_references(unsigned count, Event wait_on)
SparsityMapImplWrapper(SparsityWrapperCommunicator *_communicator, bool _report_leaks)
std::unique_ptr< SparsityWrapperCommunicator > communicator
Definition sparsity_impl.h:227
void init(ID _me, unsigned _init_owner)
void unsubscribe(NodeID node)
std::function< void(void *)> map_deleter
Definition sparsity_impl.h:230
atomic< DynamicTemplates::TagType > type_tag
Definition sparsity_impl.h:223
SparsityMapImpl< N, T > * get_or_create(SparsityMap< N, T > me)
~SparsityMapImplWrapper(void)
void add_references(unsigned count, Event wait_on=Event::NO_EVENT)
ID me
Definition sparsity_impl.h:220
SparsityMapImplWrapper * next_free
Definition sparsity_impl.h:222
NodeSet subscribers
Definition sparsity_impl.h:226
static ActiveMessageHandlerReg< UnsubscribeMessage > unsubscribe_message_handler_reg
Definition sparsity_impl.h:240
Definition sparsity_impl.h:105
static ActiveMessageHandlerReg< RemoteSparsityContrib > remote_sparsity_contrib_reg
Definition sparsity_impl.h:174
Event make_valid(bool precise=true)
void set_contributor_count(int count)
void record_remote_contributor(NodeID contributor)
static ActiveMessageHandlerReg< SetContribCountMessage > set_contrib_count_msg_reg
Definition sparsity_impl.h:175
bool approx_requested
Definition sparsity_impl.h:181
void contribute_raw_rects(const Rect< N, T > *rects, size_t count, size_t piece_count, bool disjoint, size_t total_count)
static SparsityMapImpl< N, T > * lookup(SparsityMap< N, T > sparsity)
atomic< int > remaining_contributor_count
Definition sparsity_impl.h:177
std::vector< PartitioningMicroOp * > approx_waiters
Definition sparsity_impl.h:180
Event precise_ready_event
Definition sparsity_impl.h:182
Mutex mutex
Definition sparsity_impl.h:179
bool add_waiter(PartitioningMicroOp *uop, bool precise)
size_t sizeof_precise
Definition sparsity_impl.h:186
void remote_data_request(NodeID requestor, bool send_precise, bool send_approx)
atomic< int > remaining_piece_count
Definition sparsity_impl.h:178
SparsityMap< N, T > me
Definition sparsity_impl.h:139
SparsityMapImpl(SparsityMap< N, T > _me, NodeSet &subscribers, SparsityMapCommunicator< N, T > *_sparsity_comm)
NodeSet remote_approx_waiters
Definition sparsity_impl.h:184
NodeSet remote_precise_waiters
Definition sparsity_impl.h:184
static ActiveMessageHandlerReg< RemoteSparsityRequest > remote_sparsity_request_reg
Definition sparsity_impl.h:173
bool precise_requested
Definition sparsity_impl.h:181
atomic< int > total_piece_count
Definition sparsity_impl.h:178
void remote_data_reply(NodeID requestor, bool send_precise, bool send_approx)
NodeSet & remote_subscribers
Definition sparsity_impl.h:185
Event approx_ready_event
Definition sparsity_impl.h:183
SparsityMapImpl(SparsityMap< N, T > _me, NodeSet &subscribers)
void contribute_dense_rect_list(const std::vector< Rect< N, T > > &rects, bool disjoint)
std::unique_ptr< SparsityMapCommunicator< N, T > > sparsity_comm
Definition sparsity_impl.h:188
std::vector< PartitioningMicroOp * > precise_waiters
Definition sparsity_impl.h:180
void contribute_nothing(void)
Definition sparsity.h:171
Definition sparsity_impl.h:43
Event add_references(unsigned count)
static ActiveMessageHandlerReg< SparsityMapAddReferenceMessage > sparse_untyped_add_references_message_handler_reg
Definition sparsity_impl.h:72
id_t id
Definition sparsity_impl.h:46
void remove_references(unsigned count, Event wait_on)
static ActiveMessageHandlerReg< SparsityMapRemoveReferencesMessage > sparse_untyped_remove_references_message_handler_reg
Definition sparsity_impl.h:74
SparsityMapRefCounter(::realm_id_t id)
::realm_id_t id_t
Definition sparsity_impl.h:45
Definition sparsity_impl.h:192
virtual ~SparsityWrapperCommunicator()=default
virtual void unsubscribe(SparsityMapImplWrapper *impl, NodeID sender, ID id)
Definition activemsg.h:38
int NodeID
Definition nodeset.h:40
unsigned long long realm_id_t
Definition realm_c.h:64
Definition sparsity_impl.h:235
static void handle_message(NodeID sender, const UnsubscribeMessage &msg, const void *data, size_t datalen)
::realm_id_t id
Definition sparsity_impl.h:236
Definition sparsity_impl.h:150
size_t total_count
Definition sparsity_impl.h:155
bool disjoint
Definition sparsity_impl.h:153
size_t piece_count
Definition sparsity_impl.h:152
SparsityMap< N, T > sparsity
Definition sparsity_impl.h:151
static void handle_message(NodeID sender, const RemoteSparsityContrib &msg, const void *data, size_t datalen)
Definition sparsity_impl.h:141
bool send_precise
Definition sparsity_impl.h:143
static void handle_message(NodeID sender, const RemoteSparsityRequest &msg, const void *data, size_t datalen)
bool send_approx
Definition sparsity_impl.h:144
SparsityMap< N, T > sparsity
Definition sparsity_impl.h:142
Definition sparsity_impl.h:162
static void handle_message(NodeID sender, const SetContribCountMessage &msg, const void *data, size_t datalen)
SparsityMap< N, T > sparsity
Definition sparsity_impl.h:163
size_t count
Definition sparsity_impl.h:164
Definition sparsity_impl.h:52
static void handle_message(NodeID sender, const SparsityMapAddReferenceMessage &msg, const void *data, size_t datalen)
id_t id
Definition sparsity_impl.h:53
Event wait_on
Definition sparsity_impl.h:54
unsigned count
Definition sparsity_impl.h:55
Definition sparsity_impl.h:61
id_t id
Definition sparsity_impl.h:62
unsigned count
Definition sparsity_impl.h:64
static void handle_message(NodeID sender, const SparsityMapRemoveReferencesMessage &msg, const void *data, size_t datalen)
Event wait_on
Definition sparsity_impl.h:63