Legion Runtime
Loading...
Searching...
No Matches
mapping_utilities.h
Go to the documentation of this file.
1/* Copyright 2026 Stanford University, NVIDIA Corporation
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16
17#ifndef __MAPPING_UTILITIES__
18#define __MAPPING_UTILITIES__
19
25#include "legion.h"
26
27#include <stdlib.h>
28#include <assert.h>
29
30namespace Legion {
31 namespace Mapping {
32 namespace Utilities {
33
43 public:
44 MachineQueryInterface(Machine m);
45 public:
49 Memory find_global_memory(void);
50 static
51 Memory find_global_memory(Machine machine);
56 void find_memory_stack(Processor proc,
57 std::vector<Memory> &stack, bool latency);
58 static void find_memory_stack(Machine machine, Processor proc,
59 std::vector<Memory> &stack, bool latency);
64 void find_memory_stack(Memory mem, std::vector<Memory> &stack,
65 bool latency);
66 static void find_memory_stack(Machine machine, Memory mem,
67 std::vector<Memory> &stack, bool latency);
72 Memory find_memory_kind(Processor proc, Memory::Kind kind);
73 static Memory find_memory_kind(Machine machine, Processor proc,
74 Memory::Kind kind);
79 Memory find_memory_kind(Memory mem, Memory::Kind kind);
80 static Memory find_memory_kind(Machine machine, Memory mem,
81 Memory::Kind kind);
86 Processor find_processor_kind(Memory mem, Processor::Kind kind);
87 static Processor find_processor_kind(Machine machine, Memory mem,
88 Processor::Kind kind);
94 const std::set<Processor>& filter_processors(Processor::Kind kind);
95 static void filter_processors(Machine machine, Processor::Kind kind,
96 std::set<Processor> &procs);
102 const std::set<Memory>& filter_memories(Memory::Kind kind);
103 static void filter_memories(Machine machine, Memory::Kind kind,
104 std::set<Memory> &mems);
105 protected:
106 static void sort_memories(Machine machine, Processor proc,
107 std::vector<Memory> &memories, bool latency);
108 static void sort_memories(Machine machine, Memory mem,
109 std::vector<Memory> &memories, bool latency);
110 protected:
111 const Machine machine;
112 Memory global_memory;
113 std::map<Processor,std::vector<Memory> > proc_mem_stacks;
114 std::map<Memory,std::vector<Memory> > mem_mem_stacks;
115 std::map<std::pair<Processor,Memory::Kind>,Memory> proc_mem_table;
116 std::map<std::pair<Memory,Memory::Kind>,Memory> mem_mem_table;
117 std::map<std::pair<Memory,Processor::Kind>,Processor> mem_proc_table;
118 std::map<Processor::Kind,std::set<Processor> > proc_kinds;
119 std::map<Memory::Kind,std::set<Memory> > mem_kinds;
120 };
121
133 public:
134 MappingMemoizer(void);
135 public:
140 bool has_mapping(Processor target, const Task *task,
141 unsigned index) const;
146 bool recall_mapping(Processor target, const Task *task,
147 unsigned index, std::vector<Memory> &ranking) const;
152 Memory recall_chosen(Processor target, const Task *task,
153 unsigned index) const;
157 void record_mapping(Processor target, const Task *task,
158 unsigned index, const std::vector<Memory> &ranking);
162 void notify_mapping(Processor target, const Task *task,
163 unsigned index, Memory result);
167 void commit_mapping(Processor target, const Task *task);
168 protected:
170 public:
171 MemoizedMapping(void);
172 MemoizedMapping(size_t num_elmts);
173 public:
174 std::vector<Memory> chosen;
175 std::vector<std::vector<Memory> > rankings;
176 };
177 protected:
178 typedef std::pair<Processor,Processor::TaskFuncID> MappingKey;
179 std::map<MappingKey,MemoizedMapping> temporary_mappings;
180 std::map<MappingKey,MemoizedMapping> permanent_mappings;
181 };
182
190 public:
191 MappingProfiler(void);
192 public:
198 void set_needed_profiling_samples(unsigned num_samples);
199 void set_needed_profiling_samples(Processor::TaskFuncID task_id,
200 unsigned num_samples);
205 void set_max_profiling_samples(unsigned max_samples);
206 void set_max_profiling_samples(Processor::TaskFuncID task_id,
207 unsigned max_samples);
212 void set_gather_in_original_processor(Processor::TaskFuncID task_id,
213 bool flag);
214
219 bool profiling_complete(const Task *task) const;
220 bool profiling_complete(const Task *task, Processor::Kind kind) const;
225 Processor::Kind best_processor_kind(const Task *task) const;
226 public:
227 struct Profile {
228 long long execution_time;
229 Processor target_processor;
230 DomainPoint index_point;
231 };
232
234 public:
235 VariantProfile(void);
236 public:
237 long long total_time;
238 std::list<Profile> samples;
239 };
240
241 typedef std::map<Processor::Kind,VariantProfile> VariantMap;
242 typedef std::map<Processor::TaskFuncID,VariantMap> TaskMap;
243
244 void add_profiling_sample(Processor::TaskFuncID task_id,
245 const Profile& sample);
246
247 TaskMap get_task_profiles() const;
248 VariantMap get_variant_profiles(Processor::TaskFuncID tid) const;
249 VariantProfile get_variant_profile(Processor::TaskFuncID tid,
250 Processor::Kind kind) const;
251
252 void clear_samples(Processor::TaskFuncID task_id);
253 void clear_samples(Processor::TaskFuncID task_id, Processor::Kind kind);
254
255 typedef std::list<DomainPoint> PointList;
256 typedef std::map<Processor, PointList> AssignmentMap;
257
264 AssignmentMap get_balanced_assignments(Processor::TaskFuncID task_id,
265 Processor::Kind kind) const;
266
267 AssignmentMap get_balanced_assignments(Processor::TaskFuncID task_id)
268 const;
269
270
272 ProfilingOption(void);
273 ProfilingOption(unsigned, unsigned);
274 unsigned needed_samples;
275 unsigned max_samples;
276 bool gather_in_orig_proc;
277 };
278
279 typedef std::map<Processor::TaskFuncID,ProfilingOption> OptionMap;
280
281 ProfilingOption get_profiling_option(Processor::TaskFuncID tid) const;
282
283 protected:
284 unsigned needed_samples;
285 unsigned max_samples;
286 TaskMap task_profiles;
287 OptionMap profiling_options;
288 };
289
294 const char* to_string(Processor::Kind kind);
295
296 const char* to_string(Memory::Kind kind);
297
298 const char* to_string(PrivilegeMode priv);
299
300 const char* to_string(CoherenceProperty prop);
301
302 std::string to_string(const PoolBounds& bounds);
303
304 std::string to_string(MapperRuntime* runtime,
305 const MapperContext ctx,
306 const Domain& dom);
307
308 std::string to_string(MapperRuntime* runtime,
309 const MapperContext ctx,
310 LogicalRegion lr);
311
312 std::string to_string(MapperRuntime* runtime,
313 const MapperContext ctx,
314 IndexSpace is);
315
316 std::string to_string(MapperRuntime* runtime,
317 const MapperContext ctx,
318 const LayoutConstraintSet& constraints);
319
320 std::string to_string(MapperRuntime* runtime,
321 const MapperContext ctx,
322 FieldSpace fs,
323 const std::set<FieldID>& fields);
324
325 std::string to_string(MapperRuntime* runtime,
326 const MapperContext ctx,
327 PhysicalInstance inst);
328
329 std::string to_string(MapperRuntime* runtime,
330 const MapperContext ctx,
331 const RegionRequirement& req,
332 unsigned req_idx);
333
334 std::string to_string(MapperRuntime* runtime,
335 const MapperContext ctx,
336 const Task& task,
337 bool include_index_point = true);
338
339 std::string to_string(MapperRuntime* runtime,
340 const MapperContext ctx,
341 const InlineMapping& inline_op);
342
343 std::string to_string(MapperRuntime* runtime,
344 const MapperContext ctx,
345 const Copy& copy,
346 bool include_index_point = true);
347
350 }; // namespace Utilities
351 }; // namespace Mapping
352}; // namespace Legion
353
354#endif // __MAPPING_UTILITIES__
Definition mapping.h:185
Definition geometry.h:159
Definition geometry.h:34
Definition data.h:152
Definition data.h:35
Definition mapping.h:216
Definition constraints.h:881
Definition data.h:189
Definition mapping.h:2458
Definition mapping.h:414
Definition mapping_utilities.h:42
Processor find_processor_kind(Memory mem, Processor::Kind kind)
Memory find_memory_kind(Processor proc, Memory::Kind kind)
Memory find_memory_kind(Memory mem, Memory::Kind kind)
void find_memory_stack(Memory mem, std::vector< Memory > &stack, bool latency)
const std::set< Memory > & filter_memories(Memory::Kind kind)
void find_memory_stack(Processor proc, std::vector< Memory > &stack, bool latency)
const std::set< Processor > & filter_processors(Processor::Kind kind)
Definition mapping_utilities.h:132
void notify_mapping(Processor target, const Task *task, unsigned index, Memory result)
bool recall_mapping(Processor target, const Task *task, unsigned index, std::vector< Memory > &ranking) const
void record_mapping(Processor target, const Task *task, unsigned index, const std::vector< Memory > &ranking)
bool has_mapping(Processor target, const Task *task, unsigned index) const
Memory recall_chosen(Processor target, const Task *task, unsigned index) const
void commit_mapping(Processor target, const Task *task)
Definition mapping_utilities.h:189
void set_needed_profiling_samples(unsigned num_samples)
Processor::Kind best_processor_kind(const Task *task) const
AssignmentMap get_balanced_assignments(Processor::TaskFuncID task_id, Processor::Kind kind) const
void set_max_profiling_samples(unsigned max_samples)
void set_gather_in_original_processor(Processor::TaskFuncID task_id, bool flag)
bool profiling_complete(const Task *task) const
Definition mapping.h:112
const char * to_string(Processor::Kind kind)
Definition accessors.h:29
Definition registrars.h:76
Definition requirements.h:42