2452 friend class Internal::Runtime;
2456 Internal::Runtime*
const runtime;
2462 bool is_locked(MapperContext ctx)
const;
2463 void lock_mapper(MapperContext ctx,
bool read_only =
false)
const;
2464 void unlock_mapper(MapperContext ctx)
const;
2470 bool is_reentrant(MapperContext ctx)
const;
2471 void enable_reentrant(MapperContext ctx)
const;
2472 void disable_reentrant(MapperContext ctx)
const;
2478 void start_profiling_range(MapperContext ctx)
const;
2479 void stop_profiling_range(
2480 MapperContext ctx,
const char* provenance)
const;
2487 void update_mappable_tag(
2488 MapperContext ctx,
const Mappable& mappable,
2489 MappingTagID new_tag)
const;
2491 void update_mappable_data(
2492 MapperContext ctx,
const Mappable& mappable,
const void* mapper_data,
2493 size_t mapper_data_size)
const;
2499 MapperContext ctx, Processor target,
const void* message,
2500 size_t message_size,
unsigned message_kind = 0)
const;
2502 MapperContext ctx,
const void* message,
size_t message_size,
2503 unsigned message_kind = 0,
int radix = 4)
const;
2508 void pack_physical_instance(
2510 void unpack_physical_instance(
2511 MapperContext ctx, Deserializer& derez,
2531 MapperEvent create_mapper_event(MapperContext ctx)
const;
2532 bool has_mapper_event_triggered(
2534 void trigger_mapper_event(MapperContext ctx,
MapperEvent event)
const;
2535 void wait_on_mapper_event(MapperContext ctx,
MapperEvent event)
const;
2541 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2543 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2545 MapperContext ctx, LayoutConstraintID
id)
const;
2546 LayoutConstraintID register_layout(
2549 void release_layout(
2550 MapperContext ctx, LayoutConstraintID layout_id)
const;
2551 bool do_constraints_conflict(
2552 MapperContext ctx, LayoutConstraintID set1, LayoutConstraintID set2,
2554 bool do_constraints_entail(
2555 MapperContext ctx, LayoutConstraintID source,
2556 LayoutConstraintID target,
2562 void find_valid_variants(
2563 MapperContext ctx, TaskID task_id,
2564 std::vector<VariantID>& valid_variants,
2565 Processor::Kind kind = Processor::NO_KIND)
const;
2566 void find_generator_variants(
2567 MapperContext ctx, TaskID task_id,
2568 std::vector<std::pair<TaskID, VariantID> >& generator_variants,
2569 Processor::Kind kind = Processor::NO_KIND)
const;
2570 VariantID find_or_create_variant(
2571 MapperContext ctx, TaskID task_id,
2574 TaskID generator_tid, VariantID generator_vid,
2575 Processor generator_processor,
bool& created)
const;
2576 const char* find_task_variant_name(
2577 MapperContext ctx, TaskID task_id, VariantID vid)
const;
2578 bool is_leaf_variant(
2579 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2580 bool is_inner_variant(
2581 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2582 bool is_idempotent_variant(
2583 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2584 bool is_replicable_variant(
2585 MapperContext ctx, TaskID task_id, VariantID variant_id)
const;
2591 typename T, T (*TASK_PTR)(
2592 const Task*,
const std::vector<PhysicalRegion>&,
2594 VariantID register_task_variant(
2597 typename T,
typename UDT,
2599 const Task*,
const std::vector<PhysicalRegion>&, Context,
2601 VariantID register_task_variant(
2603 const UDT& user_data)
const;
2604 template<void (*TASK_PTR)(
2605 const Task*,
const std::vector<PhysicalRegion>&, Context,
Runtime*)>
2606 VariantID register_task_variant(
2609 typename UDT, void (*TASK_PTR)(
2610 const Task*,
const std::vector<PhysicalRegion>&,
2611 Context,
Runtime*,
const UDT&)>
2612 VariantID register_task_variant(
2614 const UDT& user_data)
const;
2615 VariantID register_task_variant(
2617 const CodeDescriptor& codedesc,
const void* user_data =
nullptr,
2618 size_t user_len = 0,
size_t return_type_size = LEGION_MAX_RETURN_SIZE,
2619 bool has_return_type =
false)
const;
2625 void filter_variants(
2626 MapperContext ctx,
const Task& task,
2627 const std::vector<std::vector<PhysicalInstance> >& chosen_intances,
2628 std::vector<VariantID>& variants)
const;
2630 void filter_instances(
2631 MapperContext ctx,
const Task& task, VariantID chosen_variant,
2632 std::vector<std::vector<PhysicalInstance> >& instances,
2633 std::vector<std::set<FieldID> >& missing_fields)
const;
2635 void filter_instances(
2636 MapperContext ctx,
const Task& task,
unsigned index,
2637 VariantID chosen_variant, std::vector<PhysicalInstance>& instances,
2638 std::set<FieldID>& missing_fields)
const;
2643 bool create_physical_instance(
2644 MapperContext ctx, Memory target_memory,
2647 bool acquire =
true, GCPriority priority = 0,
2648 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2650 bool create_physical_instance(
2651 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2653 bool acquire =
true, GCPriority priority = 0,
2654 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2656 bool find_or_create_physical_instance(
2657 MapperContext ctx, Memory target_memory,
2660 bool& created,
bool acquire =
true, GCPriority priority = 0,
2661 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2663 bool find_or_create_physical_instance(
2664 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2666 bool& created,
bool acquire =
true, GCPriority priority = 0,
2667 bool tight_region_bounds =
false,
size_t* footprint =
nullptr,
2669 bool find_physical_instance(
2670 MapperContext ctx, Memory target_memory,
2673 bool acquire =
true,
bool tight_region_bounds =
false)
const;
2674 bool find_physical_instance(
2675 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2677 bool acquire =
true,
bool tight_region_bounds =
false)
const;
2678 void find_physical_instances(
2679 MapperContext ctx, Memory target_memory,
2681 const std::vector<LogicalRegion>& regions,
2682 std::vector<PhysicalInstance>& results,
bool acquire =
false,
2683 bool tight_region_bounds =
false)
const;
2684 void find_physical_instances(
2685 MapperContext ctx, Memory target_memory, LayoutConstraintID layout_id,
2686 const std::vector<LogicalRegion>& regions,
2687 std::vector<PhysicalInstance>& results,
bool acquire =
false,
2688 bool tight_region_bounds =
false)
const;
2689 void set_garbage_collection_priority(
2691 GCPriority priority)
const;
2701 bool acquire_instance(
2703 bool acquire_instances(
2704 MapperContext ctx,
const std::vector<PhysicalInstance>& insts)
const;
2705 bool acquire_and_filter_instances(
2706 MapperContext ctx, std::vector<PhysicalInstance>& instances,
2707 bool filter_acquired_instance =
false)
const;
2708 bool acquire_instances(
2710 const std::vector<std::vector<PhysicalInstance> >& instances)
const;
2711 bool acquire_and_filter_instances(
2713 std::vector<std::vector<PhysicalInstance> >& instances,
2714 bool filter_acquired_instances =
false)
const;
2715 void release_instance(
2717 void release_instances(
2719 const std::vector<PhysicalInstance>& instances)
const;
2720 void release_instances(
2722 const std::vector<std::vector<PhysicalInstance> >& instances)
const;
2734 bool collect_instance(
2739 void collect_instances(
2740 MapperContext ctx,
const std::vector<PhysicalInstance>& instances,
2741 std::vector<bool>& collected)
const;
2751 bool redistrict_instance(
2754 const std::vector<LogicalRegion>& regions,
bool acquire =
true,
2755 GCPriority priority = 0,
bool tight_region_bounds =
false);
2756 bool redistrict_instance(
2758 LayoutConstraintID layout_id,
2759 const std::vector<LogicalRegion>& regions,
bool acquire =
true,
2760 GCPriority priority = 0,
bool tight_region_bounds =
false);
2764 bool acquire_future(MapperContext ctx,
const Future& f, Memory mem)
const;
2782 MapperContext ctx, Memory memory,
const PoolBounds& bounds,
2783 bool escaping =
true,
bool optimistic =
false)
const;
2784 void release_pool(MapperContext ctx, Memory memory,
bool escaping =
true);
2791 MapperContext ctx,
const Domain& bounds, TypeTag type_tag = 0,
2792 const char* provenance =
nullptr,
bool take_ownership =
false)
const;
2794 template<
int DIM,
typename COORD_T>
2795 IndexSpaceT<DIM, COORD_T> create_index_space(
2796 MapperContext ctx, Rect<DIM, COORD_T> bounds,
2797 const char* provenance =
nullptr)
const;
2800 MapperContext ctx,
const std::vector<DomainPoint>& points,
2801 const char* provenance =
nullptr)
const;
2803 template<
int DIM,
typename COORD_T>
2804 IndexSpaceT<DIM, COORD_T> create_index_space(
2805 MapperContext ctx,
const std::vector<Point<DIM, COORD_T> >& points,
2806 const char* provenance =
nullptr)
const;
2809 MapperContext ctx,
const std::vector<Domain>& rects,
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<Rect<DIM, COORD_T> >& rects,
2815 const char* provenance =
nullptr)
const;
2818 MapperContext ctx,
const std::vector<IndexSpace>& sources,
2819 const char* provenance =
nullptr)
const;
2821 template<
int DIM,
typename COORD_T>
2822 IndexSpaceT<DIM, COORD_T> union_index_spaces(
2824 const std::vector<IndexSpaceT<DIM, COORD_T> >& sources,
2825 const char* provenance =
nullptr)
const;
2828 MapperContext ctx,
const std::vector<IndexSpace>& sources,
2829 const char* provenance =
nullptr)
const;
2831 template<
int DIM,
typename COORD_T>
2832 IndexSpaceT<DIM, COORD_T> intersect_index_spaces(
2834 const std::vector<IndexSpaceT<DIM, COORD_T> >& sources,
2835 const char* provenance =
nullptr)
const;
2839 const char* provenance =
nullptr)
const;
2841 template<
int DIM,
typename COORD_T>
2842 IndexSpaceT<DIM, COORD_T> subtract_index_spaces(
2843 MapperContext ctx, IndexSpaceT<DIM, COORD_T> left,
2844 IndexSpaceT<DIM, COORD_T> right,
2845 const char* provenance =
nullptr)
const;
2850 bool is_index_space_empty(MapperContext ctx,
IndexSpace handle)
const;
2851 template<
int DIM,
typename COORD_T>
2852 bool is_index_space_empty(
2853 MapperContext ctx, IndexSpaceT<DIM, COORD_T> handle)
const;
2855 bool index_spaces_overlap(
2857 template<
int DIM,
typename COORD_T>
2858 bool index_spaces_overlap(
2859 MapperContext ctx, IndexSpaceT<DIM, COORD_T> one,
2860 IndexSpaceT<DIM, COORD_T> two)
const;
2862 bool index_space_dominates(
2864 template<
int DIM,
typename COORD_T>
2865 bool index_space_dominates(
2866 MapperContext ctx, IndexSpaceT<DIM, COORD_T> test,
2867 IndexSpaceT<DIM, COORD_T> dominator)
const;
2873 bool has_index_partition(
2874 MapperContext ctx,
IndexSpace parent, Color c)
const;
2877 MapperContext ctx,
IndexSpace parent, Color color)
const;
2884 bool has_multiple_domains(MapperContext ctx,
IndexSpace handle)
const;
2888 void get_index_space_domains(
2890 std::vector<Domain>& domains)
const;
2892 Domain get_index_partition_color_space(
2895 IndexSpace get_index_partition_color_space_name(
2898 void get_index_space_partition_colors(
2899 MapperContext ctx,
IndexSpace sp, std::set<Color>& colors)
const;
2901 bool is_index_partition_disjoint(
2904 bool is_index_partition_complete(
2907 Color get_index_space_color(MapperContext ctx,
IndexSpace handle)
const;
2912 Color get_index_partition_color(
2918 bool has_parent_index_partition(
2924 unsigned get_index_space_depth(
2927 unsigned get_index_partition_depth(
2934 size_t get_field_size(
2935 MapperContext ctx,
FieldSpace handle, FieldID fid)
const;
2937 void get_field_space_fields(
2939 std::vector<FieldID>& fields)
const;
2940 void get_field_space_fields(
2942 std::set<FieldID>& fields)
const;
2951 MapperContext ctx,
LogicalRegion parent, Color color)
const;
2958 RegionTreeID tid)
const;
2971 RegionTreeID tid)
const;
2973 Color get_logical_region_color(
2979 Color get_logical_partition_color(
2985 bool has_parent_logical_partition(
2994 bool retrieve_semantic_information(
2995 MapperContext ctx, TaskID task_id, SemanticTag tag,
2996 const void*& result,
size_t& size,
bool can_fail =
false,
2997 bool wait_until_ready =
false)
const;
2999 bool retrieve_semantic_information(
3000 MapperContext ctx,
IndexSpace handle, SemanticTag tag,
3001 const void*& result,
size_t& size,
bool can_fail =
false,
3002 bool wait_until_ready =
false)
const;
3004 bool retrieve_semantic_information(
3006 const void*& result,
size_t& size,
bool can_fail =
false,
3007 bool wait_until_ready =
false)
const;
3009 bool retrieve_semantic_information(
3010 MapperContext ctx,
FieldSpace handle, SemanticTag tag,
3011 const void*& result,
size_t& size,
bool can_fail =
false,
3012 bool wait_until_ready =
false)
const;
3014 bool retrieve_semantic_information(
3015 MapperContext ctx,
FieldSpace handle, FieldID fid, SemanticTag tag,
3016 const void*& result,
size_t& size,
bool can_fail =
false,
3017 bool wait_until_ready =
false)
const;
3019 bool retrieve_semantic_information(
3021 const void*& result,
size_t& size,
bool can_fail =
false,
3022 bool wait_until_ready =
false)
const;
3024 bool retrieve_semantic_information(
3026 const void*& result,
size_t& size,
bool can_fail =
false,
3027 bool wait_until_ready =
false)
const;
3030 MapperContext ctx, TaskID task_id,
const char*& result)
const;
3033 MapperContext ctx,
IndexSpace handle,
const char*& result)
const;
3036 MapperContext ctx,
IndexPartition handle,
const char*& result)
const;
3039 MapperContext ctx,
FieldSpace handle,
const char*& result)
const;
3042 MapperContext ctx,
FieldSpace handle, FieldID fid,
3043 const char*& result)
const;
3046 MapperContext ctx,
LogicalRegion handle,
const char*& result)
const;
3050 const char*& result)
const;
3055 bool is_MPI_interop_configured(MapperContext ctx)
const;
3056 const std::map<
int , AddressSpace>& find_forward_MPI_mapping(
3057 MapperContext ctx)
const;
3059 const std::map<AddressSpace,
int >& find_reverse_MPI_mapping(
3060 MapperContext ctx)
const;
3061 int find_local_MPI_rank(MapperContext ctx)
const;
3066 template<
typename T>
3071 std::is_trivially_copyable<T>::value,
3072 "tunable type must be trivially copyable");
3073 void* output_result = malloc(
sizeof(T));
3074 memcpy(output_result, &result,
sizeof(T));
3075 output.value = output_result;
3076 output.size =
sizeof(T);