Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
indexspace.h
Go to the documentation of this file.
1/*
2 * Copyright 2025 Stanford University, NVIDIA Corporation
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18// index spaces for Realm
19
20#ifndef REALM_INDEXSPACE_H
21#define REALM_INDEXSPACE_H
22
23#include "realm/event.h"
24#include "realm/memory.h"
25#include "realm/point.h"
26#define REALM_SKIP_INLINES
27#include "realm/instance.h"
28#undef REALM_SKIP_INLINES
29
30#include "realm/realm_c.h"
31#include "realm/realm_config.h"
32#include "realm/sparsity.h"
34
35#include "realm/custom_serdez.h"
36
42namespace Realm {
43 // NOTE: all these interfaces are templated, which means partitions.cc is going
44 // to have to somehow know which ones to instantiate - this is controlled by the
45 // following type lists, using a bunch of helper stuff from dynamic_templates.h
46
50
52 class CodeDescriptor;
53
60 public:
65 CopySrcDstField &set_field(RegionInstance _inst, FieldID _field_id, size_t _size,
66 size_t _subfield_offset = 0);
67 CopySrcDstField &set_indirect(int _indirect_index, FieldID _field_id, size_t _size,
68 size_t _subfield_offset = 0);
69 CopySrcDstField &set_redop(ReductionOpID _redop_id, bool _is_fold,
70 bool exclusive = false);
72 CopySrcDstField &set_fill(const void *_data, size_t _size);
73 template <typename T>
75
76 public:
79 size_t size;
86 static const size_t MAX_DIRECT_SIZE = 8;
87 union {
88 char direct[8];
89 void *indirect;
91 };
92
93 std::ostream &operator<<(std::ostream &os, const CopySrcDstField &sd);
94
95 template <int N, typename T = int>
96 struct IndexSpaceIterator;
97 template <int N, typename T = int>
98 class SparsityMap;
99
106 template <typename IS, typename FT>
112
120 template <int N, typename T = int>
122 public:
123 TranslationTransform(void) = default;
125
133 template <typename T2>
135
137 };
138
146 template <int M, int N, typename T = int>
148 public:
149 AffineTransform(void) = default;
150 AffineTransform(const Realm::Matrix<M, N, T> &_transform, const Point<M, T> &_offset);
151
159 template <typename T2>
161
164 };
165
175 template <int N, typename T, int N2, typename T2>
177 public:
178 StructuredTransform(void) = default;
181
183 {
184 NONE = 0,
185 AFFINE = 1,
186 TRANSLATION = 2,
187 };
188
197
198 // protected:
201 StructuredTransformType type = StructuredTransformType::NONE;
202 };
203
213 template <int N, typename T, int N2, typename T2>
215 public:
216 DomainTransform(void) = default;
220 &_field_data);
222 &_field_data);
223
225 {
226 NONE = 0,
227 STRUCTURED = 1,
228 UNSTRUCTURED_PTR = 2,
229 UNSTRUCTURED_RANGE = 3,
230 };
231
232 // protected:
234 std::vector<FieldDataDescriptor<IndexSpace<N2, T2>, Point<N, T>>> ptr_data;
235 std::vector<FieldDataDescriptor<IndexSpace<N2, T2>, Rect<N, T>>> range_data;
236 DomainTransformType type = DomainTransformType::NONE;
237 };
238
239 class IndirectionInfo;
240
249 template <int N, typename T = int>
251 public:
252 class Base {
253 public:
254 virtual ~Base(void) {}
256 virtual IndirectionInfo *create_info(const IndexSpace<N, T> &is) const = 0;
257 };
258
259 template <int N2, typename T2 = int>
260 class Affine : public CopyIndirection<N, T>::Base {
261 public:
262 virtual ~Affine(void) {}
263
264 // Defines the next indirection to avoid a 3-way templating.
266
271 std::vector<IndexSpace<N2, T2>> spaces;
272 std::vector<RegionInstance> insts;
273
276 };
277
278 template <int N2, typename T2 = int>
279 class Unstructured : public CopyIndirection<N, T>::Base {
280 public:
283 const std::vector<IndexSpace<N2, T2>> &_spaces,
284 const std::vector<RegionInstance> &_insts, FieldID _field_id,
285 size_t _subfield_offset = 0, bool _is_ranges = false,
286 bool _oor_possible = false, bool _aliasing_possible = false)
287 : inst(_ind_inst)
288 , spaces(_spaces)
289 , insts(_insts)
290 , field_id(_field_id)
291 , subfield_offset(_subfield_offset)
292 , is_ranges(_is_ranges)
293 , oor_possible(_oor_possible)
294 , aliasing_possible(_aliasing_possible)
295 {}
296 virtual ~Unstructured(void) {}
297
299
301 std::vector<IndexSpace<N2, T2>> spaces;
302 std::vector<RegionInstance> insts;
306 bool oor_possible; // can any pointers fall outside all the target spaces?
307 bool aliasing_possible; // can multiple pointers go to the same element?
308
311 };
312 };
313
322 template <int N, typename T>
326
328 IndexSpace(void); // results in an empty index space
330 IndexSpace(const Rect<N, T> &_bounds);
331 IndexSpace(const Rect<N, T> &_bounds, SparsityMap<N, T> _sparsity);
332
334
341 explicit IndexSpace(const std::vector<Point<N, T>> &points, bool disjoint = false);
342
343 explicit IndexSpace(const std::vector<Rect<N, T>> &rects, bool disjoint = false);
345
347
354
356
361 void destroy(Event wait_on = Event::NO_EVENT);
363
365
371 bool empty(void) const;
373
375
381 bool dense(void) const;
383
385
397 Event make_valid(bool precise = true) const;
398
399 bool is_valid(bool precise = true) const;
401
403
409 IndexSpace<N, T> tighten(bool precise = true) const;
411
413
419 bool contains(const Point<N, T> &p) const;
420 bool contains_all(const Rect<N, T> &r) const;
421 bool contains_any(const Rect<N, T> &r) const;
423
424 bool overlaps(const IndexSpace<N, T> &other) const;
425
427
432 size_t volume(void) const;
434
436
446 bool contains_approx(const Point<N, T> &p) const;
447 bool contains_all_approx(const Rect<N, T> &r) const;
448 bool contains_any_approx(const Rect<N, T> &r) const;
450
451 bool overlaps_approx(const IndexSpace<N, T> &other) const;
452
454
459 size_t volume_approx(void) const;
461
463
512 bool compute_covering(size_t max_rects, int max_overhead,
513 std::vector<Rect<N, T>> &covering) const;
515
517
528 template <typename LAMBDA>
530 template <typename LAMBDA>
531 REALM_PUBLIC_API void foreach_subrect(LAMBDA lambda, const Rect<N, T> &restriction);
533
534 // instance creation
535#if 0
536 RegionInstance create_instance(Memory memory,
537 const std::vector<size_t>& field_sizes,
538 size_t block_size,
539 const ProfilingRequestSet& reqs) const;
540#endif
541
543
560 Event fill(const std::vector<CopySrcDstField> &dsts,
561 const ProfilingRequestSet &requests, const void *fill_value,
562 size_t fill_value_size, Event wait_on = Event::NO_EVENT,
563 int priority = 0) const;
565
567
580 Event copy(const std::vector<CopySrcDstField> &srcs,
581 const std::vector<CopySrcDstField> &dsts,
582 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
583 int priority = 0) const;
585
587
600 Event copy(std::vector<CopySrcDstField> &&srcs, std::vector<CopySrcDstField> &&dsts,
601 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
602 int priority = 0) const;
604
606
621 Event copy(const std::vector<CopySrcDstField> &srcs,
622 const std::vector<CopySrcDstField> &dsts,
623 const std::vector<const typename CopyIndirection<N, T>::Base *> &indirects,
624 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
625 int priority = 0) const;
627
629
643 Event copy(std::vector<CopySrcDstField> &&srcs, std::vector<CopySrcDstField> &&dsts,
644 const std::vector<const typename CopyIndirection<N, T>::Base *> &indirects,
645 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
646 int priority = 0) const;
648
649 // Partitioning operations
650
652
665 Event create_equal_subspace(size_t count, size_t granularity, unsigned index,
666 IndexSpace<N, T> &subspace,
667 const ProfilingRequestSet &reqs,
668 Event wait_on = Event::NO_EVENT) const;
669
671 Event create_equal_subspaces(size_t count, size_t granularity,
672 std::vector<IndexSpace<N, T>> &subspaces,
673 const ProfilingRequestSet &reqs,
674 Event wait_on = Event::NO_EVENT) const;
676
678
691 Event create_weighted_subspaces(size_t count, size_t granularity,
692 const std::vector<int> &weights,
693 std::vector<IndexSpace<N, T>> &subspaces,
694 const ProfilingRequestSet &reqs,
695 Event wait_on = Event::NO_EVENT) const;
696
698 Event create_weighted_subspaces(size_t count, size_t granularity,
699 const std::vector<size_t> &weights,
700 std::vector<IndexSpace<N, T>> &subspaces,
701 const ProfilingRequestSet &reqs,
702 Event wait_on = Event::NO_EVENT) const;
704
705 // Field-based partitioning operations
706
707 template <typename FT>
709 const std::vector<FieldDataDescriptor<IndexSpace<N, T>, FT>> &field_data,
710 FT color, IndexSpace<N, T> &subspace, const ProfilingRequestSet &reqs,
711 Event wait_on = Event::NO_EVENT) const;
712
713 template <typename FT>
715 const std::vector<FieldDataDescriptor<IndexSpace<N, T>, FT>> &field_data,
716 const std::vector<FT> &colors, std::vector<IndexSpace<N, T>> &subspaces,
717 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
718
720
734 template <typename FT, typename FT2>
736 const std::vector<FieldDataDescriptor<IndexSpace<N, T>, FT>> &field_data,
737 const CodeDescriptor &codedesc, FT2 color, IndexSpace<N, T> &subspace,
738 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
740
741 template <typename FT, typename FT2>
743 const std::vector<FieldDataDescriptor<IndexSpace<N, T>, FT>> &field_data,
744 const CodeDescriptor &codedesc, const std::vector<FT2> &colors,
745 std::vector<IndexSpace<N, T>> &subspaces, const ProfilingRequestSet &reqs,
746 Event wait_on = Event::NO_EVENT) const;
747
749
765 template <int N2, typename T2, typename TRANSFORM>
767 const TRANSFORM &transform, const IndexSpace<N2, T2> &source,
768 const IndexSpace<N, T> &image, const ProfilingRequestSet &reqs,
769 Event wait_on = Event::NO_EVENT) const;
770
771 template <int N2, typename T2, typename TRANSFORM>
773 const TRANSFORM &transform, const std::vector<IndexSpace<N2, T2>> &sources,
774 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
775 Event wait_on = Event::NO_EVENT) const;
776
777 template <int N2, typename T2>
779 const DomainTransform<N, T, N2, T2> &domain_transform,
780 const std::vector<IndexSpace<N2, T2>> &sources,
781 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
782 Event wait_on = Event::NO_EVENT) const;
784
786
801 template <int N2, typename T2>
804 &field_data,
805 const IndexSpace<N2, T2> &source, IndexSpace<N, T> &image,
806 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
807
808 template <int N2, typename T2>
811 &field_data,
812 const std::vector<IndexSpace<N2, T2>> &sources,
813 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
814 Event wait_on = Event::NO_EVENT) const;
815
816 // range versions
817 template <int N2, typename T2>
820 &field_data,
821 const IndexSpace<N2, T2> &source, IndexSpace<N, T> &image,
822 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
823
824 template <int N2, typename T2>
827 &field_data,
828 const std::vector<IndexSpace<N2, T2>> &sources,
829 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
830 Event wait_on = Event::NO_EVENT) const;
832
834
849 template <int N2, typename T2>
852 &field_data,
853 const std::vector<IndexSpace<N2, T2>> &sources,
854 const std::vector<IndexSpace<N, T>> &diff_rhs,
855 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
856 Event wait_on = Event::NO_EVENT) const;
857
858 template <int N2, typename T2>
860 const DomainTransform<N, T, N2, T2> &domain_transform,
861 const std::vector<IndexSpace<N2, T2>> &sources,
862 const std::vector<IndexSpace<N, T>> &diff_rhs,
863 std::vector<IndexSpace<N, T>> &images, const ProfilingRequestSet &reqs,
864 Event wait_on = Event::NO_EVENT) const;
866
868
883 template <int N2, typename T2, typename TRANSFORM>
885 const TRANSFORM &transform, const IndexSpace<N2, T2> &target,
886 IndexSpace<N, T> &preimage, const ProfilingRequestSet &reqs,
887 Event wait_on = Event::NO_EVENT) const;
888
889 template <int N2, typename T2, typename TRANSFORM>
891 const TRANSFORM &transform, const std::vector<IndexSpace<N2, T2>> &targets,
892 std::vector<IndexSpace<N, T>> &preimages, const ProfilingRequestSet &reqs,
893 Event wait_on = Event::NO_EVENT) const;
894
895 template <int N2, typename T2>
897 const DomainTransform<N2, T2, N, T> &domain_transform,
898 const std::vector<IndexSpace<N2, T2>> &targets,
899 std::vector<IndexSpace<N, T>> &preimages, const ProfilingRequestSet &reqs,
900 Event wait_on = Event::NO_EVENT) const;
902
904
918 template <int N2, typename T2>
921 &field_data,
922 const IndexSpace<N2, T2> &target, IndexSpace<N, T> &preimage,
923 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
924
925 template <int N2, typename T2>
928 &field_data,
929 const std::vector<IndexSpace<N2, T2>> &targets,
930 std::vector<IndexSpace<N, T>> &preimages, const ProfilingRequestSet &reqs,
931 Event wait_on = Event::NO_EVENT) const;
932 // range versions
933 template <int N2, typename T2>
936 &field_data,
937 const IndexSpace<N2, T2> &target, IndexSpace<N, T> &preimage,
938 const ProfilingRequestSet &reqs, Event wait_on = Event::NO_EVENT) const;
939
940 template <int N2, typename T2>
943 &field_data,
944 const std::vector<IndexSpace<N2, T2>> &targets,
945 std::vector<IndexSpace<N, T>> &preimages, const ProfilingRequestSet &reqs,
946 Event wait_on = Event::NO_EVENT) const;
948
950
959 template <int N2, typename T2>
962 &field_data,
963 const IndexSpace<N2, T2> &range, const ProfilingRequestSet &reqs,
964 Event wait_on = Event::NO_EVENT) const;
966
967 // set operations
968
969 // three basic operations (union, intersection, difference) are provided in 4 forms:
970 // IS op IS -> result
971 // IS[] op IS[] -> result[] (zip over two inputs, which must be same length)
972 // IS op IS[] -> result[] (first input applied to each element of second array)
973 // IS[] op IS -> result[] (each element of first array applied to second input)
974
976
988 IndexSpace<N, T> &result, const ProfilingRequestSet &reqs,
989 Event wait_on = Event::NO_EVENT);
990
992 static Event compute_unions(const std::vector<IndexSpace<N, T>> &lhss,
993 const std::vector<IndexSpace<N, T>> &rhss,
994 std::vector<IndexSpace<N, T>> &results,
995 const ProfilingRequestSet &reqs,
996 Event wait_on = Event::NO_EVENT);
997
1000 const std::vector<IndexSpace<N, T>> &rhss,
1001 std::vector<IndexSpace<N, T>> &results,
1002 const ProfilingRequestSet &reqs,
1003 Event wait_on = Event::NO_EVENT);
1004
1006 static Event compute_unions(const std::vector<IndexSpace<N, T>> &lhss,
1007 const IndexSpace<N, T> &rhs,
1008 std::vector<IndexSpace<N, T>> &results,
1009 const ProfilingRequestSet &reqs,
1010 Event wait_on = Event::NO_EVENT);
1012
1014
1025 const IndexSpace<N, T> &rhs,
1026 IndexSpace<N, T> &result,
1027 const ProfilingRequestSet &reqs,
1028 Event wait_on = Event::NO_EVENT);
1029
1031 static Event compute_intersections(const std::vector<IndexSpace<N, T>> &lhss,
1032 const std::vector<IndexSpace<N, T>> &rhss,
1033 std::vector<IndexSpace<N, T>> &results,
1034 const ProfilingRequestSet &reqs,
1035 Event wait_on = Event::NO_EVENT);
1036
1039 const std::vector<IndexSpace<N, T>> &rhss,
1040 std::vector<IndexSpace<N, T>> &results,
1041 const ProfilingRequestSet &reqs,
1042 Event wait_on = Event::NO_EVENT);
1043
1045 static Event compute_intersections(const std::vector<IndexSpace<N, T>> &lhss,
1046 const IndexSpace<N, T> &rhs,
1047 std::vector<IndexSpace<N, T>> &results,
1048 const ProfilingRequestSet &reqs,
1049 Event wait_on = Event::NO_EVENT);
1051
1053
1064 const IndexSpace<N, T> &rhs, IndexSpace<N, T> &result,
1065 const ProfilingRequestSet &reqs,
1066 Event wait_on = Event::NO_EVENT);
1067
1069 static Event compute_differences(const std::vector<IndexSpace<N, T>> &lhss,
1070 const std::vector<IndexSpace<N, T>> &rhss,
1071 std::vector<IndexSpace<N, T>> &results,
1072 const ProfilingRequestSet &reqs,
1073 Event wait_on = Event::NO_EVENT);
1074
1077 const std::vector<IndexSpace<N, T>> &rhss,
1078 std::vector<IndexSpace<N, T>> &results,
1079 const ProfilingRequestSet &reqs,
1080 Event wait_on = Event::NO_EVENT);
1081
1083 static Event compute_differences(const std::vector<IndexSpace<N, T>> &lhss,
1084 const IndexSpace<N, T> &rhs,
1085 std::vector<IndexSpace<N, T>> &results,
1086 const ProfilingRequestSet &reqs,
1087 Event wait_on = Event::NO_EVENT);
1089
1090 // set reduction operations (union and intersection)
1091
1093 static Event compute_union(const std::vector<IndexSpace<N, T>> &subspaces,
1094 IndexSpace<N, T> &result, const ProfilingRequestSet &reqs,
1095 Event wait_on = Event::NO_EVENT);
1096
1098 static Event compute_intersection(const std::vector<IndexSpace<N, T>> &subspaces,
1099 IndexSpace<N, T> &result,
1100 const ProfilingRequestSet &reqs,
1101 Event wait_on = Event::NO_EVENT);
1102 };
1103
1104 template <int N, typename T>
1105 REALM_PUBLIC_API std::ostream &operator<<(std::ostream &os, const IndexSpace<N, T> &p);
1106
1108
1116 public:
1119
1120 template <int N, typename T>
1122 template <int N, typename T>
1124
1126
1128
1129 template <int N, typename T>
1131 template <int N, typename T>
1133
1134 void destroy(Event wait_on = Event::NO_EVENT);
1135
1136 template <int N, typename T>
1138
1139 // only IndexSpace method exposed directly is copy
1140 Event copy(const std::vector<CopySrcDstField> &srcs,
1141 const std::vector<CopySrcDstField> &dsts,
1142 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
1143 int priority = 0) const;
1144
1145 template <int N, typename T>
1146 Event copy(const std::vector<CopySrcDstField> &srcs,
1147 const std::vector<CopySrcDstField> &dsts,
1148 const std::vector<const typename CopyIndirection<N, T>::Base *> &indirects,
1149 const ProfilingRequestSet &requests, Event wait_on = Event::NO_EVENT,
1150 int priority = 0) const;
1151
1152 // "public" but not useful to application code
1154
1155 protected:
1156 // would like to use sizeof(IndexSpace<REALM_MAX_DIM, size_t>) here,
1157 // but that requires the specializations that are defined in the
1158 // include of indexspace.inl below...
1159 static constexpr size_t MAX_TYPE_SIZE = DIMTYPES::MaxSize::value;
1160 static constexpr size_t STORAGE_BYTES = (2 * REALM_MAX_DIM + 2) * MAX_TYPE_SIZE;
1161 typedef char Storage_unaligned[STORAGE_BYTES];
1162 REALM_ALIGNED_TYPE_SAMEAS(Storage_aligned, Storage_unaligned,
1164 Storage_aligned raw_storage;
1165 };
1166
1167 template <int N, typename T>
1169
1180 protected:
1181 // cannot be created directly
1182 LinearizedIndexSpaceIntfc(int _dim, int _idxtype);
1183
1184 public:
1186
1187 virtual LinearizedIndexSpaceIntfc *clone(void) const = 0;
1188
1189 // returns the size of the linearized space
1190 virtual size_t size(void) const = 0;
1191
1192 // check and conversion routines to get a dimension-aware intermediate
1193 template <int N, typename T>
1194 bool check_dim(void) const;
1195 template <int N, typename T>
1197 template <int N, typename T>
1199
1201 };
1202
1203 template <int N, typename T>
1205 protected:
1206 // still can't be created directly
1208
1209 public:
1210 // generic way to linearize a point
1211 virtual size_t linearize(const Point<N, T> &p) const = 0;
1212
1214 };
1215
1222 template <int N, typename T>
1224 public:
1225 // "fortran order" has the smallest stride in the first dimension
1227 bool fortran_order = true);
1228
1229 virtual LinearizedIndexSpaceIntfc *clone(void) const;
1230
1231 virtual size_t size(void) const;
1232
1233 virtual size_t linearize(const Point<N, T> &p) const;
1234
1238 };
1239
1240 template <int N, typename T>
1242
1248 template <int N, typename T>
1253 bool valid{false};
1254 // for iterating over SparsityMap's
1256 size_t cur_entry{0};
1257
1260 IndexSpaceIterator(const IndexSpace<N, T> &_space, const Rect<N, T> &_restrict);
1261 IndexSpaceIterator(const Rect<N, T> &_boudns, const Rect<N, T> &_restrict,
1263
1264 void reset(const IndexSpace<N, T> &_space);
1265 void reset(const IndexSpace<N, T> &_space, const Rect<N, T> &_restrict);
1266 void reset(const Rect<N, T> &_bounds, const Rect<N, T> &_restrict,
1268 // steps to the next subrect, returning true if a next subrect exists
1269 bool step(void);
1270
1271 private:
1272 void reset_sparse(SparsityMapPublicImpl<N, T> *_s_impl);
1273 };
1274
1275}; // namespace Realm
1276
1277// specializations of std::less<T> for IndexSpace<N,T> allow
1278// them to be used in STL containers
1279namespace std {
1280 template <int N, typename T>
1281 struct less<Realm::IndexSpace<N, T>> {
1282 bool operator()(const Realm::IndexSpace<N, T> &is1,
1283 const Realm::IndexSpace<N, T> &is2) const;
1284 };
1285}; // namespace std
1286
1287#include "realm/indexspace.inl"
1288
1289#endif // ifndef REALM_INDEXSPACE_H
Definition indexspace.h:1223
virtual size_t size(void) const
AffineLinearizedIndexSpace(const IndexSpace< N, T > &_indexspace, bool fortran_order=true)
virtual size_t linearize(const Point< N, T > &p) const
virtual LinearizedIndexSpaceIntfc * clone(void) const
size_t offset
Definition indexspace.h:1235
size_t volume
Definition indexspace.h:1235
Rect< N, T > dbg_bounds
Definition indexspace.h:1237
Point< N, ptrdiff_t > strides
Definition indexspace.h:1236
Definition indexspace.h:147
AffineTransform(const Realm::Matrix< M, N, T > &_transform, const Point< M, T > &_offset)
Realm::Point< M, T > operator[](const Realm::Point< N, T2 > &point) const
Realm::Matrix< M, N, T > transform
Definition indexspace.h:162
AffineTransform(void)=default
Point< M, T > offset
Definition indexspace.h:163
Definition codedesc.h:249
Definition indexspace.h:260
Point< N2, T2 > offset_hi
Definition indexspace.h:268
virtual ~Affine(void)
Definition indexspace.h:262
virtual REALM_INTERNAL_API_EXTERNAL_LINKAGE IndirectionInfo * create_info(const IndexSpace< N, T > &is) const
Matrix< N, N2, T2 > transform
Definition indexspace.h:267
CopyIndirection< N2, T2 >::Base * next_indirection
Definition indexspace.h:265
std::vector< IndexSpace< N2, T2 > > spaces
Definition indexspace.h:271
Rect< N2, T2 > wrap
Definition indexspace.h:270
Point< N2, T2 > divisor
Definition indexspace.h:269
std::vector< RegionInstance > insts
Definition indexspace.h:272
Definition indexspace.h:252
virtual ~Base(void)
Definition indexspace.h:254
virtual REALM_INTERNAL_API_EXTERNAL_LINKAGE IndirectionInfo * create_info(const IndexSpace< N, T > &is) const =0
Definition indexspace.h:279
FieldID field_id
Definition indexspace.h:303
virtual ~Unstructured(void)
Definition indexspace.h:296
CopyIndirection< N2, T2 >::Base * next_indirection
Definition indexspace.h:298
std::vector< RegionInstance > insts
Definition indexspace.h:302
bool aliasing_possible
Definition indexspace.h:307
bool is_ranges
Definition indexspace.h:305
std::vector< IndexSpace< N2, T2 > > spaces
Definition indexspace.h:301
Unstructured()
Definition indexspace.h:281
Unstructured(RegionInstance _ind_inst, const std::vector< IndexSpace< N2, T2 > > &_spaces, const std::vector< RegionInstance > &_insts, FieldID _field_id, size_t _subfield_offset=0, bool _is_ranges=false, bool _oor_possible=false, bool _aliasing_possible=false)
Definition indexspace.h:282
virtual REALM_INTERNAL_API_EXTERNAL_LINKAGE IndirectionInfo * create_info(const IndexSpace< N, T > &is) const
bool oor_possible
Definition indexspace.h:306
size_t subfield_offset
Definition indexspace.h:304
RegionInstance inst
Definition indexspace.h:300
Definition indexspace.h:250
Definition indexspace.h:214
DomainTransform(void)=default
DomainTransform(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Rect< N, T > > > &_field_data)
StructuredTransform< N, T, N2, T2 > structured_transform
Definition indexspace.h:233
std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Point< N, T > > > ptr_data
Definition indexspace.h:234
DomainTransform(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Point< N, T > > > &_field_data)
std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Rect< N, T > > > range_data
Definition indexspace.h:235
DomainTransform(const StructuredTransform< N, T, N2, T2 > &_transform)
DomainTransformType
Definition indexspace.h:225
Definition event.h:50
Definition idx_impl.h:27
Definition indexspace.h:1115
Event copy(const std::vector< CopySrcDstField > &srcs, const std::vector< CopySrcDstField > &dsts, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
const IndexSpace< N, T > & as_index_space() const
IndexSpaceGeneric & operator=(const IndexSpaceGeneric &copy_from)
IndexSpaceGenericImpl * impl
Definition indexspace.h:1153
IndexSpaceGeneric(const Rect< N, T > &copy_from)
IndexSpaceGeneric(const IndexSpace< N, T > &copy_from)
IndexSpaceGeneric(const IndexSpaceGeneric &copy_from)
void destroy(Event wait_on=Event::NO_EVENT)
Event copy(const std::vector< CopySrcDstField > &srcs, const std::vector< CopySrcDstField > &dsts, const std::vector< const typename CopyIndirection< N, T >::Base * > &indirects, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
Storage_aligned raw_storage
Definition indexspace.h:1164
IndexSpaceGeneric & operator=(const IndexSpace< N, T > &copy_from)
IndexSpaceGeneric & operator=(const Rect< N, T > &copy_from)
REALM_ALIGNED_TYPE_SAMEAS(Storage_aligned, Storage_unaligned, DIMTYPES::MaxSizeType< MAX_TYPE_SIZE >::TYPE)
Definition transfer.h:463
Definition indexspace.h:1179
LinearizedIndexSpaceIntfc(int _dim, int _idxtype)
virtual ~LinearizedIndexSpaceIntfc(void)
virtual size_t size(void) const =0
virtual LinearizedIndexSpaceIntfc * clone(void) const =0
const LinearizedIndexSpace< N, T > & as_dim(void) const
int idxtype
Definition indexspace.h:1200
LinearizedIndexSpace< N, T > & as_dim(void)
int dim
Definition indexspace.h:1200
Definition indexspace.h:1204
IndexSpace< N, T > indexspace
Definition indexspace.h:1213
virtual size_t linearize(const Point< N, T > &p) const =0
LinearizedIndexSpace(const IndexSpace< N, T > &_indexspace)
Definition memory.h:33
Definition profiling.h:363
Definition instance.h:66
Definition sparsity.h:171
Definition sparsity.h:65
Definition indexspace.h:176
StructuredTransform(const TranslationTransform< N, T2 > &_transform)
Point< N, T > operator[](const Point< N2, T > &point) const
Point< N, T2 > offset
Definition indexspace.h:200
StructuredTransform(const AffineTransform< N, N2, T2 > &_transform)
Realm::Matrix< N, N2, T2 > transform_matrix
Definition indexspace.h:199
StructuredTransform(void)=default
StructuredTransformType
Definition indexspace.h:183
Definition indexspace.h:121
Point< N, T > offset
Definition indexspace.h:136
TranslationTransform(void)=default
TranslationTransform(const Point< N, T > &_offset)
Realm::Point< N, T > operator[](const Realm::Point< N, T2 > &point) const
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
#define REALM_CUDA_HD
Definition compiler_support.h:95
#define REALM_PUBLIC_API
Definition compiler_support.h:217
Definition activemsg.h:38
realm_field_id_t FieldID
Definition instance.h:45
DynamicTemplates::TypeList< int, unsignedint, longlong >::TL DIMTYPES
Definition indexspace.h:48
int CustomSerdezID
Definition custom_serdez.h:148
DynamicTemplates::IntList< 1, REALM_MAX_DIM > DIMCOUNTS
Definition indexspace.h:47
DynamicTemplates::TypeList< int, bool >::TL FLDTYPES
Definition indexspace.h:49
::realm_reduction_op_id_t ReductionOpID
Definition event.h:38
std::ostream & operator<<(std::ostream &os, const DenseRectangleList< N, T > &drl)
Definition indexspace.h:1279
#define REALM_MAX_DIM
Definition realm_config.h:34
Definition indexspace.h:59
CopySrcDstField & set_indirect(int _indirect_index, FieldID _field_id, size_t _size, size_t _subfield_offset=0)
void * indirect
Definition indexspace.h:89
CopySrcDstField(const CopySrcDstField &copy_from)
CopySrcDstField & operator=(const CopySrcDstField &copy_from)
CopySrcDstField & set_redop(ReductionOpID _redop_id, bool _is_fold, bool exclusive=false)
bool red_fold
Definition indexspace.h:81
CustomSerdezID serdez_id
Definition indexspace.h:83
CopySrcDstField & set_serdez(CustomSerdezID _serdez_id)
RegionInstance inst
Definition indexspace.h:77
char direct[8]
Definition indexspace.h:88
CopySrcDstField & set_field(RegionInstance _inst, FieldID _field_id, size_t _size, size_t _subfield_offset=0)
static const size_t MAX_DIRECT_SIZE
Definition indexspace.h:86
ReductionOpID redop_id
Definition indexspace.h:80
CopySrcDstField & set_fill(T value)
FieldID field_id
Definition indexspace.h:78
bool red_exclusive
Definition indexspace.h:82
union Realm::CopySrcDstField::@15 fill_data
size_t size
Definition indexspace.h:79
int indirect_index
Definition indexspace.h:85
size_t subfield_offset
Definition indexspace.h:84
CopySrcDstField & set_fill(const void *_data, size_t _size)
Definition dynamic_templates.h:277
Definition dynamic_templates.h:100
Definition dynamic_templates.h:57
Definition indexspace.h:107
RegionInstance inst
Definition indexspace.h:109
size_t field_offset
Definition indexspace.h:110
IS index_space
Definition indexspace.h:108
Definition indexspace.h:1249
IndexSpace< N, T > space
Definition indexspace.h:1251
void reset(const IndexSpace< N, T > &_space, const Rect< N, T > &_restrict)
IndexSpaceIterator(const IndexSpace< N, T > &_space, const Rect< N, T > &_restrict)
IndexSpaceIterator(const IndexSpace< N, T > &_space)
void reset(const Rect< N, T > &_bounds, const Rect< N, T > &_restrict, SparsityMapPublicImpl< N, T > *_s_impl)
void reset(const IndexSpace< N, T > &_space)
IndexSpaceIterator(const Rect< N, T > &_boudns, const Rect< N, T > &_restrict, SparsityMapPublicImpl< N, T > *_s_impl)
Definition indexspace.h:323
REALM_PUBLIC_API Event create_weighted_subspaces(size_t count, size_t granularity, const std::vector< int > &weights, std::vector< IndexSpace< N, T > > &subspaces, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API void foreach_subrect(LAMBDA lambda, const Rect< N, T > &restriction)
REALM_PUBLIC_API Event create_subspace_by_preimage(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, Rect< N2, T2 > > > &field_data, const IndexSpace< N2, T2 > &target, IndexSpace< N, T > &preimage, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspaces_by_image(const TRANSFORM &transform, const std::vector< IndexSpace< N2, T2 > > &sources, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspaces_by_image(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Point< N, T > > > &field_data, const std::vector< IndexSpace< N2, T2 > > &sources, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
void destroy(Event wait_on=Event::NO_EVENT)
static REALM_PUBLIC_API Event compute_union(const std::vector< IndexSpace< N, T > > &subspaces, IndexSpace< N, T > &result, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_image_with_difference(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Point< N, T > > > &field_data, const std::vector< IndexSpace< N2, T2 > > &sources, const std::vector< IndexSpace< N, T > > &diff_rhs, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspace_by_image(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Point< N, T > > > &field_data, const IndexSpace< N2, T2 > &source, IndexSpace< N, T > &image, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool contains_any(const Rect< N, T > &r) const
REALM_PUBLIC_API Event create_subspace_by_preimage(const TRANSFORM &transform, const IndexSpace< N2, T2 > &target, IndexSpace< N, T > &preimage, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool contains(const Point< N, T > &p) const
static REALM_PUBLIC_API Event compute_differences(const std::vector< IndexSpace< N, T > > &lhss, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_image(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Rect< N, T > > > &field_data, const std::vector< IndexSpace< N2, T2 > > &sources, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event fill(const std::vector< CopySrcDstField > &dsts, const ProfilingRequestSet &requests, const void *fill_value, size_t fill_value_size, Event wait_on=Event::NO_EVENT, int priority=0) const
static REALM_PUBLIC_API Event compute_difference(const IndexSpace< N, T > &lhs, const IndexSpace< N, T > &rhs, IndexSpace< N, T > &result, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_CUDA_HD bool dense(void) const
REALM_PUBLIC_API Event create_subspaces_by_field(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, FT > > &field_data, const CodeDescriptor &codedesc, const std::vector< FT2 > &colors, std::vector< IndexSpace< N, T > > &subspaces, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
size_t volume_approx(void) const
REALM_PUBLIC_API Event copy(std::vector< CopySrcDstField > &&srcs, std::vector< CopySrcDstField > &&dsts, const std::vector< const typename CopyIndirection< N, T >::Base * > &indirects, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
REALM_PUBLIC_API Event create_weighted_subspaces(size_t count, size_t granularity, const std::vector< size_t > &weights, std::vector< IndexSpace< N, T > > &subspaces, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_CUDA_HD IndexSpace(void)
static REALM_PUBLIC_API Event compute_unions(const IndexSpace< N, T > &lhs, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_preimage(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, Point< N2, T2 > > > &field_data, const std::vector< IndexSpace< N2, T2 > > &targets, std::vector< IndexSpace< N, T > > &preimages, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
static REALM_PUBLIC_API Event compute_intersections(const std::vector< IndexSpace< N, T > > &lhss, const IndexSpace< N, T > &rhs, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event copy(const std::vector< CopySrcDstField > &srcs, const std::vector< CopySrcDstField > &dsts, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
REALM_PUBLIC_API Event create_association(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, Point< N2, T2 > > > &field_data, const IndexSpace< N2, T2 > &range, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool overlaps(const IndexSpace< N, T > &other) const
REALM_PUBLIC_API void foreach_subrect(LAMBDA lambda)
REALM_PUBLIC_API Event copy(const std::vector< CopySrcDstField > &srcs, const std::vector< CopySrcDstField > &dsts, const std::vector< const typename CopyIndirection< N, T >::Base * > &indirects, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
static REALM_PUBLIC_API Event compute_intersections(const IndexSpace< N, T > &lhs, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
static REALM_PUBLIC_API Event compute_intersection(const IndexSpace< N, T > &lhs, const IndexSpace< N, T > &rhs, IndexSpace< N, T > &result, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
IndexSpace(const std::vector< Rect< N, T > > &rects, bool disjoint=false)
REALM_PUBLIC_API bool compute_covering(size_t max_rects, int max_overhead, std::vector< Rect< N, T > > &covering) const
REALM_PUBLIC_API Event create_subspaces_by_image(const DomainTransform< N, T, N2, T2 > &domain_transform, const std::vector< IndexSpace< N2, T2 > > &sources, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_equal_subspaces(size_t count, size_t granularity, std::vector< IndexSpace< N, T > > &subspaces, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspace_by_image(const TRANSFORM &transform, const IndexSpace< N2, T2 > &source, const IndexSpace< N, T > &image, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool contains_approx(const Point< N, T > &p) const
REALM_PUBLIC_API Event create_subspaces_by_preimage(const DomainTransform< N2, T2, N, T > &domain_transform, const std::vector< IndexSpace< N2, T2 > > &targets, std::vector< IndexSpace< N, T > > &preimages, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event copy(std::vector< CopySrcDstField > &&srcs, std::vector< CopySrcDstField > &&dsts, const ProfilingRequestSet &requests, Event wait_on=Event::NO_EVENT, int priority=0) const
static REALM_PUBLIC_API Event compute_unions(const std::vector< IndexSpace< N, T > > &lhss, const IndexSpace< N, T > &rhs, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_CUDA_HD IndexSpace(const Rect< N, T > &_bounds)
REALM_PUBLIC_API Event create_subspace_by_field(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, FT > > &field_data, const CodeDescriptor &codedesc, FT2 color, IndexSpace< N, T > &subspace, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool contains_all(const Rect< N, T > &r) const
Rect< N, T > bounds
Definition indexspace.h:324
bool contains_any_approx(const Rect< N, T > &r) const
static REALM_PUBLIC_API Event compute_differences(const std::vector< IndexSpace< N, T > > &lhss, const IndexSpace< N, T > &rhs, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
static REALM_PUBLIC_API Event compute_union(const IndexSpace< N, T > &lhs, const IndexSpace< N, T > &rhs, IndexSpace< N, T > &result, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_image_with_difference(const DomainTransform< N, T, N2, T2 > &domain_transform, const std::vector< IndexSpace< N2, T2 > > &sources, const std::vector< IndexSpace< N, T > > &diff_rhs, std::vector< IndexSpace< N, T > > &images, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_CUDA_HD bool empty(void) const
static REALM_CUDA_HD IndexSpace< N, T > make_empty(void)
static REALM_PUBLIC_API Event compute_unions(const std::vector< IndexSpace< N, T > > &lhss, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_preimage(const TRANSFORM &transform, const std::vector< IndexSpace< N2, T2 > > &targets, std::vector< IndexSpace< N, T > > &preimages, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
size_t volume(void) const
IndexSpace(const std::vector< Point< N, T > > &points, bool disjoint=false)
static REALM_PUBLIC_API Event compute_intersection(const std::vector< IndexSpace< N, T > > &subspaces, IndexSpace< N, T > &result, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
static REALM_PUBLIC_API Event compute_intersections(const std::vector< IndexSpace< N, T > > &lhss, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
bool contains_all_approx(const Rect< N, T > &r) const
SparsityMap< N, T > sparsity
Definition indexspace.h:325
bool overlaps_approx(const IndexSpace< N, T > &other) const
Event make_valid(bool precise=true) const
REALM_PUBLIC_API Event create_subspaces_by_field(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, FT > > &field_data, const std::vector< FT > &colors, std::vector< IndexSpace< N, T > > &subspaces, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
IndexSpace(const Rect< N, T > &_bounds, SparsityMap< N, T > _sparsity)
REALM_PUBLIC_API Event create_subspace_by_preimage(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, Point< N2, T2 > > > &field_data, const IndexSpace< N2, T2 > &target, IndexSpace< N, T > &preimage, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
bool is_valid(bool precise=true) const
static REALM_PUBLIC_API Event compute_differences(const IndexSpace< N, T > &lhs, const std::vector< IndexSpace< N, T > > &rhss, std::vector< IndexSpace< N, T > > &results, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT)
REALM_PUBLIC_API Event create_subspaces_by_preimage(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, Rect< N2, T2 > > > &field_data, const std::vector< IndexSpace< N2, T2 > > &targets, std::vector< IndexSpace< N, T > > &preimages, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspace_by_field(const std::vector< FieldDataDescriptor< IndexSpace< N, T >, FT > > &field_data, FT color, IndexSpace< N, T > &subspace, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_subspace_by_image(const std::vector< FieldDataDescriptor< IndexSpace< N2, T2 >, Rect< N, T > > > &field_data, const IndexSpace< N2, T2 > &source, IndexSpace< N, T > &image, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
REALM_PUBLIC_API Event create_equal_subspace(size_t count, size_t granularity, unsigned index, IndexSpace< N, T > &subspace, const ProfilingRequestSet &reqs, Event wait_on=Event::NO_EVENT) const
IndexSpace< N, T > tighten(bool precise=true) const
Definition point.h:230
Definition point.h:55
Definition point.h:143