Legion Runtime
Loading...
Searching...
No Matches
registrars.h
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#ifndef __LEGION_REGISTRARS_H__
17#define __LEGION_REGISTRARS_H__
18
19#include "legion/api/constraints.h"
20#include "legion/api/data.h"
21
22namespace Legion {
23
35 public:
38 FieldSpace handle, const char* layout_name = nullptr);
39 public:
40 inline LayoutConstraintRegistrar& add_constraint(
41 const SpecializedConstraint& constraint);
42 inline LayoutConstraintRegistrar& add_constraint(
43 const MemoryConstraint& constraint);
44 inline LayoutConstraintRegistrar& add_constraint(
45 const OrderingConstraint& constraint);
46 inline LayoutConstraintRegistrar& add_constraint(
47 const TilingConstraint& constraint);
48 inline LayoutConstraintRegistrar& add_constraint(
49 const FieldConstraint& constraint);
50 inline LayoutConstraintRegistrar& add_constraint(
51 const DimensionConstraint& constraint);
52 inline LayoutConstraintRegistrar& add_constraint(
53 const AlignmentConstraint& constraint);
54 inline LayoutConstraintRegistrar& add_constraint(
55 const OffsetConstraint& constraint);
56 inline LayoutConstraintRegistrar& add_constraint(
57 const PointerConstraint& constraint);
58 inline LayoutConstraintRegistrar& add_constraint(
59 const PaddingConstraint& constraint);
60 public:
61 FieldSpace handle;
62 LayoutConstraintSet layout_constraints;
63 const char* layout_name;
64 };
65
71 struct PoolBounds {
72 public:
73 PoolBounds(UnboundPoolScope u, size_t s = 0)
74 : size(s), alignment(0), scope(u)
75 { }
76 PoolBounds(size_t s = 0, uint32_t a = 16)
77 : size(s), alignment(a), scope(LEGION_BOUNDED_POOL)
78 { }
79 PoolBounds(const PoolBounds&) = default;
80 PoolBounds(PoolBounds&&) = default;
81 PoolBounds& operator=(const PoolBounds&) = default;
82 PoolBounds& operator=(PoolBounds&&) = default;
83 inline bool is_bounded(void) const
84 {
85 return (scope == LEGION_BOUNDED_POOL);
86 }
87 public:
88 // If this is a bounded pool then size is the number of bytes in the pool
89 // If it is an unbounded pool then size is how many free bytes the pool
90 // is allowed to keep locally from freed instances without returning
91 // them back to the Realm allocator, zero means that all freed instances
92 // are immediately sent back to the Realm allocator
93 size_t size; // upper bound of the pool in bytes
94 uint32_t alignment; // maximum alignment supported
95 UnboundPoolScope scope; // scope for unbound pools
96 };
97
107 public:
110 TaskID task_id, bool global = true, const char* variant_name = nullptr);
112 TaskID task_id, const char* variant_name, bool global = true);
113 public: // Add execution constraints
114 inline TaskVariantRegistrar& add_constraint(
115 const ISAConstraint& constraint);
116 inline TaskVariantRegistrar& add_constraint(
117 const ProcessorConstraint& constraint);
118 inline TaskVariantRegistrar& add_constraint(
119 const ResourceConstraint& constraint);
120 inline TaskVariantRegistrar& add_constraint(
121 const LaunchConstraint& constraint);
122 inline TaskVariantRegistrar& add_constraint(
123 const ColocationConstraint& constraint);
124 public: // Add layout constraint sets
125 inline TaskVariantRegistrar& add_layout_constraint_set(
126 unsigned index, LayoutConstraintID desc);
127 public: // Set properties
128 inline void set_leaf(bool is_leaf = true);
129 inline void set_inner(bool is_inner = true);
130 inline void set_idempotent(bool is_idempotent = true);
131 inline void set_replicable(bool is_replicable = true);
132 inline void set_concurrent(bool is_concurrent = true);
133 inline void set_concurrent_barrier(bool needs_barrier = true);
134 public: // Generator Task IDs
135 inline void add_generator_task(TaskID tid);
136 public:
137 TaskID task_id;
138 bool global_registration;
139 const char* task_variant_name;
140 public: // constraints
141 ExecutionConstraintSet execution_constraints;
142 TaskLayoutConstraintSet layout_constraints;
143 public:
144 // If this is a leaf task variant then the application can
145 // request that the runtime preserve a pool in the memory of
146 // the corresponding kind with the closest affinity to the target
147 // processor for handling dynamic memory allocations during the
148 // execution of the task. Pool bounds can also be set to request
149 // an unbounded pool allocation. Note that requesting an unbound
150 // memory allocation will likely result in severe performance degradation.
151 // All these pool bounds are escaping meaning that allocations performed
152 // in the resulting pools can outlive the lifetime of the task.
153 std::map<Memory::Kind, PoolBounds> leaf_pool_bounds;
154 // If the leaf task wants to make pools for non-escaping allocations
155 // it can specify non-escaping leaf pool bounds. These must be
156 // concrete pools as unbounded pools are always escaping.
157 std::map<Memory::Kind, PoolBounds> non_escaping_leaf_pool_bounds;
158 public:
159 // TaskIDs for which this variant can serve as a generator
160 std::set<TaskID> generator_tasks;
161 public: // properties
162 bool leaf_variant;
163 bool inner_variant;
164 bool idempotent_variant;
165 bool replicable_variant;
166 bool concurrent_variant;
167 bool concurrent_barrier;
168 };
169
170} // namespace Legion
171
172#include "legion/api/registrars.inl"
173
174#endif // __LEGION_REGISTRARS_H__
Definition constraints.h:689
Definition constraints.h:202
Definition constraints.h:640
Definition constraints.h:240
Definition constraints.h:475
Definition data.h:147
Definition constraints.h:61
Definition constraints.h:167
Definition constraints.h:881
Definition constraints.h:422
Definition constraints.h:737
Definition constraints.h:538
Definition constraints.h:830
Definition constraints.h:783
Definition constraints.h:95
Definition constraints.h:132
Definition constraints.h:357
Definition constraints.h:942
Definition constraints.h:592
Definition registrars.h:34
Definition registrars.h:71
Definition registrars.h:106