Legion Runtime
Loading...
Searching...
No Matches
requirements.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_REQUIREMENTS_H__
17#define __LEGION_REQUIREMENTS_H__
18
19#include "legion/api/data.h"
20
21namespace Legion {
22
38 public:
44 LogicalRegion _handle, const std::set<FieldID>& privilege_fields,
45 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
46 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
47 bool _verified = false);
52 LogicalPartition pid, ProjectionID _proj,
53 const std::set<FieldID>& privilege_fields,
54 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
55 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
56 bool _verified = false);
61 LogicalRegion _handle, ProjectionID _proj,
62 const std::set<FieldID>& privilege_fields,
63 const std::vector<FieldID>& instance_fields, PrivilegeMode _priv,
64 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
65 bool _verified = false);
71 LogicalRegion _handle, const std::set<FieldID>& privilege_fields,
72 const std::vector<FieldID>& instance_fields, ReductionOpID op,
73 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
74 bool _verified = false);
79 LogicalPartition pid, ProjectionID _proj,
80 const std::set<FieldID>& privilege_fields,
81 const std::vector<FieldID>& instance_fields, ReductionOpID op,
82 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
83 bool _verified = false);
88 LogicalRegion _handle, ProjectionID _proj,
89 const std::set<FieldID>& privilege_fields,
90 const std::vector<FieldID>& instance_fields, ReductionOpID op,
91 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
92 bool _verified = false);
93 public:
94 // Analogous constructors without the privilege and instance fields
96 LogicalRegion _handle, PrivilegeMode _priv, CoherenceProperty _prop,
97 LogicalRegion _parent, MappingTagID _tag = 0, bool _verified = false);
99 LogicalPartition pid, ProjectionID _proj, PrivilegeMode _priv,
100 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
101 bool _verified = false);
103 LogicalRegion _handle, ProjectionID _proj, PrivilegeMode _priv,
104 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
105 bool _verified = false);
107 LogicalRegion _handle, ReductionOpID op, CoherenceProperty _prop,
108 LogicalRegion _parent, MappingTagID _tag = 0, bool _verified = false);
110 LogicalPartition pid, ProjectionID _proj, ReductionOpID op,
111 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
112 bool _verified = false);
114 LogicalRegion _handle, ProjectionID _proj, ReductionOpID op,
115 CoherenceProperty _prop, LogicalRegion _parent, MappingTagID _tag = 0,
116 bool _verified = false);
117 public:
119 RegionRequirement(RegionRequirement&& rhs) noexcept;
120 ~RegionRequirement(void);
121 RegionRequirement& operator=(const RegionRequirement& req);
122 RegionRequirement& operator=(RegionRequirement&& rhs) noexcept;
123 public:
124 bool operator==(const RegionRequirement& req) const;
125 bool operator<(const RegionRequirement& req) const;
126 public:
132 inline RegionRequirement& add_field(FieldID fid, bool instance = true);
133 inline RegionRequirement& add_fields(
134 const std::vector<FieldID>& fids, bool instance = true);
135
136 inline RegionRequirement& add_flags(RegionFlags new_flags);
137 public:
138 inline bool is_verified(void) const
139 {
140 return (flags & LEGION_VERIFIED_FLAG);
141 }
142 inline bool is_no_access(void) const
143 {
144 return (flags & LEGION_NO_ACCESS_FLAG);
145 }
146 inline bool is_restricted(void) const
147 {
148 return (flags & LEGION_RESTRICTED_FLAG);
149 }
150 LEGION_DEPRECATED("Premapping regions is no longer supported.")
151 inline bool must_premap(void) const { return false; }
152 public:
153 const void* get_projection_args(size_t* size) const;
154 void set_projection_args(const void* args, size_t size, bool own = false);
155 public:
156 bool has_field_privilege(FieldID fid) const;
157 public:
158 // Fields used for controlling task launches
161 std::set<FieldID> privilege_fields;
162 std::vector<FieldID> instance_fields;
163 PrivilegeMode privilege;
164 CoherenceProperty prop;
166 ReductionOpID redop;
167 MappingTagID tag;
168 RegionFlags flags;
169 public:
170 ProjectionType handle_type;
171 ProjectionID projection;
172 public:
175 };
176
246 public:
247 OutputRequirement(bool bounded = false);
250 FieldSpace field_space, const std::set<FieldID>& fields, int dim = 1,
251 bool global_indexing = false);
252 public:
254 ~OutputRequirement(void);
255 OutputRequirement& operator=(const RegionRequirement& req);
256 OutputRequirement& operator=(const OutputRequirement& req);
257 public:
258 bool operator==(const OutputRequirement& req) const;
259 bool operator<(const OutputRequirement& req) const;
260 public:
261 template<int DIM, typename COORD_T>
262 void set_type_tag();
263 // Specifies a projection functor id for this requirement.
264 // For a projection output requirement, a color space must be specified.
265 // The projection functor must be a bijective mapping from the launch
266 // domain to the color space. This implies that the launch domain's
267 // volume must be the same as the color space's.
268 void set_projection(ProjectionID projection, IndexSpace color_space);
269 public:
270 TypeTag type_tag;
275 };
276
285 public:
286 IndexSpace handle;
287 AllocateMode privilege;
288 IndexSpace parent;
289 bool verified;
290 public:
293 IndexSpace _handle, AllocateMode _priv, IndexSpace _parent,
294 bool _verified = false);
295 public:
296 bool operator<(const IndexSpaceRequirement& req) const;
297 bool operator==(const IndexSpaceRequirement& req) const;
298 };
299
312 public:
313 FieldSpace handle;
314 AllocateMode privilege;
315 bool verified;
316 public:
319 FieldSpace _handle, AllocateMode _priv, bool _verified = false);
320 public:
321 bool operator<(const FieldSpaceRequirement& req) const;
322 bool operator==(const FieldSpaceRequirement& req) const;
323 };
324
325} // namespace Legion
326
327#include "legion/api/requirements.inl"
328
329#endif // __LEGION_REQUIREMENTS_H__
Definition data.h:147
Definition data.h:30
Definition data.h:255
Definition data.h:184
Definition requirements.h:311
Definition requirements.h:284
Definition requirements.h:245
IndexSpace color_space
Definition requirements.h:274
FieldSpace field_space
Definition requirements.h:271
bool bounded_requirement
Definition requirements.h:273
bool global_indexing
Definition requirements.h:272
Definition requirements.h:37
ProjectionType handle_type
Definition requirements.h:170
std::set< FieldID > privilege_fields
Definition requirements.h:161
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:171
LogicalRegion parent
Definition requirements.h:165
void * projection_args
Definition requirements.h:173
std::vector< FieldID > instance_fields
Definition requirements.h:162
LogicalPartition partition
Definition requirements.h:160
RegionRequirement & add_field(FieldID fid, bool instance=true)
MappingTagID tag
Definition requirements.h:167
CoherenceProperty prop
Definition requirements.h:164
ReductionOpID redop
Definition requirements.h:166
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:163
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:174
RegionFlags flags
Definition requirements.h:168
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:159