Legion Runtime
Loading...
Searching...
No Matches
requirements.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#ifndef __LEGION_REQUIREMENTS_H__
17#define __LEGION_REQUIREMENTS_H__
18
24#include "legion/api/data.h"
25
26namespace Legion {
27
43 public:
49 LogicalRegion _handle, const std::set<FieldID>& privilege_fields,
50 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
51 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
52 bool _verified = false);
57 LogicalPartition pid, ProjectionID _proj,
58 const std::set<FieldID>& privilege_fields,
59 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
60 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
61 bool _verified = false);
66 LogicalRegion _handle, ProjectionID _proj,
67 const std::set<FieldID>& privilege_fields,
68 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
69 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
70 bool _verified = false);
76 LogicalRegion _handle, const std::set<FieldID>& privilege_fields,
77 const std::vector<FieldID>& instance_fields, ReductionOpID op,
78 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
79 bool _verified = false);
84 LogicalPartition pid, ProjectionID _proj,
85 const std::set<FieldID>& privilege_fields,
86 const std::vector<FieldID>& instance_fields, ReductionOpID op,
87 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
88 bool _verified = false);
93 LogicalRegion _handle, ProjectionID _proj,
94 const std::set<FieldID>& privilege_fields,
95 const std::vector<FieldID>& instance_fields, ReductionOpID op,
96 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
97 bool _verified = false);
98 public:
99 // Analogous constructors without the privilege and instance fields
101 LogicalRegion _handle, PrivilegeMode _priv, CoherenceProperty _prop,
102 LogicalRegion _parent, MappingTagID _tag = 0, bool _verified = false);
104 LogicalPartition pid, ProjectionID _proj, PrivilegeMode _priv,
105 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
106 bool _verified = false);
108 LogicalRegion _handle, ProjectionID _proj, PrivilegeMode _priv,
109 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
110 bool _verified = false);
112 LogicalRegion _handle, ReductionOpID op, CoherenceProperty _prop,
113 LogicalRegion _parent, MappingTagID _tag = 0, bool _verified = false);
115 LogicalPartition pid, ProjectionID _proj, ReductionOpID op,
116 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
117 bool _verified = false);
119 LogicalRegion _handle, ProjectionID _proj, ReductionOpID op,
120 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
121 bool _verified = false);
122 public:
124 RegionRequirement(RegionRequirement&& rhs) noexcept;
125 ~RegionRequirement(void);
126 RegionRequirement& operator=(const RegionRequirement& req);
127 RegionRequirement& operator=(RegionRequirement&& rhs) noexcept;
128 public:
129 bool operator==(const RegionRequirement& req) const;
130 bool operator<(const RegionRequirement& req) const;
131 public:
137 inline RegionRequirement& add_field(FieldID fid, bool instance = true);
138 inline RegionRequirement& add_fields(
139 const std::vector<FieldID>& fids, bool instance = true);
140
141 inline RegionRequirement& add_flags(RegionFlags new_flags);
142 public:
143 inline bool is_verified(void) const
144 {
145 return (flags & LEGION_VERIFIED_FLAG);
146 }
147 inline bool is_no_access(void) const
148 {
149 return (flags & LEGION_NO_ACCESS_FLAG);
150 }
151 inline bool is_restricted(void) const
152 {
153 return (flags & LEGION_RESTRICTED_FLAG);
154 }
155 LEGION_DEPRECATED("Premapping regions is no longer supported.")
156 inline bool must_premap(void) const { return false; }
157 public:
158 const void* get_projection_args(size_t* size) const;
159 void set_projection_args(const void* args, size_t size, bool own = false);
160 public:
161 bool has_field_privilege(FieldID fid) const;
162 public:
163 // Fields used for controlling task launches
166 std::set<FieldID> privilege_fields;
167 std::vector<FieldID> instance_fields;
168 PrivilegeMode privilege;
169 CoherenceProperty prop;
171 ReductionOpID redop;
172 MappingTagID tag;
173 RegionFlags flags;
174 public:
175 ProjectionType handle_type;
176 ProjectionID projection;
177 public:
180 };
181
251 public:
252 OutputRequirement(bool bounded = false);
255 FieldSpace field_space, const std::set<FieldID>& fields, int dim = 1,
256 bool global_indexing = false);
257 public:
259 ~OutputRequirement(void);
260 OutputRequirement& operator=(const RegionRequirement& req);
261 OutputRequirement& operator=(const OutputRequirement& req);
262 public:
263 bool operator==(const OutputRequirement& req) const;
264 bool operator<(const OutputRequirement& req) const;
265 public:
266 template<int DIM, typename COORD_T>
267 void set_type_tag();
268 // Specifies a projection functor id for this requirement.
269 // For a projection output requirement, a color space must be specified.
270 // The projection functor must be a bijective mapping from the launch
271 // domain to the color space. This implies that the launch domain's
272 // volume must be the same as the color space's.
273 void set_projection(ProjectionID projection, IndexSpace color_space);
274 public:
275 TypeTag type_tag;
280 };
281
290 public:
291 IndexSpace handle;
292 AllocateMode privilege;
293 IndexSpace parent;
294 bool verified;
295 public:
298 IndexSpace _handle, AllocateMode _priv, IndexSpace _parent,
299 bool _verified = false);
300 public:
301 bool operator<(const IndexSpaceRequirement& req) const;
302 bool operator==(const IndexSpaceRequirement& req) const;
303 };
304
317 public:
318 FieldSpace handle;
319 AllocateMode privilege;
320 bool verified;
321 public:
324 FieldSpace _handle, AllocateMode _priv, bool _verified = false);
325 public:
326 bool operator<(const FieldSpaceRequirement& req) const;
327 bool operator==(const FieldSpaceRequirement& req) const;
328 };
329
330} // namespace Legion
331
332#include "legion/api/requirements.inl"
333
334#endif // __LEGION_REQUIREMENTS_H__
Definition data.h:152
Definition data.h:35
Definition data.h:260
Definition data.h:189
Definition accessors.h:29
Definition requirements.h:316
Definition requirements.h:289
Definition requirements.h:250
IndexSpace color_space
Definition requirements.h:279
FieldSpace field_space
Definition requirements.h:276
bool bounded_requirement
Definition requirements.h:278
bool global_indexing
Definition requirements.h:277
Definition requirements.h:42
ProjectionType handle_type
Definition requirements.h:175
std::set< FieldID > privilege_fields
Definition requirements.h:166
RegionRequirement(LogicalPartition pid, ProjectionID _proj, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, PrivilegeMode _priv, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
RegionRequirement(LogicalRegion _handle, ProjectionID _proj, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, PrivilegeMode _priv, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
ProjectionID projection
Definition requirements.h:176
LogicalRegion parent
Definition requirements.h:170
void * projection_args
Definition requirements.h:178
std::vector< FieldID > instance_fields
Definition requirements.h:167
LogicalPartition partition
Definition requirements.h:165
RegionRequirement & add_field(FieldID fid, bool instance=true)
MappingTagID tag
Definition requirements.h:172
CoherenceProperty prop
Definition requirements.h:169
ReductionOpID redop
Definition requirements.h:171
RegionRequirement(LogicalRegion _handle, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, ReductionOpID op, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
RegionRequirement(LogicalPartition pid, ProjectionID _proj, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, ReductionOpID op, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
PrivilegeMode privilege
Definition requirements.h:168
RegionRequirement(LogicalRegion _handle, ProjectionID _proj, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, ReductionOpID op, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
size_t projection_args_size
Definition requirements.h:179
RegionFlags flags
Definition requirements.h:173
RegionRequirement(LogicalRegion _handle, const std::set< FieldID > &privilege_fields, const std::vector< FieldID > &instance_fields, PrivilegeMode _priv, CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag=0, bool _verified=false)
LogicalRegion region
Definition requirements.h:164