63 size_t max_blocking_factor;
64 std::map<Memory,bool> current_instances;
68 bool enable_WAR_optimization;
71 size_t blocking_factor;
72 std::vector<Memory> target_ranking;
73 std::set<FieldID> additional_fields;
76 Memory selected_memory;
90 virtual MappableKind get_mappable_kind(
void)
const = 0;
91 virtual Task* as_mappable_task(
void)
const = 0;
92 virtual Copy* as_mappable_copy(
void)
const = 0;
93 virtual Inline* as_mappable_inline(
void)
const = 0;
94 virtual UniqueID get_unique_mappable_id(
void)
const = 0;
101 virtual MappableKind get_mappable_kind(
void)
const;
102 virtual Task* as_mappable_task(
void)
const;
103 virtual Copy* as_mappable_copy(
void)
const;
104 virtual Inline* as_mappable_inline(
void)
const;
105 virtual UniqueID get_unique_mappable_id(
void)
const;
106 virtual UniqueID get_unique_id(
void)
const;
107 virtual uint64_t get_context_index(
void)
const;
108 virtual int get_depth(
void)
const;
109 virtual bool has_parent_task(
void)
const;
110 virtual const Legion::Task* get_parent_task(
void)
const;
111 virtual const std::string_view& get_provenance_string(
112 bool human=
true)
const;
113 virtual const char* get_task_name(
void)
const;
114 virtual Domain get_slice_domain(
void)
const;
115 virtual ShardID get_shard_id(
void)
const;
116 virtual size_t get_total_shards(
void)
const;
118 virtual Domain get_shard_domain(
void)
const;
119 virtual bool has_trace(
void)
const;
121 inline UniqueID get_unique_task_id(
void)
const {
return unique_id; }
130 VariantID selected_variant;
134 std::set<Processor> additional_procs;
135 TaskPriority task_priority;
137 std::vector<RegionRequirement> regions;
140 uint64_t context_index;
142 const char *
const task_name;
149 virtual MappableKind get_mappable_kind(
void)
const;
150 virtual Task* as_mappable_task(
void)
const;
151 virtual Copy* as_mappable_copy(
void)
const;
152 virtual Inline* as_mappable_inline(
void)
const;
153 virtual UniqueID get_unique_mappable_id(
void)
const;
154 virtual UniqueID get_unique_id(
void)
const;
155 virtual uint64_t get_context_index(
void)
const;
156 virtual int get_depth(
void)
const;
157 virtual const Legion::Task* get_parent_task(
void)
const;
158 virtual const std::string_view& get_provenance_string(
159 bool human=
true)
const;
161 inline UniqueID get_unique_inline_id(
void)
const {
return unique_id; }
166 uint64_t context_index;
174 virtual MappableKind get_mappable_kind(
void)
const;
175 virtual Task* as_mappable_task(
void)
const;
176 virtual Copy* as_mappable_copy(
void)
const;
177 virtual Inline* as_mappable_inline(
void)
const;
178 virtual UniqueID get_unique_mappable_id(
void)
const;
179 virtual UniqueID get_unique_id(
void)
const;
180 virtual uint64_t get_context_index(
void)
const;
181 virtual int get_depth(
void)
const;
182 virtual const Legion::Task* get_parent_task(
void)
const;
183 virtual const std::string_view& get_provenance_string(
184 bool human=
true)
const;
186 inline UniqueID get_unique_copy_id(
void)
const {
return unique_id; }
188 std::vector<RegionRequirement> src_requirements;
189 std::vector<RegionRequirement> dst_requirements;
192 uint64_t context_index;
200 Processor::TaskFuncID low_id;
201 Processor::Kind proc_kind;
210 Variant(Processor::TaskFuncID
id, Processor::Kind k,
211 bool single,
bool index,
214 : low_id(id), proc_kind(k),
216 inner(in), leaf(lf), vid(v) { }
219 TaskVariantCollection(Processor::TaskFuncID uid,
221 const bool idem,
size_t ret)
222 : user_id(uid), name(n),
223 idempotent(idem), return_size(ret) { }
224 void add_variant(Processor::TaskFuncID low_id,
225 Processor::Kind kind,
226 bool single,
bool index,
227 bool inner,
bool leaf,
229 const Variant& select_variant(
bool single,
bool index,
230 Processor::Kind kind);
241 bool single,
bool index_space);
251 bool single,
bool index_space);
266 const std::map<VariantID,Variant>& get_all_variants(
void)
const
269 const Processor::TaskFuncID user_id;
271 const bool idempotent;
272 const size_t return_size;
274 std::map<VariantID,Variant> variants;
278 Processor local,
const char *name = NULL);
284 static const char* create_shim_name(Processor p);
288 virtual void select_task_options(
const MapperContext ctx,
290 TaskOptions& output);
292 virtual void select_task_variant(
const MapperContext ctx,
294 const SelectVariantInput& input,
295 SelectVariantOutput& output);
296 virtual void map_task(
const MapperContext ctx,
298 const MapTaskInput& input,
299 MapTaskOutput& output);
300 virtual void map_copy(
const MapperContext ctx,
302 const MapCopyInput& input,
303 MapCopyOutput& output);
304 virtual void map_inline(
const MapperContext ctx,
306 const MapInlineInput& input,
307 MapInlineOutput& output);
308 virtual void slice_task(
const MapperContext ctx,
310 const SliceTaskInput& input,
311 SliceTaskOutput& output);
312 typedef TaskSlice DomainSplit;
313 virtual void select_tunable_value(
const MapperContext ctx,
315 const SelectTunableInput& input,
316 SelectTunableOutput& output);
317 virtual void handle_message(
const MapperContext ctx,
318 const MapperMessage& message);
321 virtual void select_task_options(
Task *task);
322 virtual void select_task_variant(
Task *task);
323 virtual bool map_task(
Task *task);
324 virtual bool map_copy(
Copy *copy);
325 virtual bool map_inline(Inline *inline_operation);
326 virtual void notify_mapping_result(
const Mappable *mappable);
327 virtual void notify_mapping_failed(
const Mappable *mappable);
328 virtual void slice_domain(
const Task *task,
const Domain &domain,
329 std::vector<DomainSplit> &slices);
330 virtual void handle_message(Processor source,
331 const void *message,
size_t length);
332 virtual int get_tunable_value(
const Task *task,
333 TunableID tid, MappingTagID tag);
339 void get_field_space_fields(
FieldSpace handle, std::set<FieldID> &fields);
340 void broadcast_message(
const void *message,
size_t message_size);
342 TaskVariantCollection* find_task_variant_collection(MapperContext ctx,
343 TaskID task_id,
const char *task_name);
345 const std::vector<PhysicalInstance> &instances);
347 std::vector<PhysicalInstance> &result);
349 const std::set<FieldID> &fields,
350 ReductionOpID redop);
352 const std::set<FieldID> &fields,
353 ReductionOpID redop);
355 static void decompose_index_space(
const Domain &domain,
356 const std::vector<Processor> &targets,
357 unsigned splitting_factor,
358 std::vector<DomainSplit> &slice);
361 const Processor::Kind local_kind;
362 const Machine machine;
366 unsigned max_steals_per_theft;
369 unsigned max_steal_count;
374 unsigned splitting_factor;
377 bool breadth_first_traversal;
382 bool stealing_enabled;
384 unsigned max_schedule_count;
386 unsigned max_failed_mappings;
387 std::map<UniqueID,unsigned> failed_mappings;
393 std::map<TaskID,TaskVariantCollection*> task_variant_collections;
395 MapperContext current_ctx;
Definition geometry.h:159