20#ifndef REALM_MACHINE_IMPL_H
21#define REALM_MACHINE_IMPL_H
34 template <
typename KT,
typename AT>
40 std::map<KT, AT *>
all;
87 std::map<Processor, MachineProcInfo *>
procs;
88 std::map<Processor::Kind, std::map<Processor, MachineProcInfo *>>
proc_by_kind;
90 std::map<Memory, MachineMemInfo *>
mems;
91 std::map<Memory::Kind, std::map<Memory, MachineMemInfo *>>
mem_by_kind;
116 bool local_only)
const;
126 bool local_only =
true)
const;
131 bool local_only =
true)
const;
137 bool lock_held =
false);
147 bool lock_held =
false);
164 template <
typename T,
typename T2>
172 const T2 *info = 0)
const = 0;
180 unsigned _max_latency);
211 static std::map<Processor::Kind, std::vector<Processor>>
_proc_cache;
212 static std::map<Processor::Kind, std::map<Memory, std::vector<Processor>>>
297 unsigned _max_latency);
313 unsigned _max_latency);
333 static std::map<Memory::Kind, std::vector<Memory>>
_mem_cache;
Definition machine_impl.h:94
void get_shared_processors(Memory m, std::set< Processor > &pset, bool local_only) const
bool has_affinity(Memory m1, Memory m2, Machine::AffinityDetails *details=0) const
MachineNodeInfo * get_nodeinfo(Memory m) const
MachineImpl(RuntimeImpl *_runtime_impl)
void parse_node_announce_data(int node_id, const void *args, size_t arglen, bool remote)
RuntimeImpl * get_runtime_impl(void) const
void add_process_info(int node_id, const Machine::ProcessInfo &process_info, bool lock_held=false)
bool has_affinity(Processor p, Memory m, Machine::AffinityDetails *details=0) const
RuntimeImpl * runtime_impl
Definition machine_impl.h:161
MachineNodeInfo * get_nodeinfo(int node) const
void get_local_processors(std::set< Processor > &pset) const
void enumerate_mem_mem_affinities(void)
void remove_subscription(Machine::MachineUpdateSubscriber *subscriber)
std::map< int, MachineNodeInfo * > nodeinfos
Definition machine_impl.h:153
int get_proc_mem_affinity(std::vector< Machine::ProcessorMemoryAffinity > &result, Processor restrict_proc=Processor::NO_PROC, Memory restrict_memory=Memory::NO_MEMORY, bool local_only=true) const
void add_proc_mem_affinity(const Machine::ProcessorMemoryAffinity &pma, bool lock_held=false)
int get_mem_mem_affinity(std::vector< Machine::MemoryMemoryAffinity > &result, Memory restrict_mem1=Memory::NO_MEMORY, Memory restrict_mem2=Memory::NO_MEMORY, bool local_only=true) const
std::vector< Machine::ProcessorMemoryAffinity > proc_mem_affinities
Definition machine_impl.h:150
std::set< Machine::MachineUpdateSubscriber * > subscribers
Definition machine_impl.h:151
void get_all_memories(std::set< Memory > &mset) const
MachineNodeInfo * get_nodeinfo(Processor p) const
void invalidate_query_caches()
void get_local_processors_by_kind(std::set< Processor > &pset, Processor::Kind kind) const
void get_all_processors(std::set< Processor > &pset) const
void get_visible_memories(Processor p, std::set< Memory > &mset, bool local_only) const
bool get_process_info(Processor p, Machine::ProcessInfo *info) const
void add_subscription(Machine::MachineUpdateSubscriber *subscriber)
Mutex mutex
Definition machine_impl.h:149
void update_kind_maps(void)
void get_visible_memories(Memory m, std::set< Memory > &mset, bool local_only) const
MemoryQuery(const Machine &m)
ProcessorQuery(const Machine &m)
Definition machine_impl.h:310
Memory memory
Definition machine_impl.h:321
virtual bool matches_predicate(const MachineImpl *machine, Memory thing, const MachineMemInfo *info=0) const
MemoryHasMemAffinityPredicate(Memory _memory, unsigned _min_bandwidth, unsigned _max_latency)
virtual MemoryQueryPredicate * clone(void) const
unsigned max_latency
Definition machine_impl.h:323
unsigned min_bandwidth
Definition machine_impl.h:322
Definition machine_impl.h:294
unsigned min_bandwidth
Definition machine_impl.h:306
MemoryHasProcAffinityPredicate(Processor _proc, unsigned _min_bandwidth, unsigned _max_latency)
Processor proc
Definition machine_impl.h:305
virtual bool matches_predicate(const MachineImpl *machine, Memory thing, const MachineMemInfo *info=0) const
unsigned max_latency
Definition machine_impl.h:307
virtual MemoryQueryPredicate * clone(void) const
Definition machine_impl.h:326
bool is_restricted_node
Definition machine_impl.h:385
Memory next(Memory after)
void restrict_by_capacity(size_t new_min_bytes)
friend Machine::MemoryQuery & Machine::MemoryQuery::best_affinity_to(Memory m, int bandwidth_weight, int latency_weight)
Memory first_match(void) const
std::vector< Memory > * cur_cached_list
Definition machine_impl.h:391
bool valid_cache
Definition machine_impl.h:390
MemoryQueryImpl(const Machine &_machine)
bool cached_query(size_t &count) const
void add_predicate(MemoryQueryPredicate *pred)
int restricted_node_id
Definition machine_impl.h:386
Memory random_match(void) const
bool is_restricted_kind
Definition machine_impl.h:387
atomic< int > references
Definition machine_impl.h:383
void remove_reference(void)
size_t restricted_min_capacity
Definition machine_impl.h:389
std::vector< MemoryQueryPredicate * > predicates
Definition machine_impl.h:394
std::optional< BestMemAffinityCostFn > best_mem_affinity_cost
Definition machine_impl.h:398
bool shared_cached_list
Definition machine_impl.h:390
void restrict_to_kind(Memory::Kind new_kind)
Memory mutated_cached_query(Memory p)
unsigned int invalid_count
Definition machine_impl.h:392
bool cached_query(Memory p, Memory &pval)
Memory build_best_affinity_cache() const
void restrict_to_node(int new_node_id)
static unsigned int init
Definition machine_impl.h:331
static std::map< Memory::Kind, std::vector< Memory > > _mem_cache
Definition machine_impl.h:333
static unsigned int cache_invalid_count
Definition machine_impl.h:331
Memory cache_next(Memory after)
unsigned int cur_index
Definition machine_impl.h:393
const MachineImpl * machine
Definition machine_impl.h:384
MemoryQueryImpl(const MemoryQueryImpl ©_from)
std::vector< Memory > * cached_list() const
std::optional< BestProcAffinityCostFn > best_proc_affinity_cost
Definition machine_impl.h:397
Memory next_match(Memory after) const
Memory::Kind restricted_kind
Definition machine_impl.h:388
MemoryQueryImpl(const MachineImpl *_machine_impl)
bool cached_query(Memory &pval, QueryType q) const
size_t count_matches(void) const
static bool global_valid_cache
Definition machine_impl.h:332
MemoryQueryImpl * writeable_reference(void)
Kind
Definition memory.h:59
static const Memory NO_MEMORY
Definition memory.h:49
Definition machine_impl.h:177
virtual bool matches_predicate(const MachineImpl *machine, Processor thing, const MachineProcInfo *info=0) const
ProcessorHasAffinityPredicate(Memory _memory, unsigned _min_bandwidth, unsigned _max_latency)
virtual ProcQueryPredicate * clone(void) const
unsigned min_bandwidth
Definition machine_impl.h:189
Memory memory
Definition machine_impl.h:188
unsigned max_latency
Definition machine_impl.h:190
Definition machine_impl.h:204
static unsigned int init
Definition machine_impl.h:209
int restricted_node_id
Definition machine_impl.h:267
bool is_restricted_kind
Definition machine_impl.h:268
bool shared_cached_list
Definition machine_impl.h:277
void set_cached_mem(Memory m)
Definition machine_impl.h:235
std::vector< Processor > * cached_list() const
ProcessorQueryImpl(const MachineImpl *_machine_impl)
friend Machine::ProcessorQuery & Machine::ProcessorQuery::best_affinity_to(Memory m, int bandwidth_weight, int latency_weight)
ProcessorQueryImpl(const ProcessorQueryImpl ©_from)
Processor next_match(Processor after)
static std::map< Processor::Kind, std::map< Memory, std::vector< Processor > > > _proc_cache_affinity
Definition machine_impl.h:213
~ProcessorQueryImpl(void)
std::optional< BestAffinityCostFn > best_affinity_cost
Definition machine_impl.h:273
Processor first_match(void) const
void restrict_to_node(int new_node_id)
std::vector< ProcQueryPredicate * > predicates
Definition machine_impl.h:270
std::vector< Processor > * cur_cached_list
Definition machine_impl.h:278
static std::map< Processor::Kind, std::vector< Processor > > _proc_cache
Definition machine_impl.h:211
ProcessorQueryImpl * writeable_reference(void)
Processor cache_next(Processor after)
size_t count_matches(void) const
void reset_cached_mem()
Definition machine_impl.h:243
static bool global_valid_cache
Definition machine_impl.h:210
void restrict_to_kind(Processor::Kind new_kind)
Processor::Kind restricted_kind
Definition machine_impl.h:269
unsigned int cur_index
Definition machine_impl.h:280
Memory cached_mem
Definition machine_impl.h:275
atomic< int > references
Definition machine_impl.h:264
bool cached_query(size_t &count) const
Processor random_match(void) const
unsigned int invalid_count
Definition machine_impl.h:279
const MachineImpl * machine
Definition machine_impl.h:265
bool is_restricted_node
Definition machine_impl.h:266
Processor build_best_affinity_cache() const
static unsigned int cache_invalid_count
Definition machine_impl.h:209
ProcessorQueryImpl(const Machine &_machine)
void add_predicate(ProcQueryPredicate *pred)
bool valid_cache
Definition machine_impl.h:277
bool is_cached_mem
Definition machine_impl.h:276
bool cached_query(Processor &pval, QueryType q) const
void remove_reference(void)
Processor mutated_cached_query(Processor p)
Processor next(Processor after)
bool cached_query(Processor p, Processor &pval)
Definition processor.h:37
Kind
Definition processor.h:65
static const Processor NO_PROC
Definition processor.h:54
Definition machine_impl.h:165
virtual ~QueryPredicate(void)
Definition machine_impl.h:167
virtual QueryPredicate< T, T2 > * clone(void) const =0
virtual bool matches_predicate(const MachineImpl *machine, T thing, const T2 *info=0) const =0
Definition runtime_impl.h:264
bool use_machine_query_cache
Definition activemsg.h:38
QueryType
Definition machine_impl.h:198
@ QUERY_FIRST
Definition machine_impl.h:200
@ QUERY_RANDOM
Definition machine_impl.h:201
@ QUERY_NEXT
Definition machine_impl.h:199
QueryPredicate< Processor, MachineProcInfo > ProcQueryPredicate
Definition machine_impl.h:175
MachineImpl * get_machine(void)
Definition machine_impl.h:407
NodeAnnounceTag
Definition machine_impl.h:412
@ NODE_ANNOUNCE_IB_MEM
Definition machine_impl.h:416
@ NODE_ANNOUNCE_PROCESS_INFO
Definition machine_impl.h:419
@ NODE_ANNOUNCE_MEM
Definition machine_impl.h:415
@ NODE_ANNOUNCE_DMA_CHANNEL
Definition machine_impl.h:418
@ NODE_ANNOUNCE_PROC
Definition machine_impl.h:414
@ NODE_ANNOUNCE_PMA
Definition machine_impl.h:417
@ NODE_ANNOUNCE_INVALID
Definition machine_impl.h:413
MachineImpl * machine_singleton
void cleanup_query_caches()
QueryPredicate< Memory, MachineMemInfo > MemoryQueryPredicate
Definition machine_impl.h:292
Definition machine_impl.h:35
std::map< KT, AT * > all
Definition machine_impl.h:40
std::map< KT, AT * > local
Definition machine_impl.h:41
std::map< KT, AT * > best
Definition machine_impl.h:42
~MachineAffinityInfo(void)
bool add_affinity(KT key, const AT &aff, bool is_local)
MachineAffinityInfo(void)
Definition machine_impl.h:55
Memory m
Definition machine_impl.h:62
bool add_proc_mem_affinity(const Machine::ProcessorMemoryAffinity &pma)
MachineAffinityInfo< Memory, Machine::MemoryMemoryAffinity > mmas_out
Definition machine_impl.h:64
MachineAffinityInfo< Processor, Machine::ProcessorMemoryAffinity > pmas
Definition machine_impl.h:63
bool add_mem_mem_affinity(const Machine::MemoryMemoryAffinity &mma)
MachineMemInfo(Memory _m)
MachineAffinityInfo< Memory, Machine::MemoryMemoryAffinity > mmas_in
Definition machine_impl.h:65
Definition machine_impl.h:68
std::map< Processor, MachineProcInfo * > procs
Definition machine_impl.h:87
MachineNodeInfo(int _node, RuntimeImpl *_runtime_impl)
std::map< Memory, MachineMemInfo * > mems
Definition machine_impl.h:90
std::map< Processor::Kind, std::map< Processor, MachineProcInfo * > > proc_by_kind
Definition machine_impl.h:88
bool add_proc_mem_affinity(const Machine::ProcessorMemoryAffinity &pma)
bool add_process_info(const Machine::ProcessInfo &proc_info)
void update_kind_maps(void)
Machine::ProcessInfo * process_info
Definition machine_impl.h:85
RuntimeImpl * runtime_impl
Definition machine_impl.h:83
int node
Definition machine_impl.h:79
std::map< Memory::Kind, std::map< Memory, MachineMemInfo * > > mem_by_kind
Definition machine_impl.h:91
bool add_processor(Processor p)
bool add_mem_mem_affinity(const Machine::MemoryMemoryAffinity &mma)
bool add_memory(Memory m)
Definition machine_impl.h:45
MachineAffinityInfo< Memory, Machine::ProcessorMemoryAffinity > pmas
Definition machine_impl.h:52
Processor p
Definition machine_impl.h:51
bool add_proc_mem_affinity(const Machine::ProcessorMemoryAffinity &pma)
MachineProcInfo(Processor _p)
Definition machine_impl.h:368
int bandwidth_weight
Definition machine_impl.h:370
Memory memory
Definition machine_impl.h:369
int latency_weight
Definition machine_impl.h:371
Definition machine_impl.h:363
int latency_weight
Definition machine_impl.h:366
int bandwidth_weight
Definition machine_impl.h:365
Processor proc
Definition machine_impl.h:364
Definition machine_impl.h:252
int bandwidth_weight
Definition machine_impl.h:254
Memory memory
Definition machine_impl.h:253
int latency_weight
Definition machine_impl.h:255