Legion Runtime
Loading...
Searching...
No Matches
default_mapper.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 __DEFAULT_MAPPER_H__
18#define __DEFAULT_MAPPER_H__
19
25#include "legion.h"
27
28#include <stdlib.h>
29#include <assert.h>
30#include <algorithm>
31
32namespace Legion {
33 namespace Mapping {
34
45 class DefaultMapper : public Mapper {
46 public:
47 enum DefaultTunables { // tunable IDs recognized by the default mapper
48 DEFAULT_TUNABLE_NODE_COUNT = 0,
49 DEFAULT_TUNABLE_LOCAL_CPUS = 1,
50 DEFAULT_TUNABLE_LOCAL_GPUS = 2,
51 DEFAULT_TUNABLE_LOCAL_IOS = 3,
52 DEFAULT_TUNABLE_LOCAL_OMPS = 4,
53 DEFAULT_TUNABLE_LOCAL_PYS = 5,
54 DEFAULT_TUNABLE_GLOBAL_CPUS = 6,
55 DEFAULT_TUNABLE_GLOBAL_GPUS = 7,
56 DEFAULT_TUNABLE_GLOBAL_IOS = 8,
57 DEFAULT_TUNABLE_GLOBAL_OMPS = 9,
58 DEFAULT_TUNABLE_GLOBAL_PYS = 10,
59 DEFAULT_TUNABLE_LAST = 11, // this one must always be last and unused
60 };
61 enum MappingKind {
62 TASK_MAPPING,
63 INLINE_MAPPING,
64 COPY_MAPPING,
65 CLOSE_MAPPING,
66 ACQUIRE_MAPPING,
67 RELEASE_MAPPING,
68 PARTITION_MAPPING,
69 };
70 enum MapperMessageType
71 {
72 INVALID_MESSAGE = 0,
73 PROFILING_SAMPLE = 1,
74 ADVERTISEMENT = 2,
75 };
76 enum MappingTags { // mapping tags understood by the default mapper
77 // should the region be virtually mapped?
78 VIRTUAL_MAP = (1 << 0),
79
80 // should the instance be for exactly this subregion? (by default,
81 // the default mapper tries to make larger instances that will be
82 // reused for other mappings)
83 EXACT_REGION = (1 << 1),
84
85 // should this task be assigned to a processor in the same address
86 // space as the parent task
87 SAME_ADDRESS_SPACE = (1 << 2),
88
89 // should this instance be placed in an RDMA-able memory if possible?
90 PREFER_RDMA_MEMORY = (1 << 3),
91
92 // prefer a CPU (instead of GPU) implementation of a task if both are
93 // available
94 PREFER_CPU_VARIANT = (1 << 4),
95 };
96 protected: // Internal types
97 struct VariantInfo {
98 public:
99 VariantInfo(void)
100 : variant(0), tight_bound(false),
101 is_inner(false), is_leaf(false), is_replicable(false) { }
102 public:
103 VariantID variant;
104 Processor::Kind proc_kind;
105 bool tight_bound;
106 bool is_inner;
107 bool is_leaf;
108 bool is_replicable;
109 };
110 enum CachedMappingPolicy
111 {
112 DEFAULT_CACHE_POLICY_ENABLE,
113 DEFAULT_CACHE_POLICY_DISABLE,
114 };
116 public:
117 unsigned long long task_hash;
118 VariantID variant;
119 std::vector<std::vector<PhysicalInstance> > mapping;
120 std::vector<Memory> output_targets;
121 std::vector<LayoutConstraintSet> output_constraints;
122 };
124 public:
125 MapperMsgHdr(void) : magic(0xABCD), type(INVALID_MESSAGE) { }
126 bool is_valid_mapper_msg() const
127 {
128 return magic == 0xABCD && type != INVALID_MESSAGE;
129 }
130 uint32_t magic;
131 MapperMessageType type;
132 };
134 public:
135 ProfilingSampleMsg(void) : MapperMsgHdr(), task_id(0) { }
136 Processor::TaskFuncID task_id;
138 };
139 public:
140 DefaultMapper(MapperRuntime *rt, Machine machine, Processor local,
141 const char *mapper_name = NULL, bool own_name = false);
142 DefaultMapper(const DefaultMapper &rhs);
143 virtual ~DefaultMapper(void);
144 public:
145 DefaultMapper& operator=(const DefaultMapper &rhs);
146 public:
147 const char* get_mapper_name(void) const override;
148 MapperSyncModel get_mapper_sync_model(void) const override;
149 public: // Task mapping calls
150 void select_task_options(const MapperContext ctx,
151 const Task& task,
152 TaskOptions& output) override;
153 void premap_task(const MapperContext ctx,
154 const Task& task,
155 const PremapTaskInput& input,
156 PremapTaskOutput& output) override;
157 void slice_task(const MapperContext ctx,
158 const Task& task,
159 const SliceTaskInput& input,
160 SliceTaskOutput& output) override;
161 void map_task(const MapperContext ctx,
162 const Task& task,
163 const MapTaskInput& input,
164 MapTaskOutput& output) override;
165 void replicate_task(MapperContext ctx,
166 const Task& task,
167 const ReplicateTaskInput& input,
168 ReplicateTaskOutput& output) override;
169 LEGION_DEPRECATED("map_replicate_task is now deprecated, please switch to replicate_task")
170 virtual void map_replicate_task(const MapperContext ctx,
171 const Task& task,
172 const MapTaskInput& input,
173 const MapTaskOutput& default_output,
174 MapReplicateTaskOutput& output);
175 void select_task_variant(const MapperContext ctx,
176 const Task& task,
177 const SelectVariantInput& input,
178 SelectVariantOutput& output) override;
179 void postmap_task(const MapperContext ctx,
180 const Task& task,
181 const PostMapInput& input,
182 PostMapOutput& output) override;
183 void select_task_sources(const MapperContext ctx,
184 const Task& task,
185 const SelectTaskSrcInput& input,
186 SelectTaskSrcOutput& output) override;
187 void report_profiling(const MapperContext ctx,
188 const Task& task,
189 const TaskProfilingInfo& input) override;
190 void select_sharding_functor(
191 const MapperContext ctx,
192 const Task& task,
193 const SelectShardingFunctorInput& input,
194 SelectShardingFunctorOutput& output) override;
195 public: // Inline mapping calls
196 void map_inline(const MapperContext ctx,
197 const InlineMapping& inline_op,
198 const MapInlineInput& input,
199 MapInlineOutput& output) override;
200 void select_inline_sources(const MapperContext ctx,
201 const InlineMapping& inline_op,
202 const SelectInlineSrcInput& input,
203 SelectInlineSrcOutput& output) override;
204 void report_profiling(const MapperContext ctx,
205 const InlineMapping& inline_op,
206 const InlineProfilingInfo& input) override;
207 public: // Copy mapping calls
208 void map_copy(const MapperContext ctx,
209 const Copy& copy,
210 const MapCopyInput& input,
211 MapCopyOutput& output) override;
212 void select_copy_sources(const MapperContext ctx,
213 const Copy& copy,
214 const SelectCopySrcInput& input,
215 SelectCopySrcOutput& output) override;
216 void report_profiling(const MapperContext ctx,
217 const Copy& copy,
218 const CopyProfilingInfo& input) override;
219 void select_sharding_functor(
220 const MapperContext ctx,
221 const Copy& copy,
222 const SelectShardingFunctorInput& input,
223 SelectShardingFunctorOutput& output) override;
224 public: // Close mapping calls
225 void select_close_sources(const MapperContext ctx,
226 const Close& close,
227 const SelectCloseSrcInput& input,
228 SelectCloseSrcOutput& output) override;
229 void report_profiling(const MapperContext ctx,
230 const Close& close,
231 const CloseProfilingInfo& input) override;
232 void select_sharding_functor(
233 const MapperContext ctx,
234 const Close& close,
235 const SelectShardingFunctorInput& input,
236 SelectShardingFunctorOutput& output) override;
237 public: // Acquire mapping calls
238 void map_acquire(const MapperContext ctx,
239 const Acquire& acquire,
240 const MapAcquireInput& input,
241 MapAcquireOutput& output) override;
242 void report_profiling(const MapperContext ctx,
243 const Acquire& acquire,
244 const AcquireProfilingInfo& input) override;
245 void select_sharding_functor(
246 const MapperContext ctx,
247 const Acquire& acquire,
248 const SelectShardingFunctorInput& input,
249 SelectShardingFunctorOutput& output) override;
250 public: // Release mapping calls
251 void map_release(const MapperContext ctx,
252 const Release& release,
253 const MapReleaseInput& input,
254 MapReleaseOutput& output) override;
255 void select_release_sources(const MapperContext ctx,
256 const Release& release,
257 const SelectReleaseSrcInput& input,
258 SelectReleaseSrcOutput& output) override;
259 void report_profiling(const MapperContext ctx,
260 const Release& release,
261 const ReleaseProfilingInfo& input) override;
262 void select_sharding_functor(
263 const MapperContext ctx,
264 const Release& release,
265 const SelectShardingFunctorInput& input,
266 SelectShardingFunctorOutput& output) override;
267 public: // Partition mapping calls
268 void select_partition_projection(const MapperContext ctx,
269 const Partition& partition,
271 SelectPartitionProjectionOutput& output) override;
272 void map_partition(const MapperContext ctx,
273 const Partition& partition,
274 const MapPartitionInput& input,
275 MapPartitionOutput& output) override;
276 void select_partition_sources(
277 const MapperContext ctx,
278 const Partition& partition,
279 const SelectPartitionSrcInput& input,
280 SelectPartitionSrcOutput& output) override;
281 void report_profiling(const MapperContext ctx,
282 const Partition& partition,
283 const PartitionProfilingInfo& input) override;
284 void select_sharding_functor(
285 const MapperContext ctx,
286 const Partition& partition,
287 const SelectShardingFunctorInput& input,
288 SelectShardingFunctorOutput& output) override;
289 public: // Fill mapper calls
290 void select_sharding_functor(
291 const MapperContext ctx,
292 const Fill& fill,
293 const SelectShardingFunctorInput& input,
294 SelectShardingFunctorOutput& output) override;
295 public: // Task execution mapping calls
296 void configure_context(const MapperContext ctx,
297 const Task& task,
298 ContextConfigOutput& output) override;
299 void select_tunable_value(const MapperContext ctx,
300 const Task& task,
301 const SelectTunableInput& input,
302 SelectTunableOutput& output) override;
303 public: // Must epoch mapping
304 void select_sharding_functor(
305 const MapperContext ctx,
306 const MustEpoch& epoch,
307 const SelectShardingFunctorInput& input,
308 MustEpochShardingFunctorOutput& output) override;
309 void map_must_epoch(const MapperContext ctx,
310 const MapMustEpochInput& input,
311 MapMustEpochOutput& output) override;
312 public: // Dataflow graph mapping
313 void map_dataflow_graph(const MapperContext ctx,
314 const MapDataflowGraphInput& input,
315 MapDataflowGraphOutput& output) override;
316 public: // Memoization control
317 void memoize_operation(const MapperContext ctx,
318 const Mappable& mappable,
319 const MemoizeInput& input,
320 MemoizeOutput& output) override;
321 public: // Mapping control and stealing
322 void select_tasks_to_map(const MapperContext ctx,
323 const SelectMappingInput& input,
324 SelectMappingOutput& output) override;
325 void select_steal_targets(const MapperContext ctx,
326 const SelectStealingInput& input,
327 SelectStealingOutput& output) override;
328 void permit_steal_request(const MapperContext ctx,
329 const StealRequestInput& input,
330 StealRequestOutput& output) override;
331 public: // handling
332 void handle_message(const MapperContext ctx,
333 const MapperMessage& message) override;
334 void handle_task_result(const MapperContext ctx,
335 const MapperTaskResult& result) override;
336 public: // These virtual methods are not part of the mapper interface
337 // but make it possible for inheriting mappers to easily
338 // override policies that the default mapper is employing
339 // All method calls start with 'default_policy_'
340 virtual Processor default_policy_select_initial_processor(
341 MapperContext ctx, const Task &task);
342 virtual void default_policy_select_target_processors(
343 MapperContext ctx,
344 const Task &task,
345 std::vector<Processor> &target_procs);
346 virtual TaskPriority default_policy_select_task_priority(
347 MapperContext ctx, const Task &task);
348 virtual CachedMappingPolicy default_policy_select_task_cache_policy(
349 MapperContext ctx, const Task &task);
350 virtual bool default_policy_select_must_epoch_processors(
351 MapperContext ctx,
352 const std::vector<std::set<const Task *> > &tasks,
353 Processor::Kind proc_kind,
354 std::map<const Task *, Processor> &target_procs);
355 virtual void default_policy_rank_processor_kinds(
356 MapperContext ctx, const Task &task,
357 std::vector<Processor::Kind> &ranking);
358 virtual VariantID default_policy_select_best_variant(MapperContext ctx,
359 const Task &task, Processor::Kind kind,
360 VariantID vid1, VariantID vid2,
361 const ExecutionConstraintSet &execution1,
362 const ExecutionConstraintSet &execution2,
363 const TaskLayoutConstraintSet &layout1,
364 const TaskLayoutConstraintSet &layout2);
365 virtual Memory default_policy_select_target_memory(MapperContext ctx,
366 Processor target_proc,
367 const RegionRequirement &req,
369 virtual Memory default_policy_select_output_target(MapperContext ctx,
370 Processor target_proc);
371 virtual LayoutConstraintID default_policy_select_layout_constraints(
372 MapperContext ctx, Memory target_memory,
373 const RegionRequirement &req,
374 MappingKind mapping_kind,
375 bool needs_field_constraint_check,
376 bool &force_new_instances);
377 virtual void default_policy_select_constraints(MapperContext ctx,
378 LayoutConstraintSet &constraints,
379 Memory target_memory,
380 const RegionRequirement &req);
381 virtual void default_policy_select_output_constraints(const Task &task,
382 LayoutConstraintSet &constraints,
383 const RegionRequirement &req);
384 virtual Memory default_policy_select_constrained_instance_constraints(
385 MapperContext ctx,
386 const std::vector<const Task *> &tasks,
387 const std::vector<unsigned> &req_indexes,
388 const std::vector<Processor> &target_procs,
389 const std::set<LogicalRegion> &needed_regions,
390 const std::set<FieldID> &needed_fields,
391 LayoutConstraintSet &constraints);
392 virtual void default_policy_select_constraint_fields(
393 MapperContext ctx,
394 const RegionRequirement &req,
395 std::vector<FieldID> &fields);
396 virtual LogicalRegion default_policy_select_instance_region(
397 MapperContext ctx, Memory target_memory,
398 const RegionRequirement &req,
399 const LayoutConstraintSet &constraints,
400 bool force_new_instances,
401 bool meets_constraints);
402 virtual void default_policy_select_instance_fields(
403 MapperContext ctx,
404 const RegionRequirement &req,
405 const std::set<FieldID> &needed_fields,
406 std::vector<FieldID> &fields);
407 virtual int default_policy_select_garbage_collection_priority(
408 MapperContext ctx,
409 MappingKind kind, Memory memory,
410 const PhysicalInstance &instance,
411 bool meets_fill_constraints,bool reduction);
412 virtual void default_policy_select_sources(MapperContext,
413 const PhysicalInstance &target,
414 const std::vector<PhysicalInstance> &source,
415 std::deque<PhysicalInstance> &ranking);
416 virtual bool default_policy_select_close_virtual(const MapperContext ctx,
417 const Close &close);
418 virtual bool default_policy_select_reduction_instance_reuse(const
419 MapperContext ctx);
420
421 protected: // help for generating random numbers
422 long default_generate_random_integer(void) const;
423 double default_generate_random_real(void) const;
424 protected: // member helper methods
425 Processor default_select_random_processor(
426 const std::vector<Processor> &procs) const;
427 Processor default_get_next_local_cpu(void);
428 Processor default_get_next_global_cpu(void);
429 Processor default_get_next_local_gpu(void);
430 Processor default_get_next_global_gpu(void);
431 Processor default_get_next_local_io(void);
432 Processor default_get_next_global_io(void);
433 Processor default_get_next_local_py(void);
434 Processor default_get_next_global_py(void);
435 Processor default_get_next_local_procset(void);
436 Processor default_get_next_global_procset(void);
437 Processor default_get_next_local_omp(void);
438 Processor default_get_next_global_omp(void);
439 VariantInfo default_find_preferred_variant(
440 const Task &task, MapperContext ctx,
441 bool needs_tight_bound, bool cache = true,
442 Processor::Kind kind = Processor::NO_KIND);
443 void default_slice_task(const Task &task,
444 const std::vector<Processor> &local_procs,
445 const std::vector<Processor> &remote_procs,
446 const SliceTaskInput &input,
447 SliceTaskOutput &output,
448 std::map<Domain,std::vector<TaskSlice> > &cached_slices) const;
449 bool default_create_custom_instances(MapperContext ctx,
450 Processor target, Memory target_memory,
451 const RegionRequirement &req, unsigned index,
452 std::set<FieldID> &needed_fields, // will destroy
453 const TaskLayoutConstraintSet &layout_constraints,
454 bool needs_field_constraint_check,
455 std::vector<PhysicalInstance> &instances,
456 size_t *footprint = NULL);
457 bool default_make_instance(MapperContext ctx, Memory target_memory,
458 const LayoutConstraintSet &constraints,
459 PhysicalInstance &result, MappingKind kind,
460 bool force_new, bool meets,
461 const RegionRequirement &req,
462 size_t *footprint = NULL);
463 void default_report_failed_instance_creation(const Task &task,
464 unsigned index, Processor target_proc,
465 Memory target_memory, size_t footprint = 0) const;
466 void default_remove_cached_task(MapperContext ctx, VariantID variant,
467 unsigned long long task_hash,
468 const std::pair<TaskID,Processor> &cache_key,
469 const std::vector<
470 std::vector<PhysicalInstance> > &post_filter);
471 template<bool IS_SRC>
472 void default_create_copy_instance(MapperContext ctx, const Copy &copy,
473 const RegionRequirement &req, unsigned index,
474 std::vector<PhysicalInstance> &instances);
475 LogicalRegion default_find_common_ancestor(MapperContext ctx,
476 const std::set<LogicalRegion> &regions);
477 bool have_proc_kind_variant(const MapperContext ctx, TaskID id,
478 Processor::Kind kind);
479 const std::vector<Processor>& local_procs_by_kind(Processor::Kind kind);
480 const std::vector<Processor>& remote_procs_by_kind(Processor::Kind kind);
481 MemoryConstraint find_memory_constraint(const MapperContext ctx,
482 const Task& task, VariantID vid,
483 unsigned index);
484 private:
485 void partition_task_layout_constraint_sets(
486 const MapperContext ctx,
487 const unsigned index,
488 std::set<FieldID> &needed_fields,
489 const TaskLayoutConstraintSet &layout_constraints,
490 std::vector<std::vector<FieldID> >&field_arrays,
491 std::vector<std::vector<FieldID> >&leftover_fields,
492 std::vector<LayoutConstraintID> &field_layout_ids,
493 std::vector<LayoutConstraintID> &non_field_layout_ids);
494 bool create_instances_from_partitioned_task_layout_constraint_set(
495 const MapperContext ctx,
496 const Memory target_memory,
497 const std::vector<std::vector<FieldID> > &field_arrays,
498 const std::vector<LayoutConstraintID> &layout_ids,
499 const unsigned int layout_ids_size,
500 std::vector<PhysicalInstance> &instances,
501 const RegionRequirement &req,
502 const bool force_new_instances,
503 size_t *footprint,
504 const bool is_field_constraints,
505 const bool all_fields_opts=false);
506 void check_valid_task_layout_constraints(
507 const Task &task, MapperContext ctx,
508 const TaskLayoutConstraintSet &layout_constraints,
509 const Processor target_proc, const Memory target_memory,
510 const RegionRequirement &req, const unsigned index);
511
512 protected: // static helper methods
513 static const char* create_default_name(Processor p);
514 template<int DIM>
515 static void default_decompose_points(
516 const Domain& domain,
517 const std::vector<Processor> &targets,
518 const Point<DIM,coord_t> &blocking,
519 bool recurse, bool stealable,
520 std::vector<TaskSlice> &slices);
521 template<int DIM>
522 static Point<DIM,coord_t> default_select_num_blocks(
523 long long int factor,
524 const Rect<DIM,coord_t> &rect_to_factor);
525 static unsigned long long compute_task_hash(const Task &task);
526 static inline bool physical_sort_func(
527 const std::pair<PhysicalInstance,unsigned> &left,
528 const std::pair<PhysicalInstance,unsigned> &right)
529 { return (left.second < right.second); }
530 static inline bool point_sort_func(const Task *t1, const Task *t2)
531 { return (t1->index_point < t2->index_point); }
532 protected:
533 const Processor local_proc;
534 const Processor::Kind local_kind;
535 const AddressSpace node_id;
536 const Machine machine;
537 const char *const mapper_name;
538 protected:
539 mutable unsigned short random_number_generator[3];
540 protected:
541 // Make these data structures mutable anticipating when the machine
542 // can change shape dynamically
543 unsigned total_nodes;
544 // There are a couple of parameters from the machine description that
545 // the default mapper uses to determine how to perform mapping.
546 std::vector<Processor> local_gpus;
547 std::vector<Processor> local_cpus;
548 std::vector<Processor> local_ios;
549 std::vector<Processor> local_procsets;
550 std::vector<Processor> local_omps;
551 std::vector<Processor> local_pys;
552 std::vector<Processor> remote_gpus;
553 std::vector<Processor> remote_cpus;
554 std::vector<Processor> remote_ios;
555 std::vector<Processor> remote_procsets;
556 std::vector<Processor> remote_omps;
557 std::vector<Processor> remote_pys;
558 // multipleNumaDomainsPresent is set to true when the target machine
559 // has multiple separate NUMA memories (SOCKET_MEM). This controls how
560 // processor selection for NUMA aware allocations is performed.
561 bool multipleNumaDomainsPresent = false;
562 protected:
563 // For doing round-robining of tasks onto processors
564 unsigned next_local_gpu, next_local_cpu, next_local_io,
565 next_local_procset, next_local_omp, next_local_py;
566 Processor next_global_gpu, next_global_cpu, next_global_io,
567 next_global_procset, next_global_omp, next_global_py;
568 Machine::ProcessorQuery *global_gpu_query, *global_cpu_query,
569 *global_io_query, *global_procset_query,
570 *global_omp_query, *global_py_query;
571 protected:
572 // Cached mapping information about the application
573 std::map<Domain,std::vector<TaskSlice> > gpu_slices_cache,
574 cpu_slices_cache,
575 io_slices_cache,
576 procset_slices_cache,
577 omp_slices_cache,
578 py_slices_cache;
579 std::map<std::pair<TaskID,Processor::Kind>,
580 VariantInfo> preferred_variants;
581 std::map<std::pair<TaskID,Processor>,
582 std::list<CachedTaskMapping> > cached_task_mappings;
583 std::map<std::pair<Memory::Kind,FieldSpace>,
584 LayoutConstraintID> layout_constraint_cache;
585 std::map<std::pair<Memory::Kind,ReductionOpID>,
586 LayoutConstraintID> reduction_constraint_cache;
587 std::map<Processor,Memory> cached_target_memory,
588 cached_rdma_target_memory;
589 protected:
590 // The maximum number of tasks a mapper will allow to be stolen at a time
591 // Controlled by -dm:thefts
592 unsigned max_steals_per_theft;
593 // The maximum number of times that a single task is allowed to be stolen
594 // Controlled by -dm:count
595 unsigned max_steal_count;
596 // Do a breadth-first traversal of the task tree, by default we do
597 // a depth-first traversal to improve locality
598 bool breadth_first_traversal;
599 // Track whether stealing is enabled
600 bool stealing_enabled;
601 // The maximum number of tasks scheduled per step
602 unsigned max_schedule_count;
603 // Memoize physical analysis for logically traced operations
604 // Controlled by -dm:memoize (false by default)
605 bool memoize;
606 // Whether to map tasks locally
607 // Controlled by -dm:map_locally (false by default)
608 bool map_locally;
609 // Whether to map regions to instances of the exact sizes
610 // Controlled by -dm:exact_region (false by default)
611 bool exact_region;
612 // Whether to enable control replication
613 // Controlled by -dm:replicate (true by default)
614 bool replication_enabled;
615 bool same_address_space;
616 };
617
618 }; // namespace Mapping
619}; // namespace Legion
620
621// For backwards compatibility
622namespace LegionRuntime {
623 namespace HighLevel {
624 typedef Legion::Mapping::DefaultMapper DefaultMapper;
625 };
626};
627
628// Include template definitions
629#include "mappers/default_mapper.inl"
630
631#endif // __DEFAULT_MAPPER_H__
632
633// EOF
Definition mapping.h:240
Definition mapping.h:292
Definition mapping.h:185
Definition geometry.h:159
Definition constraints.h:240
Definition mapping.h:312
Definition mapping.h:216
Definition constraints.h:881
Definition data.h:189
Definition mapping.h:42
Definition default_mapper.h:45
const char * get_mapper_name(void) const override
Definition mapping.h:642
MapperSyncModel
Definition mapping.h:678
Definition mapping.h:2458
Definition mapping.h:414
Definition constraints.h:422
Definition mapping.h:377
Definition mapping.h:342
Definition mapping.h:264
Definition mapping.h:112
Definition constraints.h:942
Definition accessors.h:29
Definition default_mapper.h:123
Definition default_mapper.h:97
Definition mapping.h:1403
Definition mapping.h:2283
Definition mapping.h:1131
Definition mapping.h:1136
Definition mapping.h:783
Definition mapping.h:869
Definition requirements.h:42