2461 friend class Internal::Runtime;
2465 Internal::Runtime*
const runtime;
2471 bool is_locked(MapperContext ctx)
const;
2472 void lock_mapper(MapperContext ctx,
bool read_only =
false)
const;
2473 void unlock_mapper(MapperContext ctx)
const;
2479 bool is_reentrant(MapperContext ctx)
const;
2480 void enable_reentrant(MapperContext ctx)
const;
2481 void disable_reentrant(MapperContext ctx)
const;
2487 void start_profiling_range(MapperContext ctx)
const;
2488 void stop_profiling_range(
2489 MapperContext ctx,
const char* provenance)
const;
2496 void update_mappable_tag(
2497 MapperContext ctx,
const Mappable& mappable,
2498 MappingTagID new_tag)
const;
2500 void update_mappable_data(
2501 MapperContext ctx,
const Mappable& mappable,
const void* mapper_data,
2502 size_t mapper_data_size)
const;
2508 MapperContext ctx, Processor target,
const void* message,
2509 size_t message_size,
unsigned message_kind = 0)
const;
2511 MapperContext ctx,
const void* message,
size_t message_size,
2512 unsigned message_kind = 0,
int radix = 4)
const;
2517 void pack_physical_instance(
2519 void unpack_physical_instance(
2520 MapperContext ctx, Deserializer& derez,
2540 MapperEvent create_mapper_event(MapperContext ctx)
const;
2541 bool has_mapper_event_triggered(
2543 void trigger_mapper_event(MapperContext ctx,
MapperEvent event)
const;
2544 void wait_on_mapper_event(MapperContext ctx,
MapperEvent event)
const;
2550 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2552 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2554 MapperContext ctx, LayoutConstraintID
id)
const;
2555 LayoutConstraintID register_layout(
2558 void release_layout(
2559 MapperContext ctx, LayoutConstraintID layout_id)
const;
2560 bool do_constraints_conflict(
2561 MapperContext ctx, LayoutConstraintID set1, LayoutConstraintID set2,
2563 bool do_constraints_entail(
2564 MapperContext ctx, LayoutConstraintID source,
2565 LayoutConstraintID target,
2571 void find_valid_variants(
2572 MapperContext ctx, TaskID task_id,
2573 std::vector<VariantID>& valid_variants,
2574 Processor::Kind kind = Processor::NO_KIND)
const;
2575 void find_generator_variants(
2576 MapperContext ctx, TaskID task_id,
2577 std::vector<std::pair<TaskID, VariantID> >& generator_variants,
2578 Processor::Kind kind = Processor::NO_KIND)
const;
2579 VariantID find_or_create_variant(
2580 MapperContext ctx, TaskID task_id,
2583 TaskID generator_tid, VariantID generator_vid,
2584 Processor generator_processor,
bool& created)
const;
2585 const char* find_task_variant_name(
2586 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2587 bool is_leaf_variant(
2588 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2589 bool is_inner_variant(
2590 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2591 bool is_idempotent_variant(
2592 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2593 bool is_replicable_variant(
2594 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2600 typename T, T (*TASK_PTR)(
2601 const Task*,
const std::vector<PhysicalRegion>&,
2603 VariantID register_task_variant(
2606 typename T,
typename UDT,
2608 const Task*,
const std::vector<PhysicalRegion>&, Context,
2610 VariantID register_task_variant(
2612 const UDT& user_data)
const;
2613 template<void (*TASK_PTR)(
2614 const Task*,
const std::vector<PhysicalRegion>&, Context,
Runtime*)>
2615 VariantID register_task_variant(
2618 typename UDT, void (*TASK_PTR)(
2619 const Task*,
const std::vector<PhysicalRegion>&,
2620 Context,
Runtime*,
const UDT&)>
2621 VariantID register_task_variant(
2623 const UDT& user_data)
const;
2624 VariantID register_task_variant(
2626 const CodeDescriptor& codedesc,
const void* user_data =
nullptr,
2627 size_t user_len = 0,
size_t return_type_size = LEGION_MAX_RETURN_SIZE,
2628 bool has_return_type =
false)
const;
2634 void filter_variants(
2635 MapperContext ctx,
const Task& task,
2636 const std::vector<std::vector<PhysicalInstance> >& chosen_intances,
2637 std::vector<VariantID>& variants)
const;
2639 void filter_instances(
2640 MapperContext ctx,
const Task& task, VariantID chosen_variant,
2641 std::vector<std::vector<PhysicalInstance> >& instances,
2642 std::vector<std::set<FieldID> >& missing_fields)
const;
2644 void filter_instances(
2645 MapperContext ctx,
const Task& task,
unsigned index,
2646 VariantID chosen_variant, std::vector<PhysicalInstance>& instances,
2647 std::set<FieldID>& missing_fields)
const;
2652 bool create_physical_instance(
2653 MapperContext ctx, Memory target_memory,
2656 bool acquire =
true, GCPriority priority = 0,
2657 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2659 bool create_physical_instance(
2660 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2662 bool acquire =
true, GCPriority priority = 0,
2663 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2665 bool find_or_create_physical_instance(
2666 MapperContext ctx, Memory target_memory,
2669 bool& created,
bool acquire =
true, GCPriority priority = 0,
2670 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2672 bool find_or_create_physical_instance(
2673 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2675 bool& created,
bool acquire =
true, GCPriority priority = 0,
2676 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2678 bool find_physical_instance(
2679 MapperContext ctx, Memory target_memory,
2682 bool acquire =
true,
bool tight_region_bounds =
false)
const;
2683 bool find_physical_instance(
2684 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2686 bool acquire =
true,
bool tight_region_bounds =
false)
const;
2687 void find_physical_instances(
2688 MapperContext ctx, Memory target_memory,
2690 const std::vector<LogicalRegion>& regions,
2691 std::vector<PhysicalInstance>& results,
bool acquire =
false,
2692 bool tight_region_bounds =
false)
const;
2693 void find_physical_instances(
2694 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2695 const std::vector<LogicalRegion>& regions,
2696 std::vector<PhysicalInstance>& results,
bool acquire =
false,
2697 bool tight_region_bounds =
false)
const;
2698 void set_garbage_collection_priority(
2700 GCPriority priority)
const;
2710 bool acquire_instance(
2712 bool acquire_instances(
2713 MapperContext ctx,
const std::vector<PhysicalInstance>& insts)
const;
2714 bool acquire_and_filter_instances(
2715 MapperContext ctx, std::vector<PhysicalInstance>& instances,
2716 bool filter_acquired_instance =
false)
const;
2717 bool acquire_instances(
2719 const std::vector<std::vector<PhysicalInstance> >& instances)
const;
2720 bool acquire_and_filter_instances(
2722 std::vector<std::vector<PhysicalInstance> >& instances,
2723 bool filter_acquired_instances =
false)
const;
2724 void release_instance(
2726 void release_instances(
2728 const std::vector<PhysicalInstance>& instances)
const;
2729 void release_instances(
2731 const std::vector<std::vector<PhysicalInstance> >& instances)
const;
2743 bool collect_instance(
2748 void collect_instances(
2749 MapperContext ctx,
const std::vector<PhysicalInstance>& instances,
2750 std::vector<bool>& collected)
const;
2760 bool redistrict_instance(
2763 const std::vector<LogicalRegion>& regions,
bool acquire =
true,
2764 GCPriority priority = 0,
bool tight_region_bounds =
false);
2765 bool redistrict_instance(
2767 LayoutConstraintID layout_id,
2768 const std::vector<LogicalRegion>& regions,
bool acquire =
true,
2769 GCPriority priority = 0,
bool tight_region_bounds =
false);
2773 bool acquire_future(MapperContext ctx,
const Future& f, Memory mem)
const;
2791 MapperContext ctx, Memory memory,
const PoolBounds& bounds,
2792 bool escaping =
true,
bool optimistic =
false)
const;
2793 void release_pool(MapperContext ctx, Memory memory,
bool escaping =
true);
2800 MapperContext ctx,
const Domain& bounds, TypeTag type_tag = 0,
2801 const char* provenance =
nullptr,
bool take_ownership =
false)
const;
2803 template<
int DIM,
typename COORD_T>
2804 IndexSpaceT<DIM, COORD_T> create_index_space(
2805 MapperContext ctx, Rect<DIM, COORD_T> bounds,
2806 const char* provenance =
nullptr)
const;
2809 MapperContext ctx,
const std::vector<DomainPoint>& points,
2810 const char* provenance =
nullptr)
const;
2812 template<
int DIM,
typename COORD_T>
2813 IndexSpaceT<DIM, COORD_T> create_index_space(
2814 MapperContext ctx,
const std::vector<Point<DIM, COORD_T> >& points,
2815 const char* provenance =
nullptr)
const;
2818 MapperContext ctx,
const std::vector<Domain>& rects,
2819 const char* provenance =
nullptr)
const;
2821 template<
int DIM,
typename COORD_T>
2822 IndexSpaceT<DIM, COORD_T> create_index_space(
2823 MapperContext ctx,
const std::vector<Rect<DIM, COORD_T> >& rects,
2824 const char* provenance =
nullptr)
const;
2827 MapperContext ctx,
const std::vector<IndexSpace>& sources,
2828 const char* provenance =
nullptr)
const;
2830 template<
int DIM,
typename COORD_T>
2831 IndexSpaceT<DIM, COORD_T> union_index_spaces(
2833 const std::vector<IndexSpaceT<DIM, COORD_T> >& sources,
2834 const char* provenance =
nullptr)
const;
2837 MapperContext ctx,
const std::vector<IndexSpace>& sources,
2838 const char* provenance =
nullptr)
const;
2840 template<
int DIM,
typename COORD_T>
2841 IndexSpaceT<DIM, COORD_T> intersect_index_spaces(
2843 const std::vector<IndexSpaceT<DIM, COORD_T> >& sources,
2844 const char* provenance =
nullptr)
const;
2848 const char* provenance =
nullptr)
const;
2850 template<
int DIM,
typename COORD_T>
2851 IndexSpaceT<DIM, COORD_T> subtract_index_spaces(
2852 MapperContext ctx, IndexSpaceT<DIM, COORD_T> left,
2853 IndexSpaceT<DIM, COORD_T> right,
2854 const char* provenance =
nullptr)
const;
2859 bool is_index_space_empty(MapperContext ctx,
IndexSpace handle)
const;
2860 template<
int DIM,
typename COORD_T>
2861 bool is_index_space_empty(
2862 MapperContext ctx, IndexSpaceT<DIM, COORD_T> handle)
const;
2864 bool index_spaces_overlap(
2866 template<
int DIM,
typename COORD_T>
2867 bool index_spaces_overlap(
2868 MapperContext ctx, IndexSpaceT<DIM, COORD_T> one,
2869 IndexSpaceT<DIM, COORD_T> two)
const;
2871 bool index_space_dominates(
2873 template<
int DIM,
typename COORD_T>
2874 bool index_space_dominates(
2875 MapperContext ctx, IndexSpaceT<DIM, COORD_T> test,
2876 IndexSpaceT<DIM, COORD_T> dominator)
const;
2882 bool has_index_partition(
2883 MapperContext ctx,
IndexSpace parent, Color c)
const;
2886 MapperContext ctx,
IndexSpace parent, Color color)
const;
2893 bool has_multiple_domains(MapperContext ctx,
IndexSpace handle)
const;
2897 void get_index_space_domains(
2899 std::vector<Domain>& domains)
const;
2901 Domain get_index_partition_color_space(
2904 IndexSpace get_index_partition_color_space_name(
2907 void get_index_space_partition_colors(
2908 MapperContext ctx,
IndexSpace sp, std::set<Color>& colors)
const;
2910 bool is_index_partition_disjoint(
2913 bool is_index_partition_complete(
2916 Color get_index_space_color(MapperContext ctx,
IndexSpace handle)
const;
2921 Color get_index_partition_color(
2927 bool has_parent_index_partition(
2933 unsigned get_index_space_depth(
2936 unsigned get_index_partition_depth(
2943 size_t get_field_size(
2944 MapperContext ctx,
FieldSpace handle, FieldID fid)
const;
2946 void get_field_space_fields(
2948 std::vector<FieldID>& fields)
const;
2949 void get_field_space_fields(
2951 std::set<FieldID>& fields)
const;
2960 MapperContext ctx,
LogicalRegion parent, Color color)
const;
2967 RegionTreeID tid)
const;
2980 RegionTreeID tid)
const;
2982 Color get_logical_region_color(
2988 Color get_logical_partition_color(
2994 bool has_parent_logical_partition(
3003 bool retrieve_semantic_information(
3004 MapperContext ctx, TaskID task_id, SemanticTag tag,
3005 const void*& result,
size_t& size,
bool can_fail =
false,
3006 bool wait_until_ready =
false)
const;
3008 bool retrieve_semantic_information(
3009 MapperContext ctx,
IndexSpace handle, SemanticTag tag,
3010 const void*& result,
size_t& size,
bool can_fail =
false,
3011 bool wait_until_ready =
false)
const;
3013 bool retrieve_semantic_information(
3015 const void*& result,
size_t& size,
bool can_fail =
false,
3016 bool wait_until_ready =
false)
const;
3018 bool retrieve_semantic_information(
3019 MapperContext ctx,
FieldSpace handle, SemanticTag tag,
3020 const void*& result,
size_t& size,
bool can_fail =
false,
3021 bool wait_until_ready =
false)
const;
3023 bool retrieve_semantic_information(
3024 MapperContext ctx,
FieldSpace handle, FieldID fid, SemanticTag tag,
3025 const void*& result,
size_t& size,
bool can_fail =
false,
3026 bool wait_until_ready =
false)
const;
3028 bool retrieve_semantic_information(
3030 const void*& result,
size_t& size,
bool can_fail =
false,
3031 bool wait_until_ready =
false)
const;
3033 bool retrieve_semantic_information(
3035 const void*& result,
size_t& size,
bool can_fail =
false,
3036 bool wait_until_ready =
false)
const;
3039 MapperContext ctx, TaskID task_id,
const char*& result)
const;
3042 MapperContext ctx,
IndexSpace handle,
const char*& result)
const;
3045 MapperContext ctx,
IndexPartition handle,
const char*& result)
const;
3048 MapperContext ctx,
FieldSpace handle,
const char*& result)
const;
3051 MapperContext ctx,
FieldSpace handle, FieldID fid,
3052 const char*& result)
const;
3055 MapperContext ctx,
LogicalRegion handle,
const char*& result)
const;
3059 const char*& result)
const;
3064 bool is_MPI_interop_configured(MapperContext ctx)
const;
3065 const std::map<
int , AddressSpace>& find_forward_MPI_mapping(
3066 MapperContext ctx)
const;
3068 const std::map<AddressSpace,
int >& find_reverse_MPI_mapping(
3069 MapperContext ctx)
const;
3070 int find_local_MPI_rank(MapperContext ctx)
const;
3075 template<
typename T>
3080 std::is_trivially_copyable<T>::value,
3081 "tunable type must be trivially copyable");
3082 void* output_result = malloc(
sizeof(T));
3083 memcpy(output_result, &result,
sizeof(T));
3084 output.value = output_result;
3085 output.size =
sizeof(T);