Legion Runtime
Loading...
Searching...
No Matches
config.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_CONFIG_H__
17#define __LEGION_CONFIG_H__
18
19// legion_defines.h is auto-generated by both the make and cmake builds
20#include "legion_defines.h"
21
22#ifndef LEGION_USE_PYTHON_CFFI
23#include <limits.h>
24#endif // LEGION_USE_PYTHON_CFFI
25
26// Define a prefix for annotating functions for CUDA compilation
27#if defined(__CUDACC__) || defined(__HIPCC__)
28#define __LEGION_CUDA_HD__ __host__ __device__
29#else
30#define __LEGION_CUDA_HD__
31#endif
32
37// ******************** IMPORTANT **************************
38//
39// This file is PURE C, **NOT** C++. Keep any C++-isms in
40// legion_types.h, or elsewhere.
41//
42// ******************** IMPORTANT **************************
43
44#include "realm/realm_c.h"
45
46//==========================================================================
47// Constants
48//==========================================================================
49
50#ifndef LEGION_AUTO_GENERATE_ID
51#define LEGION_AUTO_GENERATE_ID UINT_MAX
52#else
53#error \
54 "legion.h requires the ability to define the macro 'LEGION_AUTO_GENERATE_ID' but it has already been defined"
55#endif
56// This is for backwards compatibility
57// Try to be nice in case someone else defined this
58#ifndef LEGION_DISABLE_DEPRECATED_ENUMS
59#ifndef AUTO_GENERATE_ID
60#define AUTO_GENERATE_ID LEGION_AUTO_GENERATE_ID
61#endif
62#endif
63
64#ifndef LEGION_GC_MIN_PRIORITY
65#define LEGION_GC_MIN_PRIORITY INT_MIN
66#else
67#error \
68 "legion.h requires the ability to define the macro 'LEGION_GC_MIN_PRIORITY' but it has already been defined"
69#endif
70// This is for backwards compatibility
71// Try to be nice in case someone else defined this
72#ifndef LEGION_DISABLE_DEPRECATED_ENUMS
73#ifndef GC_MIN_PRIORITY
74#define GC_MIN_PRIORITY LEGION_GC_MIN_PRIORITY
75#endif
76#endif
77
78#ifndef LEGION_GC_MAX_PRIORITY
79#define LEGION_GC_MAX_PRIORITY (INT_MAX - 1)
80#else
81#error \
82 "legion.h requires the ability to define the macro 'LEGION_GC_MAX_PRIORITY' but it has already been defined"
83#endif
84// This is for backwards compatibility
85// Try to be nice in case someone else defined this
86#ifndef LEGION_DISABLE_DEPRECATED_ENUMS
87#ifndef GC_MAX_PRIORITY
88#define GC_MAX_PRIORITY LEGION_GC_MAX_PRIORITY
89#endif
90#endif
91
92#ifndef LEGION_GC_NEVER_PRIORITY
93#define LEGION_GC_NEVER_PRIORITY LEGION_GC_MIN_PRIORITY
94#else
95#error \
96 "legion.h requires the ability to define the macro 'LEGION_GC_NEVER_PRIORITY' but it has already been defined"
97#endif
98
99#ifndef LEGION_GC_EAGER_PRIORITY
100#define LEGION_GC_EAGER_PRIORITY INT_MAX
101#else
102#error \
103 "legion.h requires the ability to define the macro 'LEGION_GC_EAGER_PRIORITY' but it has already been defined"
104#endif
105
106// This is for backwards compatibility
107// Try to be nice in case someone else defined this
108#ifndef LEGION_DISABLE_DEPRECATED_ENUMS
109#ifndef GC_NEVER_PRIORITY
110#define GC_NEVER_PRIORITY LEGION_GC_NEVER_PRIORITY
111#endif
112#endif
113// This is for backwards compatibility
114// Try to be nice in case someone else defined this
115#ifdef BOUNDS_CHECKS
116#ifndef LEGION_BOUNDS_CHECKS
117#define LEGION_BOUNDS_CHECKS
118#endif
119#endif
120// This is for backwards compatibility
121// Try to be nice in case someone else defined this
122#ifdef PRIVILEGE_CHECKS
123#ifndef LEGION_PRIVILEGE_CHECKS
124#define LEGION_PRIVILEGE_CHECKS
125#endif
126#endif
127
128#ifndef LEGION_GC_FIRST_PRIORITY
129#define LEGION_GC_FIRST_PRIORITY LEGION_GC_MAX_PRIORITY
130#endif
131#ifndef LEGION_GC_DEFAULT_PRIORITY
132#define LEGION_GC_DEFAULT_PRIORITY 0
133#endif
134#ifndef LEGION_GC_LAST_PRIORITY
135#define LEGION_GC_LAST_PRIORITY (LEGION_GC_MIN_PRIORITY + 1)
136#endif
137// This is for backwards compatibility
138// Try to be nice in case someone else defined this
139#ifndef LEGION_DISABLE_DEPRECATED_ENUMS
140#ifndef GC_FIRST_PRIORITY
141#define GC_FIRST_PRIORITY LEGION_GC_FIRST_PRIORITY
142#endif
143#ifndef GC_DEFAULT_PRIORITY
144#define GC_DEFAULT_PRIORITY LEGION_GC_DEFAULT_PRIORITY
145#endif
146#ifndef GC_LAST_PRIORITY
147#define GC_LAST_PRIORITY LEGION_GC_LAST_PRIORITY
148#endif
149#endif
150
151#ifndef LEGION_MAX_DIM
152#define LEGION_MAX_DIM 3 // maximum number of dimensions for index spaces
153#endif
154
155// This value used to describe the maximum return size that Legion would
156// permit for future values. We've since relaxed this so futures could
157// return large opaque buffers. This value now specifies the maximum size
158// that Legion will all for future values to be passed by value without
159// the Realm DMA system being used for actually moving the data.
160#ifndef MAX_RETURN_SIZE // For backwards compatibility
161#ifndef LEGION_MAX_RETURN_SIZE
162#define LEGION_MAX_RETURN_SIZE 2048 // maximum return type size in bytes
163#endif
164#else
165#ifndef LEGION_MAX_RETURN_SIZE
166#define LEGION_MAX_RETURN_SIZE (MAX_RETURN_SIZE)
167#endif
168#endif
169
170#ifndef MAX_FIELDS // For backwards compatibility
171#ifndef LEGION_MAX_FIELDS
172#define LEGION_MAX_FIELDS 256 // must be a power of 2
173#endif
174#else
175#ifndef LEGION_MAX_FIELDS
176#define LEGION_MAX_FIELDS (MAX_FIELDS)
177#endif
178#endif
179
180// Some default values
181
182// The maximum number of nodes to be run on
183#ifndef MAX_NUM_NODES // For backwards compatibility
184#ifndef LEGION_MAX_NUM_NODES
185#define LEGION_MAX_NUM_NODES 1024 // must be a power of 2
186#endif
187#else
188#ifndef LEGION_MAX_NUM_NODES
189#define LEGION_MAX_NUM_NODES (MAX_NUM_NODES)
190#endif
191#endif
192// The maximum number of processors on a node
193#ifndef MAX_NUM_PROCS // For backwards compatibility
194#ifndef LEGION_MAX_NUM_PROCS
195#define LEGION_MAX_NUM_PROCS 64 // must be a power of 2
196#endif
197#else
198#ifndef LEGION_MAX_NUM_PROCS
199#define LEGION_MAX_NUM_PROCS (MAX_NUM_PROCS)
200#endif
201#endif
202// Maximum ID for an application task ID
203#ifndef MAX_APPLICATION_TASK_ID // For backwards compatibility
204#ifndef LEGION_MAX_APPLICATION_TASK_ID
205#define LEGION_MAX_APPLICATION_TASK_ID (1 << 20)
206#endif
207#else
208#ifndef LEGION_MAX_APPLICATION_TASK_ID
209#define LEGION_MAX_APPLICATION_TASK_ID (MAX_APPLICATION_TASK_ID)
210#endif
211#endif
212// Maximum ID for an application field ID
213#ifndef MAX_APPLICATION_FIELD_ID // For backwards compatibility
214#ifndef LEGION_MAX_APPLICATION_FIELD_ID
215#define LEGION_MAX_APPLICATION_FIELD_ID (1 << 20)
216#endif
217#else
218#ifndef LEGION_MAX_APPLICATION_FIELD_ID
219#define LEGION_MAX_APPLICATION_FIELD_ID (MAX_APPLICATION_FIELD_ID)
220#endif
221#endif
222// Maximum ID for an application mapper ID
223#ifndef MAX_APPLICATION_MAPPER_ID // For backwards compatibility
224#ifndef LEGION_MAX_APPLICATION_MAPPER_ID
225#define LEGION_MAX_APPLICATION_MAPPER_ID (1 << 20)
226#endif
227#else
228#ifndef LEGION_MAX_APPLICATION_MAPPER_ID
229#define LEGION_MAX_APPLICATION_MAPPER_ID (MAX_APPLICATION_MAPPER_ID)
230#endif
231#endif
232// Maximum ID for an application reduction ID
233#ifndef MAX_APPLICATION_REDUCTION_ID
234#define MAX_APPLICATION_REDUCTION_ID (1 << 20)
235#endif
236// Maximum ID for an application trace ID
237#ifndef LEGION_MAX_APPLICATION_TRACE_ID
238#define LEGION_MAX_APPLICATION_TRACE_ID (1 << 20)
239#endif
240// Maximum ID for an application projection ID
241#ifndef MAX_APPLICATION_PROJECTION_ID // For backwards compatibility
242#ifndef LEGION_MAX_APPLICATION_PROJECTION_ID
243#define LEGION_MAX_APPLICATION_PROJECTION_ID (1 << 20)
244#endif
245#else
246#ifndef LEGION_MAX_APPLICATION_PROJECTION_ID
247#define LEGION_MAX_APPLICATION_PROJECTION_ID (MAX_APPLICATION_PROJECTION_ID)
248#endif
249#endif
250// Maximum ID for an application sharding ID
251#ifndef MAX_APPLICATION_SHARDING_ID // For backwards compatibility
252#ifndef LEGION_MAX_APPLICATION_SHARDING_ID
253#define LEGION_MAX_APPLICATION_SHARDING_ID (1 << 20)
254#endif
255#else
256#ifndef LEGION_MAX_APPLICATION_SHARDING_ID
257#define LEGION_MAX_APPLICATION_SHARDING_ID (MAX_APPLICATION_SHARDING_ID)
258#endif
259#endif
260#ifndef LEGION_MAX_APPLICATION_CONCURRENT_ID
261#define LEGION_MAX_APPLICATION_CONCURRENT_ID (1 << 20)
262#endif
263#ifndef LEGION_MAX_APPLICATION_EXCEPTION_HANDLER_ID
264#define LEGION_MAX_APPLICATION_EXCEPTION_HANDLER_ID (1 << 20)
265#endif
266// Maximum ID for an application reduction ID
267#ifndef LEGION_MAX_APPLICATION_REDOP_ID
268#ifdef LEGION_USE_PYTHON_CFFI
269#define LEGION_MAX_APPLICATION_REDOP_ID 1048576
270#else
271#define LEGION_MAX_APPLICATION_REDOP_ID \
272 (1 << 20) // Python CFFI can't do this math
273#endif
274#endif
275// Maximum ID for an application serdez ID
276#ifndef LEGION_MAX_APPLICATION_SERDEZ_ID
277#define LEGION_MAX_APPLICATION_SERDEZ_ID (1 << 20)
278#endif
279// Maximum ID for layout constraint ID
280#ifndef LEGION_MAX_APPLICATION_LAYOUT_ID
281#define LEGION_MAX_APPLICATION_LAYOUT_ID (1 << 20)
282#endif
283// Default number of local fields per field space
284#ifndef DEFAULT_LOCAL_FIELDS // For backwards compatibility
285#ifndef LEGION_DEFAULT_LOCAL_FIELDS
286#define LEGION_DEFAULT_LOCAL_FIELDS 4
287#endif
288#else
289#ifndef LEGION_DEFAULT_LOCAL_FIELDS
290#define LEGION_DEFAULT_LOCAL_FIELDS (DEFAULT_LOCAL_FIELDS)
291#endif
292#endif
293// Default number of mapper slots
294#ifndef DEFAULT_MAPPER_SLOTS // For backwards compatibility
295#ifndef LEGION_DEFAULT_MAPPER_SLOTS
296#define LEGION_DEFAULT_MAPPER_SLOTS 8
297#endif
298#else
299#ifndef LEGION_DEFAULT_MAPPER_SLOTS
300#define LEGION_DEFAULT_MAPPER_SLOTS (DEFAULT_MAPPER_SLOTS)
301#endif
302#endif
303// Default number of contexts made for each runtime instance
304// Ideally this is a power of 2 (better for performance)
305#ifndef DEFAULT_CONTEXTS // For backwards compatibility
306#ifndef LEGION_DEFAULT_CONTEXTS
307#define LEGION_DEFAULT_CONTEXTS 8
308#endif
309#else
310#ifndef LEGION_DEFAULT_CONTEXTS
311#define LEGION_DEFAULT_CONTEXTS (DEFAULT_CONTEXTS)
312#endif
313#endif
314// Maximum number of sub-tasks per task at a time
315#ifndef DEFAULT_MAX_TASK_WINDOW // For backwards compatibility
316#ifndef LEGION_DEFAULT_MAX_TASK_WINDOW
317#define LEGION_DEFAULT_MAX_TASK_WINDOW 1024
318#endif
319#else
320#ifndef LEGION_DEFAULT_MAX_TASK_WINDOW
321#define LEGION_DEFAULT_MAX_TASK_WINDOW (DEFAULT_MAX_TASK_WINDOW)
322#endif
323#endif
324// Default amount of hysteresis on the task window in the
325// form of a percentage (must be between 0 and 100)
326#ifndef DEFAULT_TASK_WINDOW_HYSTERESIS // For backwards compatibility
327#ifndef LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS
328#define LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS 25
329#endif
330#else
331#ifndef LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS
332#define LEGION_DEFAULT_TASK_WINDOW_HYSTERESIS (DEFAULT_TASK_WINDOW_HYSTERESIS)
333#endif
334#endif
335// Default number of tasks to have in flight before applying
336// back pressure to the mapping process for a context
337#ifndef DEFAULT_MIN_TASKS_TO_SCHEDULE // For backwards compatibility
338#ifndef LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE
339#define LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE 32
340#endif
341#else
342#ifndef LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE
343#define LEGION_DEFAULT_MIN_TASKS_TO_SCHEDULE (DEFAULT_MIN_TASKS_TO_SCHEDULE)
344#endif
345#endif
346// How many tasks to group together for runtime operations
347#ifndef DEFAULT_META_TASK_VECTOR_WIDTH // For backwards compatibility
348#ifndef LEGION_DEFAULT_META_TASK_VECTOR_WIDTH
349#define LEGION_DEFAULT_META_TASK_VECTOR_WIDTH 16
350#endif
351#else
352#ifndef LEGION_DEFAULT_META_TASK_VECTOR_WIDTH
353#define LEGION_DEFAULT_META_TASK_VECTOR_WIDTH (DEFAULT_META_TASK_VECTOR_WIDTH)
354#endif
355#endif
356// Maximum number of templates to keep around in traces
357#ifndef LEGION_DEFAULT_MAX_TEMPLATES_PER_TRACE
358#define LEGION_DEFAULT_MAX_TEMPLATES_PER_TRACE 16
359#endif
360// Default number of replay tasks to run in parallel
361#ifndef DEFAULT_MAX_REPLAY_PARALLELISM // For backwards compatibility
362#ifndef LEGION_DEFAULT_MAX_REPLAY_PARALLELISM
363#define LEGION_DEFAULT_MAX_REPLAY_PARALLELISM 2
364#endif
365#else
366#ifndef LEGION_DEFAULT_MAX_REPLAY_PARALLELISM
367#define LEGION_DEFAULT_MAX_REPLAY_PARALLELISM (DEFAULT_MAX_REPLAY_PARALLELISM)
368#endif
369#endif
370// The maximum size of active messages sent by the runtime in bytes
371// Note this value was picked based on making a tradeoff between
372// latency and bandwidth numbers on both Cray and Infiniband
373// interconnect networks.
374#ifndef DEFAULT_MAX_MESSAGE_SIZE // For backwards compatibility
375#ifndef LEGION_DEFAULT_MAX_MESSAGE_SIZE
376#define LEGION_DEFAULT_MAX_MESSAGE_SIZE 16384
377#endif
378#else
379#ifndef LEGION_DEFAULT_MAX_MESSAGE_SIZE
380#define LEGION_DEFAULT_MAX_MESSAGE_SIZE (DEFAULT_MAX_MESSAGE_SIZE)
381#endif
382#endif
383// Number of events to place in each GC epoch
384// Large counts improve efficiency but add latency to
385// garbage collection. Smaller count reduce efficiency
386// but improve latency of collection.
387#ifndef DEFAULT_GC_EPOCH_SIZE // For backwards compatibility
388#ifndef LEGION_DEFAULT_GC_EPOCH_SIZE
389#define LEGION_DEFAULT_GC_EPOCH_SIZE 64
390#endif
391#else
392#ifndef LEGION_DEFAULT_GC_EPOCH_SIZE
393#define LEGION_DEFAULT_GC_EPOCH_SIZE (DEFAULT_GC_EPOCH_SIZE)
394#endif
395#endif
396// Number of control replications to be supported
397#ifndef LEGION_DEFAULT_MAX_CONTROL_REPLICATION_CONTEXTS
398#define LEGION_DEFAULT_MAX_CONTROL_REPLICATION_CONTEXTS 1
399#endif
400// Number of phase barriers for communication of
401// close operation composite view meta data
402#ifndef LEGION_CONTROL_REPLICATION_COMMUNICATION_BARRIERS
403#define LEGION_CONTROL_REPLICATION_COMMUNICATION_BARRIERS 32
404#endif
405
406// Used for debugging memory leaks
407// How often tracing information is dumped
408// based on the number of scheduler invocations
409#ifndef TRACE_ALLOCATION_FREQUENCY // For backwards compatibility
410#ifndef LEGION_TRACE_ALLOCATION_FREQUENCY
411#define LEGION_TRACE_ALLOCATION_FREQUENCY 1024
412#endif
413#else
414#ifndef LEGION_TRACE_ALLOCATION_FREQUENCY
415#define LEGION_TRACE_ALLOCATION_FREQUENCY (TRACE_ALLOCATION_FREQUENCY)
416#endif
417#endif
418
419// The maximum alignment guaranteed on the target
420// machine in bytes. On linux systems, this is
421// (at least) twice the size of a pointer.
422#ifndef LEGION_MAX_ALIGNMENT
423#define LEGION_MAX_ALIGNMENT (2 * sizeof(void*))
424#endif
425
426// Give an ideal upper bound on the maximum
427// number of operations Legion should keep
428// available for recycling. Where possible
429// the runtime will delete objects to keep
430// overall memory usage down.
431#ifndef LEGION_MAX_RECYCLABLE_OBJECTS
432#define LEGION_MAX_RECYCLABLE_OBJECTS 1024
433#endif
434
435// An initial seed for random numbers
436// generated by the high-level runtime.
437#ifndef LEGION_INIT_SEED
438#define LEGION_INIT_SEED 0x221B
439#endif
440
441// The radix for the runtime to use when
442// performing collective operations internally
443#ifndef LEGION_COLLECTIVE_RADIX
444#define LEGION_COLLECTIVE_RADIX 8
445#endif
446
447// The radix for the broadcast tree
448// when attempting to shutdown the runtime
449#ifndef LEGION_SHUTDOWN_RADIX
450#define LEGION_SHUTDOWN_RADIX 8
451#endif
452
453// Maximum number of equivalence subsets in the bounding volume hierarchy
454#ifndef LEGION_MAX_BVH_FANOUT
455#define LEGION_MAX_BVH_FANOUT 16
456#endif
457
458// Maximum number of non-replayable templates before warnings
459#ifndef LEGION_NON_REPLAYABLE_WARNING
460#define LEGION_NON_REPLAYABLE_WARNING 5
461#endif
462
463// Maximum number of new templates allowed
464#ifndef LEGION_NEW_TEMPLATE_WARNING_COUNT
465#define LEGION_NEW_TEMPLATE_WARNING_COUNT 8
466#endif
467
468// Initial offset for library IDs
469// Controls how many IDs are available for dynamic use
470#ifndef LEGION_INITIAL_LIBRARY_ID_OFFSET
471#define LEGION_INITIAL_LIBRARY_ID_OFFSET (1 << 30)
472#endif
473
474// Default percentage of the number of children in a
475// disjoint+complete partition that need to be accessed
476// before we consider the whole partition as accessed
477#ifndef LEGION_REFINEMENT_PARTITION_PERCENTAGE
478#define LEGION_REFINEMENT_PARTITION_PERCENTAGE 50
479#endif
480
481// Some helper macros
482
483// This statically computes an integer log base 2 for a number
484// which is guaranteed to be a power of 2. Adapted from
485// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn
486#define STATIC_LOG2(x) (LOG2_LOOKUP(uint32_t(x * 0x077CB531U) >> 27))
487#define LOG2_LOOKUP(x) \
488 ((x == 0) ? 0 : \
489 (x == 1) ? 1 : \
490 (x == 2) ? 28 : \
491 (x == 3) ? 2 : \
492 (x == 4) ? 29 : \
493 (x == 5) ? 14 : \
494 (x == 6) ? 24 : \
495 (x == 7) ? 3 : \
496 (x == 8) ? 30 : \
497 (x == 9) ? 22 : \
498 (x == 10) ? 20 : \
499 (x == 11) ? 15 : \
500 (x == 12) ? 25 : \
501 (x == 13) ? 17 : \
502 (x == 14) ? 4 : \
503 (x == 15) ? 8 : \
504 (x == 16) ? 31 : \
505 (x == 17) ? 27 : \
506 (x == 18) ? 13 : \
507 (x == 19) ? 23 : \
508 (x == 20) ? 21 : \
509 (x == 21) ? 19 : \
510 (x == 22) ? 16 : \
511 (x == 23) ? 7 : \
512 (x == 24) ? 26 : \
513 (x == 25) ? 12 : \
514 (x == 26) ? 18 : \
515 (x == 27) ? 6 : \
516 (x == 28) ? 11 : \
517 (x == 29) ? 5 : \
518 (x == 30) ? 10 : \
519 9)
520
521// log2(LEGION_MAX_FIELDS)
522#ifndef LEGION_FIELD_LOG2
523#define LEGION_FIELD_LOG2 STATIC_LOG2(LEGION_MAX_FIELDS)
524#endif
525
526#define LEGION_STRINGIFY(x) #x
527#define LEGION_MACRO_TO_STRING(x) LEGION_STRINGIFY(x)
528
529#define LEGION_DISTRIBUTED_ID_MASK 0x00FFFFFFFFFFFFFFULL
530#define LEGION_DISTRIBUTED_ID_FILTER(x) ((x) & LEGION_DISTRIBUTED_ID_MASK)
531#define LEGION_DISTRIBUTED_HELP_DECODE(x) ((x) >> 56)
532#define LEGION_DISTRIBUTED_HELP_ENCODE(x, y) ((x) | (((long long)(y)) << 56))
533
534// clang-format off
535#if LEGION_MAX_DIM == 1
536
537#define LEGION_FOREACH_N(__func__) \
538 __func__(1)
539#define LEGION_FOREACH_NN(__func__) \
540 __func__(1,1)
541
542#elif LEGION_MAX_DIM == 2
543
544#define LEGION_FOREACH_N(__func__) \
545 __func__(1) \
546 __func__(2)
547#define LEGION_FOREACH_NN(__func__) \
548 __func__(1,1) \
549 __func__(1,2) \
550 __func__(2,1) \
551 __func__(2,2)
552
553#elif LEGION_MAX_DIM == 3
554
555#define LEGION_FOREACH_N(__func__) \
556 __func__(1) \
557 __func__(2) \
558 __func__(3)
559#define LEGION_FOREACH_NN(__func__) \
560 __func__(1,1) \
561 __func__(1,2) \
562 __func__(1,3) \
563 __func__(2,1) \
564 __func__(2,2) \
565 __func__(2,3) \
566 __func__(3,1) \
567 __func__(3,2) \
568 __func__(3,3)
569
570#elif LEGION_MAX_DIM == 4
571
572#define LEGION_FOREACH_N(__func__) \
573 __func__(1) \
574 __func__(2) \
575 __func__(3) \
576 __func__(4)
577#define LEGION_FOREACH_NN(__func__) \
578 __func__(1,1) \
579 __func__(1,2) \
580 __func__(1,3) \
581 __func__(1,4) \
582 __func__(2,1) \
583 __func__(2,2) \
584 __func__(2,3) \
585 __func__(2,4) \
586 __func__(3,1) \
587 __func__(3,2) \
588 __func__(3,3) \
589 __func__(3,4) \
590 __func__(4,1) \
591 __func__(4,2) \
592 __func__(4,3) \
593 __func__(4,4)
594
595#elif LEGION_MAX_DIM == 5
596
597#define LEGION_FOREACH_N(__func__) \
598 __func__(1) \
599 __func__(2) \
600 __func__(3) \
601 __func__(4) \
602 __func__(5)
603#define LEGION_FOREACH_NN(__func__) \
604 __func__(1,1) \
605 __func__(1,2) \
606 __func__(1,3) \
607 __func__(1,4) \
608 __func__(1,5) \
609 __func__(2,1) \
610 __func__(2,2) \
611 __func__(2,3) \
612 __func__(2,4) \
613 __func__(2,5) \
614 __func__(3,1) \
615 __func__(3,2) \
616 __func__(3,3) \
617 __func__(3,4) \
618 __func__(3,5) \
619 __func__(4,1) \
620 __func__(4,2) \
621 __func__(4,3) \
622 __func__(4,4) \
623 __func__(4,5) \
624 __func__(5,1) \
625 __func__(5,2) \
626 __func__(5,3) \
627 __func__(5,4) \
628 __func__(5,5)
629
630#elif LEGION_MAX_DIM == 6
631
632#define LEGION_FOREACH_N(__func__) \
633 __func__(1) \
634 __func__(2) \
635 __func__(3) \
636 __func__(4) \
637 __func__(5) \
638 __func__(6)
639#define LEGION_FOREACH_NN(__func__) \
640 __func__(1,1) \
641 __func__(1,2) \
642 __func__(1,3) \
643 __func__(1,4) \
644 __func__(1,5) \
645 __func__(1,6) \
646 __func__(2,1) \
647 __func__(2,2) \
648 __func__(2,3) \
649 __func__(2,4) \
650 __func__(2,5) \
651 __func__(2,6) \
652 __func__(3,1) \
653 __func__(3,2) \
654 __func__(3,3) \
655 __func__(3,4) \
656 __func__(3,5) \
657 __func__(3,6) \
658 __func__(4,1) \
659 __func__(4,2) \
660 __func__(4,3) \
661 __func__(4,4) \
662 __func__(4,5) \
663 __func__(4,6) \
664 __func__(5,1) \
665 __func__(5,2) \
666 __func__(5,3) \
667 __func__(5,4) \
668 __func__(5,5) \
669 __func__(5,6) \
670 __func__(6,1) \
671 __func__(6,2) \
672 __func__(6,3) \
673 __func__(6,4) \
674 __func__(6,5) \
675 __func__(6,6)
676
677#elif LEGION_MAX_DIM == 7
678
679#define LEGION_FOREACH_N(__func__) \
680 __func__(1) \
681 __func__(2) \
682 __func__(3) \
683 __func__(4) \
684 __func__(5) \
685 __func__(6) \
686 __func__(7)
687#define LEGION_FOREACH_NN(__func__) \
688 __func__(1,1) \
689 __func__(1,2) \
690 __func__(1,3) \
691 __func__(1,4) \
692 __func__(1,5) \
693 __func__(1,6) \
694 __func__(1,7) \
695 __func__(2,1) \
696 __func__(2,2) \
697 __func__(2,3) \
698 __func__(2,4) \
699 __func__(2,5) \
700 __func__(2,6) \
701 __func__(2,7) \
702 __func__(3,1) \
703 __func__(3,2) \
704 __func__(3,3) \
705 __func__(3,4) \
706 __func__(3,5) \
707 __func__(3,6) \
708 __func__(3,7) \
709 __func__(4,1) \
710 __func__(4,2) \
711 __func__(4,3) \
712 __func__(4,4) \
713 __func__(4,5) \
714 __func__(4,6) \
715 __func__(4,7) \
716 __func__(5,1) \
717 __func__(5,2) \
718 __func__(5,3) \
719 __func__(5,4) \
720 __func__(5,5) \
721 __func__(5,6) \
722 __func__(5,7) \
723 __func__(6,1) \
724 __func__(6,2) \
725 __func__(6,3) \
726 __func__(6,4) \
727 __func__(6,5) \
728 __func__(6,6) \
729 __func__(6,7) \
730 __func__(7,1) \
731 __func__(7,2) \
732 __func__(7,3) \
733 __func__(7,4) \
734 __func__(7,5) \
735 __func__(7,6) \
736 __func__(7,7)
737
738#elif LEGION_MAX_DIM == 8
739
740#define LEGION_FOREACH_N(__func__) \
741 __func__(1) \
742 __func__(2) \
743 __func__(3) \
744 __func__(4) \
745 __func__(5) \
746 __func__(6) \
747 __func__(7) \
748 __func__(8)
749#define LEGION_FOREACH_NN(__func__) \
750 __func__(1,1) \
751 __func__(1,2) \
752 __func__(1,3) \
753 __func__(1,4) \
754 __func__(1,5) \
755 __func__(1,6) \
756 __func__(1,7) \
757 __func__(1,8) \
758 __func__(2,1) \
759 __func__(2,2) \
760 __func__(2,3) \
761 __func__(2,4) \
762 __func__(2,5) \
763 __func__(2,6) \
764 __func__(2,7) \
765 __func__(2,8) \
766 __func__(3,1) \
767 __func__(3,2) \
768 __func__(3,3) \
769 __func__(3,4) \
770 __func__(3,5) \
771 __func__(3,6) \
772 __func__(3,7) \
773 __func__(3,8) \
774 __func__(4,1) \
775 __func__(4,2) \
776 __func__(4,3) \
777 __func__(4,4) \
778 __func__(4,5) \
779 __func__(4,6) \
780 __func__(4,7) \
781 __func__(4,8) \
782 __func__(5,1) \
783 __func__(5,2) \
784 __func__(5,3) \
785 __func__(5,4) \
786 __func__(5,5) \
787 __func__(5,6) \
788 __func__(5,7) \
789 __func__(5,8) \
790 __func__(6,1) \
791 __func__(6,2) \
792 __func__(6,3) \
793 __func__(6,4) \
794 __func__(6,5) \
795 __func__(6,6) \
796 __func__(6,7) \
797 __func__(6,8) \
798 __func__(7,1) \
799 __func__(7,2) \
800 __func__(7,3) \
801 __func__(7,4) \
802 __func__(7,5) \
803 __func__(7,6) \
804 __func__(7,7) \
805 __func__(7,8) \
806 __func__(8,1) \
807 __func__(8,2) \
808 __func__(8,3) \
809 __func__(8,4) \
810 __func__(8,5) \
811 __func__(8,6) \
812 __func__(8,7) \
813 __func__(8,8)
814
815#elif LEGION_MAX_DIM == 9
816
817#define LEGION_FOREACH_N(__func__) \
818 __func__(1) \
819 __func__(2) \
820 __func__(3) \
821 __func__(4) \
822 __func__(5) \
823 __func__(6) \
824 __func__(7) \
825 __func__(8) \
826 __func__(9)
827#define LEGION_FOREACH_NN(__func__) \
828 __func__(1,1) \
829 __func__(1,2) \
830 __func__(1,3) \
831 __func__(1,4) \
832 __func__(1,5) \
833 __func__(1,6) \
834 __func__(1,7) \
835 __func__(1,8) \
836 __func__(1,9) \
837 __func__(2,1) \
838 __func__(2,2) \
839 __func__(2,3) \
840 __func__(2,4) \
841 __func__(2,5) \
842 __func__(2,6) \
843 __func__(2,7) \
844 __func__(2,8) \
845 __func__(2,9) \
846 __func__(3,1) \
847 __func__(3,2) \
848 __func__(3,3) \
849 __func__(3,4) \
850 __func__(3,5) \
851 __func__(3,6) \
852 __func__(3,7) \
853 __func__(3,8) \
854 __func__(3,9) \
855 __func__(4,1) \
856 __func__(4,2) \
857 __func__(4,3) \
858 __func__(4,4) \
859 __func__(4,5) \
860 __func__(4,6) \
861 __func__(4,7) \
862 __func__(4,8) \
863 __func__(4,9) \
864 __func__(5,1) \
865 __func__(5,2) \
866 __func__(5,3) \
867 __func__(5,4) \
868 __func__(5,5) \
869 __func__(5,6) \
870 __func__(5,7) \
871 __func__(5,8) \
872 __func__(5,9) \
873 __func__(6,1) \
874 __func__(6,2) \
875 __func__(6,3) \
876 __func__(6,4) \
877 __func__(6,5) \
878 __func__(6,6) \
879 __func__(6,7) \
880 __func__(6,8) \
881 __func__(6,9) \
882 __func__(7,1) \
883 __func__(7,2) \
884 __func__(7,3) \
885 __func__(7,4) \
886 __func__(7,5) \
887 __func__(7,6) \
888 __func__(7,7) \
889 __func__(7,8) \
890 __func__(7,9) \
891 __func__(8,1) \
892 __func__(8,2) \
893 __func__(8,3) \
894 __func__(8,4) \
895 __func__(8,5) \
896 __func__(8,6) \
897 __func__(8,7) \
898 __func__(8,8) \
899 __func__(8,9) \
900 __func__(9,1) \
901 __func__(9,2) \
902 __func__(9,3) \
903 __func__(9,4) \
904 __func__(9,5) \
905 __func__(9,6) \
906 __func__(9,7) \
907 __func__(9,8) \
908 __func__(9,9)
909
910#else
911#error "Unsupported LEGION_MAX_DIM"
912#endif
913// clang-format on
914
915#ifdef LEGION_DISABLE_DEPRECATED_ENUMS
916#define LEGION_DEPRECATED_ENUM(x)
917#define LEGION_DEPRECATED_ENUM_REAL(x)
918#define LEGION_DEPRECATED_ENUM_FROM(x, y)
919#elif defined(LEGION_WARN_DEPRECATED_ENUMS)
920#if defined(__cplusplus) && __cplusplus >= 201402L
921// c++14 and higher has nice deprecated warnings
922#define LEGION_DEPRECATED_ENUM(x) \
923 x [[deprecated("use LEGION_" #x " instead")]] = LEGION_##x,
924#define LEGION_DEPRECATED_ENUM_REAL(x) \
925 x [[deprecated(#x " is no longer supported")]],
926#define LEGION_DEPRECATED_ENUM_FROM(x, y) \
927 x [[deprecated("use " #y " instead")]] = y,
928#else
929// C and older versions of c++
930#define LEGION_DEPRECATED_ENUM(x) \
931 x __attribute__((deprecated("use LEGION_" #x " instead"))) = LEGION_##x,
932#define LEGION_DEPRECATED_ENUM_REAL(x) \
933 x __attribute__((deprecated(#x " is no longer supported")))
934#define LEGION_DEPRECATED_ENUM_FROM(x, y) \
935 x __attribute__((deprecated("use " #y " instead"))) = y,
936#endif
937#else
938#define LEGION_DEPRECATED_ENUM(x) x = LEGION_##x,
939#define LEGION_DEPRECATED_ENUM_REAL(x) x,
940#define LEGION_DEPRECATED_ENUM_FROM(x, y) x = y,
941#endif
942
943#ifdef __cplusplus
944#include <cstdint>
945#endif
946
947// enum and namepsaces don't really get along well
948// We would like to make these associations explicit
949// but the python cffi parser is stupid as hell
950typedef enum legion_privilege_mode_t
951#ifdef __cplusplus
952 : std::uint32_t
953#endif
954{
955 LEGION_NO_ACCESS = 0x00000000,
956 LEGION_READ_PRIV = 0x00000001,
957 LEGION_READ_ONLY = 0x00000001, // READ_PRIV,
958 LEGION_WRITE_PRIV = 0x00000002,
959 LEGION_REDUCE_PRIV = 0x00000004,
960 LEGION_REDUCE = 0x00000004, // REDUCE_PRIV,
961 LEGION_READ_WRITE = 0x00000007, // READ_PRIV | WRITE_PRIV | REDUCE_PRIV,
962 LEGION_DISCARD_MASK = 0x10000000, // For marking we don't need inputs
963 LEGION_DISCARD_INPUT_MASK = 0x10000000, // Rename of the old discard mask
964 LEGION_DISCARD_OUTPUT_MASK = 0x20000000, // For marking we don't need outputs
965 LEGION_WRITE_ONLY = 0x10000002, // WRITE_PRIV | DISCARD_INPUT_MASK
966 LEGION_WRITE_DISCARD = 0x10000007, // READ_WRITE | DISCARD_INPUT_MASK
967 LEGION_READ_DISCARD = 0x20000001, // READ_PRIV | DISCARD_OUTPUT_MASK
968 // for backwards compatibility
969 // clang-format off
970 LEGION_DEPRECATED_ENUM(NO_ACCESS)
971 LEGION_DEPRECATED_ENUM(READ_PRIV)
972 LEGION_DEPRECATED_ENUM(READ_ONLY)
973 LEGION_DEPRECATED_ENUM(WRITE_PRIV)
974 LEGION_DEPRECATED_ENUM(REDUCE_PRIV)
975 LEGION_DEPRECATED_ENUM(REDUCE)
976 LEGION_DEPRECATED_ENUM(READ_WRITE)
977 LEGION_DEPRECATED_ENUM(DISCARD_MASK)
978 LEGION_DEPRECATED_ENUM(WRITE_ONLY)
979 LEGION_DEPRECATED_ENUM(WRITE_DISCARD)
980 // clang-format on
981} legion_privilege_mode_t;
982
983#ifdef __cplusplus
984static_assert(sizeof(legion_privilege_mode_t) == sizeof(unsigned));
985#endif
986
987typedef enum legion_allocate_mode_t {
988 LEGION_NO_MEMORY = 0x00000000,
989 LEGION_ALLOCABLE = 0x00000001,
990 LEGION_FREEABLE = 0x00000002,
991 LEGION_MUTABLE = 0x00000003,
992 LEGION_REGION_CREATION = 0x00000004,
993 LEGION_REGION_DELETION = 0x00000008,
994 LEGION_ALL_MEMORY = 0x0000000F,
995 // for backwards compatibility
996 // clang-format off
997 LEGION_DEPRECATED_ENUM(NO_MEMORY)
998 LEGION_DEPRECATED_ENUM(ALLOCABLE)
999 LEGION_DEPRECATED_ENUM(FREEABLE)
1000 LEGION_DEPRECATED_ENUM(MUTABLE)
1001 LEGION_DEPRECATED_ENUM(REGION_CREATION)
1002 LEGION_DEPRECATED_ENUM(REGION_DELETION)
1003 LEGION_DEPRECATED_ENUM(ALL_MEMORY)
1004 // clang-format on
1005} legion_allocate_mode_t;
1006
1007typedef enum legion_coherence_property_t {
1008 LEGION_EXCLUSIVE = 0x00000000,
1009 LEGION_ATOMIC = 0x00000001,
1010 LEGION_SIMULTANEOUS = 0x00000002,
1011 LEGION_RELAXED = 0x00000003,
1012 LEGION_COLLECTIVE_MASK = 0x10000000,
1013 // Can't make these associations explicit because the Python CFFI parser is
1014 // stupid
1015 LEGION_COLLECTIVE_EXCLUSIVE =
1016 0x10000000, // LEGION_EXCLUSIVE | LEGION_COLLECTIVE_MASK,
1017 LEGION_COLLECTIVE_ATOMIC =
1018 0x10000001, // LEGION_ATOMIC | LEGION_COLLECTIVE_MASK,
1019 LEGION_COLLECTIVE_SIMULTANEOUS =
1020 0x10000002, // LEGION_SIMULTANEOUS | LEGION_COLLECTIVE_MASK,
1021 LEGION_COLLECTIVE_RELAXED =
1022 0x10000003, // LEGION_RELAXED | LEGION_COLLECTIVE_MASK,
1023 // for backwards compatibility
1024 // clang-format off
1025 LEGION_DEPRECATED_ENUM(EXCLUSIVE)
1026 LEGION_DEPRECATED_ENUM(ATOMIC)
1027 LEGION_DEPRECATED_ENUM(SIMULTANEOUS)
1028 LEGION_DEPRECATED_ENUM(RELAXED)
1029 // clang-format on
1030} legion_coherence_property_t;
1031
1032// Optional region requirement flags
1033typedef enum legion_region_flags_t {
1034 LEGION_NO_FLAG = 0x00000000,
1035 LEGION_VERIFIED_FLAG = 0x00000001,
1036 LEGION_NO_ACCESS_FLAG = 0x00000002, // Deprecated, user SpecializedConstraint
1037 LEGION_RESTRICTED_FLAG = 0x00000004,
1038 LEGION_MUST_PREMAP_FLAG = 0x00000008, // Deprecated, no longer used
1039 // For non-trivial projection functions:
1040 // tell the runtime the write is complete,
1041 // will be ignored for non-index space launches
1042 // and for privileges that aren't WRITE
1043 // Note that if you use this incorrectly it could
1044 // break the correctness of your code so be sure
1045 // you know what you are doing
1046 LEGION_COMPLETE_PROJECTION_WRITE_FLAG = 0x00000010,
1047 // for indicating created output region requirements
1048 LEGION_CREATED_OUTPUT_REQUIREMENT_FLAG = 0x00000020,
1049 // Suppress warnings on this region requirement
1050 LEGION_SUPPRESS_WARNINGS_FLAG = 0x00000040,
1051 // for backwards compatibility
1052 // clang-format off
1053 LEGION_DEPRECATED_ENUM(NO_FLAG)
1054 LEGION_DEPRECATED_ENUM(VERIFIED_FLAG)
1055 LEGION_DEPRECATED_ENUM(NO_ACCESS_FLAG)
1056 LEGION_DEPRECATED_ENUM(RESTRICTED_FLAG)
1057 LEGION_DEPRECATED_ENUM(MUST_PREMAP_FLAG)
1058 LEGION_DEPRECATED_ENUM(COMPLETE_PROJECTION_WRITE_FLAG)
1059 // clang-format on
1060} legion_region_flags_t;
1061
1062typedef enum legion_projection_type_t {
1063 LEGION_SINGULAR_PROJECTION, // a single logical region
1064 LEGION_PARTITION_PROJECTION, // projection from a partition
1065 LEGION_REGION_PROJECTION, // projection from a region
1066 // for backwards compatibility
1067 // clang-format off
1068 LEGION_DEPRECATED_ENUM_FROM(SINGULAR, LEGION_SINGULAR_PROJECTION)
1069 LEGION_DEPRECATED_ENUM_FROM(PART_PROJECTION, LEGION_PARTITION_PROJECTION)
1070 LEGION_DEPRECATED_ENUM_FROM(REG_PROJECTION, LEGION_REGION_PROJECTION)
1071 // clang-format on
1072} legion_projection_type_t;
1073// For backwards compatibility
1074typedef legion_projection_type_t legion_handle_type_t;
1075
1076typedef enum legion_partition_kind_t {
1077 LEGION_DISJOINT_KIND, // disjoint and unknown
1078 LEGION_ALIASED_KIND, // aliased and unknown
1079 LEGION_COMPUTE_KIND, // unknown and unknown
1080 LEGION_DISJOINT_COMPLETE_KIND, // disjoint and complete
1081 LEGION_ALIASED_COMPLETE_KIND, // aliased and complete
1082 LEGION_COMPUTE_COMPLETE_KIND, // unknown and complete
1083 LEGION_DISJOINT_INCOMPLETE_KIND, // disjoint and incomplete
1084 LEGION_ALIASED_INCOMPLETE_KIND, // aliased and incomplete
1085 LEGION_COMPUTE_INCOMPLETE_KIND, // unknown and incomplete
1086 // for backwards compatibility
1087 // clang-format off
1088 LEGION_DEPRECATED_ENUM(DISJOINT_KIND)
1089 LEGION_DEPRECATED_ENUM(ALIASED_KIND)
1090 LEGION_DEPRECATED_ENUM(COMPUTE_KIND)
1091 LEGION_DEPRECATED_ENUM(DISJOINT_COMPLETE_KIND)
1092 LEGION_DEPRECATED_ENUM(ALIASED_COMPLETE_KIND)
1093 LEGION_DEPRECATED_ENUM(COMPUTE_COMPLETE_KIND)
1094 LEGION_DEPRECATED_ENUM(DISJOINT_INCOMPLETE_KIND)
1095 LEGION_DEPRECATED_ENUM(ALIASED_INCOMPLETE_KIND)
1096 LEGION_DEPRECATED_ENUM(COMPUTE_INCOMPLETE_KIND)
1097 // clang-format on
1098} legion_partition_kind_t;
1099
1100typedef enum legion_external_resource_t {
1101 LEGION_EXTERNAL_POSIX_FILE,
1102 LEGION_EXTERNAL_HDF5_FILE,
1103 LEGION_EXTERNAL_INSTANCE,
1104 // for backwards compatibility
1105 // clang-format off
1106 LEGION_DEPRECATED_ENUM(EXTERNAL_POSIX_FILE)
1107 LEGION_DEPRECATED_ENUM(EXTERNAL_HDF5_FILE)
1108 LEGION_DEPRECATED_ENUM(EXTERNAL_INSTANCE)
1109 // clang-format on
1110} legion_external_resource_t;
1111
1112typedef enum legion_timing_measurement_t {
1113 LEGION_MEASURE_SECONDS,
1114 LEGION_MEASURE_MICRO_SECONDS,
1115 LEGION_MEASURE_NANO_SECONDS,
1116 // for backwards compatibility
1117 // clang-format off
1118 LEGION_DEPRECATED_ENUM(MEASURE_SECONDS)
1119 LEGION_DEPRECATED_ENUM(MEASURE_MICRO_SECONDS)
1120 LEGION_DEPRECATED_ENUM(MEASURE_NANO_SECONDS)
1121 // clang-format on
1122} legion_timing_measurement_t;
1123
1124typedef enum legion_dependence_type_t {
1125 LEGION_NO_DEPENDENCE = 0,
1126 LEGION_TRUE_DEPENDENCE = 1,
1127 LEGION_ANTI_DEPENDENCE = 2, // WAR or WAW with Write-Only privilege
1128 LEGION_ATOMIC_DEPENDENCE = 3,
1129 LEGION_SIMULTANEOUS_DEPENDENCE = 4,
1130 // for backwards compatibility
1131 // clang-format off
1132 LEGION_DEPRECATED_ENUM(NO_DEPENDENCE)
1133 LEGION_DEPRECATED_ENUM(TRUE_DEPENDENCE)
1134 LEGION_DEPRECATED_ENUM(ANTI_DEPENDENCE)
1135 LEGION_DEPRECATED_ENUM(ATOMIC_DEPENDENCE)
1136 LEGION_DEPRECATED_ENUM(SIMULTANEOUS_DEPENDENCE)
1137 // clang-format on
1138} legion_dependence_type_t;
1139
1140enum {
1141 LEGION_NAME_SEMANTIC_TAG = 0,
1142 LEGION_SOURCE_FILE_TAG = 1,
1143 LEGION_SOURCE_LINE_TAG = 2,
1144 LEGION_FIRST_AVAILABLE_SEMANTIC_TAG = 3,
1145 // for backwards compatibility
1146 // clang-format off
1147 LEGION_DEPRECATED_ENUM(NAME_SEMANTIC_TAG)
1148 LEGION_DEPRECATED_ENUM(SOURCE_FILE_TAG)
1149 LEGION_DEPRECATED_ENUM(SOURCE_LINE_TAG)
1150 LEGION_DEPRECATED_ENUM(FIRST_AVAILABLE_SEMANTIC_TAG)
1151 // clang-format on
1152};
1153
1154typedef enum legion_mappable_type_id_t {
1155 LEGION_TASK_MAPPABLE = 0,
1156 LEGION_COPY_MAPPABLE = 1,
1157 LEGION_INLINE_MAPPABLE = 2,
1158 LEGION_ACQUIRE_MAPPABLE = 3,
1159 LEGION_RELEASE_MAPPABLE = 4,
1160 LEGION_CLOSE_MAPPABLE = 5,
1161 LEGION_FILL_MAPPABLE = 6,
1162 LEGION_PARTITION_MAPPABLE = 7,
1163 LEGION_MUST_EPOCH_MAPPABLE = 9,
1164 // for backwards compatibility
1165 // clang-format off
1166 LEGION_DEPRECATED_ENUM(TASK_MAPPABLE)
1167 LEGION_DEPRECATED_ENUM(COPY_MAPPABLE)
1168 LEGION_DEPRECATED_ENUM(INLINE_MAPPABLE)
1169 LEGION_DEPRECATED_ENUM(ACQUIRE_MAPPABLE)
1170 LEGION_DEPRECATED_ENUM(RELEASE_MAPPABLE)
1171 LEGION_DEPRECATED_ENUM(CLOSE_MAPPABLE)
1172 LEGION_DEPRECATED_ENUM(FILL_MAPPABLE)
1173 LEGION_DEPRECATED_ENUM(PARTITION_MAPPABLE)
1174 LEGION_DEPRECATED_ENUM(MUST_EPOCH_MAPPABLE)
1175 // clang-format on
1176} legion_mappable_type_id;
1177
1178typedef enum legion_type_id_t {
1179 LEGION_TYPE_BOOL = 0,
1180 LEGION_TYPE_INT8 = 1,
1181 LEGION_TYPE_INT16 = 2,
1182 LEGION_TYPE_INT32 = 3,
1183 LEGION_TYPE_INT64 = 4,
1184 LEGION_TYPE_UINT8 = 5,
1185 LEGION_TYPE_UINT16 = 6,
1186 LEGION_TYPE_UINT32 = 7,
1187 LEGION_TYPE_UINT64 = 8,
1188 LEGION_TYPE_FLOAT16 = 9,
1189 LEGION_TYPE_FLOAT32 = 10,
1190 LEGION_TYPE_FLOAT64 = 11,
1191 LEGION_TYPE_COMPLEX32 = 12,
1192 LEGION_TYPE_COMPLEX64 = 13,
1193 LEGION_TYPE_COMPLEX128 = 14,
1194 LEGION_TYPE_TOTAL = 15, // must be last
1195} legion_type_id_t;
1196
1197// Do it like this because the Python CFFI parser is stupid
1198#define LEGION_REDOP_KIND_SUM_VALUE 0
1199#define LEGION_REDOP_KIND_DIFF_VALUE 1
1200#define LEGION_REDOP_KIND_PROD_VALUE 2
1201#define LEGION_REDOP_KIND_DIV_VALUE 3
1202#define LEGION_REDOP_KIND_MAX_VALUE 4
1203#define LEGION_REDOP_KIND_MIN_VALUE 5
1204#define LEGION_REDOP_KIND_OR_VALUE 6
1205#define LEGION_REDOP_KIND_AND_VALUE 7
1206#define LEGION_REDOP_KIND_XOR_VALUE 8
1207#define LEGION_REDOP_KIND_TOTAL_VALUE 9
1208// Don't forget to undef after the legion_builtin_redop_t enum
1209
1210typedef enum legion_redop_kind_t {
1211 LEGION_REDOP_KIND_SUM = LEGION_REDOP_KIND_SUM_VALUE,
1212 LEGION_REDOP_KIND_DIFF = LEGION_REDOP_KIND_DIFF_VALUE,
1213 LEGION_REDOP_KIND_PROD = LEGION_REDOP_KIND_PROD_VALUE,
1214 LEGION_REDOP_KIND_DIV = LEGION_REDOP_KIND_DIV_VALUE,
1215 LEGION_REDOP_KIND_MAX = LEGION_REDOP_KIND_MAX_VALUE,
1216 LEGION_REDOP_KIND_MIN = LEGION_REDOP_KIND_MIN_VALUE,
1217 LEGION_REDOP_KIND_OR = LEGION_REDOP_KIND_OR_VALUE,
1218 LEGION_REDOP_KIND_AND = LEGION_REDOP_KIND_AND_VALUE,
1219 LEGION_REDOP_KIND_XOR = LEGION_REDOP_KIND_XOR_VALUE,
1220 LEGION_REDOP_KIND_TOTAL = LEGION_REDOP_KIND_TOTAL_VALUE,
1221} legion_redop_kind_t;
1222
1223#ifndef LEGION_USE_PYTHON_CFFI
1224// Normal way of doing things for sane compilers
1225#define LEGION_REDOP_VALUE(kind, type) \
1226 (LEGION_REDOP_BASE + \
1227 ((int)LEGION_REDOP_KIND_##kind * (int)LEGION_TYPE_TOTAL) + \
1228 (int)LEGION_TYPE_##type)
1229#else
1230// Dumb stuff for the Python CFFI parser which can't multiply
1231// so we'll do it the old-school way for them from a time
1232// before multiplication existed and all we had was addition
1233#define MULTIPLY0(x) 0
1234#define MULTIPLY1(x) (x)
1235#define MULTIPLY2(x) (x) + (x)
1236#define MULTIPLY3(x) (x) + MULTIPLY2(x)
1237#define MULTIPLY4(x) (x) + MULTIPLY3(x)
1238#define MULTIPLY5(x) (x) + MULTIPLY4(x)
1239#define MULTIPLY6(x) (x) + MULTIPLY5(x)
1240#define MULTIPLY7(x) (x) + MULTIPLY6(x)
1241#define MULTIPLY8(x) (x) + MULTIPLY7(x)
1242#define MULTIPLY9(x) (x) + MULTIPLY8(x)
1243
1244#define MULTIPLY_(x, y) MULTIPLY##x(y)
1245#define MULTIPLY(x, y) MULTIPLY_(x, y)
1246
1247#define LEGION_REDOP_VALUE(kind, type) \
1248 LEGION_REDOP_BASE + \
1249 MULTIPLY(LEGION_REDOP_KIND_##kind##_VALUE, LEGION_TYPE_TOTAL) + \
1250 LEGION_TYPE_##type
1251#endif
1252typedef enum legion_builtin_redop_t {
1253 // LEGION_MAX_APPLICATION_REDOP_ID has been claimed by BarrierArrivalReduction
1254 LEGION_REDOP_BASE = LEGION_MAX_APPLICATION_REDOP_ID + 1,
1256 // Sum reductions
1258 LEGION_REDOP_OR_BOOL = LEGION_REDOP_VALUE(SUM, BOOL),
1259 LEGION_REDOP_SUM_INT8 = LEGION_REDOP_VALUE(SUM, INT8),
1260 LEGION_REDOP_SUM_INT16 = LEGION_REDOP_VALUE(SUM, INT16),
1261 LEGION_REDOP_SUM_INT32 = LEGION_REDOP_VALUE(SUM, INT32),
1262 LEGION_REDOP_SUM_INT64 = LEGION_REDOP_VALUE(SUM, INT64),
1263 LEGION_REDOP_SUM_UINT8 = LEGION_REDOP_VALUE(SUM, UINT8),
1264 LEGION_REDOP_SUM_UINT16 = LEGION_REDOP_VALUE(SUM, UINT16),
1265 LEGION_REDOP_SUM_UINT32 = LEGION_REDOP_VALUE(SUM, UINT32),
1266 LEGION_REDOP_SUM_UINT64 = LEGION_REDOP_VALUE(SUM, UINT64),
1267#ifdef LEGION_REDOP_HALF
1268 LEGION_REDOP_SUM_FLOAT16 = LEGION_REDOP_VALUE(SUM, FLOAT16),
1269#endif
1270 LEGION_REDOP_SUM_FLOAT32 = LEGION_REDOP_VALUE(SUM, FLOAT32),
1271 LEGION_REDOP_SUM_FLOAT64 = LEGION_REDOP_VALUE(SUM, FLOAT64),
1272#ifdef LEGION_REDOP_COMPLEX
1273#ifdef LEGION_REDOP_HALF
1274 LEGION_REDOP_SUM_COMPLEX32 = LEGION_REDOP_VALUE(SUM, COMPLEX32),
1275#endif
1276 LEGION_REDOP_SUM_COMPLEX64 = LEGION_REDOP_VALUE(SUM, COMPLEX64),
1277 LEGION_REDOP_SUM_COMPLEX128 = LEGION_REDOP_VALUE(SUM, COMPLEX128),
1278#endif
1280 // Difference reductions
1282 // No difference for bools
1283 LEGION_REDOP_DIFF_INT8 = LEGION_REDOP_VALUE(DIFF, INT8),
1284 LEGION_REDOP_DIFF_INT16 = LEGION_REDOP_VALUE(DIFF, INT16),
1285 LEGION_REDOP_DIFF_INT32 = LEGION_REDOP_VALUE(DIFF, INT32),
1286 LEGION_REDOP_DIFF_INT64 = LEGION_REDOP_VALUE(DIFF, INT64),
1287 LEGION_REDOP_DIFF_UINT8 = LEGION_REDOP_VALUE(DIFF, UINT8),
1288 LEGION_REDOP_DIFF_UINT16 = LEGION_REDOP_VALUE(DIFF, UINT16),
1289 LEGION_REDOP_DIFF_UINT32 = LEGION_REDOP_VALUE(DIFF, UINT32),
1290 LEGION_REDOP_DIFF_UINT64 = LEGION_REDOP_VALUE(DIFF, UINT64),
1291#ifdef LEGION_REDOP_HALF
1292 LEGION_REDOP_DIFF_FLOAT16 = LEGION_REDOP_VALUE(DIFF, FLOAT16),
1293#endif
1294 LEGION_REDOP_DIFF_FLOAT32 = LEGION_REDOP_VALUE(DIFF, FLOAT32),
1295 LEGION_REDOP_DIFF_FLOAT64 = LEGION_REDOP_VALUE(DIFF, FLOAT64),
1296#ifdef LEGION_REDOP_COMPLEX
1297#ifdef LEGION_REDOP_HALF
1298 LEGION_REDOP_DIFF_COMPLEX32 = LEGION_REDOP_VALUE(DIFF, COMPLEX32),
1299#endif
1300 LEGION_REDOP_DIFF_COMPLEX64 = LEGION_REDOP_VALUE(DIFF, COMPLEX64),
1301 // TODO: LEGION_REDOP_DIFF_COMPLEX128,
1302#endif
1304 // Product reductions
1306 LEGION_REDOP_AND_BOOL = LEGION_REDOP_VALUE(PROD, BOOL),
1307 LEGION_REDOP_PROD_INT8 = LEGION_REDOP_VALUE(PROD, INT8),
1308 LEGION_REDOP_PROD_INT16 = LEGION_REDOP_VALUE(PROD, INT16),
1309 LEGION_REDOP_PROD_INT32 = LEGION_REDOP_VALUE(PROD, INT32),
1310 LEGION_REDOP_PROD_INT64 = LEGION_REDOP_VALUE(PROD, INT64),
1311 LEGION_REDOP_PROD_UINT8 = LEGION_REDOP_VALUE(PROD, UINT8),
1312 LEGION_REDOP_PROD_UINT16 = LEGION_REDOP_VALUE(PROD, UINT16),
1313 LEGION_REDOP_PROD_UINT32 = LEGION_REDOP_VALUE(PROD, UINT32),
1314 LEGION_REDOP_PROD_UINT64 = LEGION_REDOP_VALUE(PROD, UINT64),
1315#ifdef LEGION_REDOP_HALF
1316 LEGION_REDOP_PROD_FLOAT16 = LEGION_REDOP_VALUE(PROD, FLOAT16),
1317#endif
1318 LEGION_REDOP_PROD_FLOAT32 = LEGION_REDOP_VALUE(PROD, FLOAT32),
1319 LEGION_REDOP_PROD_FLOAT64 = LEGION_REDOP_VALUE(PROD, FLOAT64),
1320#ifdef LEGION_REDOP_COMPLEX
1321#ifdef LEGION_REDOP_HALF
1322 LEGION_REDOP_PROD_COMPLEX32 = LEGION_REDOP_VALUE(PROD, COMPLEX32),
1323#endif
1324 LEGION_REDOP_PROD_COMPLEX64 = LEGION_REDOP_VALUE(PROD, COMPLEX64),
1325 // TODO: LEGION_REDOP_PROD_COMPLEX128,
1326#endif
1328 // Division reductions
1330 // No division for bools
1331 LEGION_REDOP_DIV_INT8 = LEGION_REDOP_VALUE(DIV, INT8),
1332 LEGION_REDOP_DIV_INT16 = LEGION_REDOP_VALUE(DIV, INT16),
1333 LEGION_REDOP_DIV_INT32 = LEGION_REDOP_VALUE(DIV, INT32),
1334 LEGION_REDOP_DIV_INT64 = LEGION_REDOP_VALUE(DIV, INT64),
1335 LEGION_REDOP_DIV_UINT8 = LEGION_REDOP_VALUE(DIV, UINT8),
1336 LEGION_REDOP_DIV_UINT16 = LEGION_REDOP_VALUE(DIV, UINT16),
1337 LEGION_REDOP_DIV_UINT32 = LEGION_REDOP_VALUE(DIV, UINT32),
1338 LEGION_REDOP_DIV_UINT64 = LEGION_REDOP_VALUE(DIV, UINT64),
1339#ifdef LEGION_REDOP_HALF
1340 LEGION_REDOP_DIV_FLOAT16 = LEGION_REDOP_VALUE(DIV, FLOAT16),
1341#endif
1342 LEGION_REDOP_DIV_FLOAT32 = LEGION_REDOP_VALUE(DIV, FLOAT32),
1343 LEGION_REDOP_DIV_FLOAT64 = LEGION_REDOP_VALUE(DIV, FLOAT64),
1344#ifdef LEGION_REDOP_COMPLEX
1345#ifdef LEGION_REDOP_HALF
1346 LEGION_REDOP_DIV_COMPLEX32 = LEGION_REDOP_VALUE(DIV, COMPLEX32),
1347#endif
1348 LEGION_REDOP_DIV_COMPLEX64 = LEGION_REDOP_VALUE(DIV, COMPLEX64),
1349 // TODO: LEGION_REDOP_DIV_COMPLEX128,
1350#endif
1352 // Max reductions
1354 LEGION_REDOP_MAX_BOOL = LEGION_REDOP_VALUE(MAX, BOOL),
1355 LEGION_REDOP_MAX_INT8 = LEGION_REDOP_VALUE(MAX, INT8),
1356 LEGION_REDOP_MAX_INT16 = LEGION_REDOP_VALUE(MAX, INT16),
1357 LEGION_REDOP_MAX_INT32 = LEGION_REDOP_VALUE(MAX, INT32),
1358 LEGION_REDOP_MAX_INT64 = LEGION_REDOP_VALUE(MAX, INT64),
1359 LEGION_REDOP_MAX_UINT8 = LEGION_REDOP_VALUE(MAX, UINT8),
1360 LEGION_REDOP_MAX_UINT16 = LEGION_REDOP_VALUE(MAX, UINT16),
1361 LEGION_REDOP_MAX_UINT32 = LEGION_REDOP_VALUE(MAX, UINT32),
1362 LEGION_REDOP_MAX_UINT64 = LEGION_REDOP_VALUE(MAX, UINT64),
1363#ifdef LEGION_REDOP_HALF
1364 LEGION_REDOP_MAX_FLOAT16 = LEGION_REDOP_VALUE(MAX, FLOAT16),
1365#endif
1366 LEGION_REDOP_MAX_FLOAT32 = LEGION_REDOP_VALUE(MAX, FLOAT32),
1367 LEGION_REDOP_MAX_FLOAT64 = LEGION_REDOP_VALUE(MAX, FLOAT64),
1368#ifdef LEGION_REDOP_COMPLEX
1369#ifdef LEGION_REDOP_HALF
1370 LEGION_REDOP_MAX_COMPLEX32 = LEGION_REDOP_VALUE(MAX, COMPLEX32),
1371#endif
1372 LEGION_REDOP_MAX_COMPLEX64 = LEGION_REDOP_VALUE(MAX, COMPLEX64),
1373 // TODO: LEGION_REDOP_MAX_COMPLEX128,
1374#endif
1376 // Min reductions
1378 LEGION_REDOP_MIN_BOOL = LEGION_REDOP_VALUE(MIN, BOOL),
1379 LEGION_REDOP_MIN_INT8 = LEGION_REDOP_VALUE(MIN, INT8),
1380 LEGION_REDOP_MIN_INT16 = LEGION_REDOP_VALUE(MIN, INT16),
1381 LEGION_REDOP_MIN_INT32 = LEGION_REDOP_VALUE(MIN, INT32),
1382 LEGION_REDOP_MIN_INT64 = LEGION_REDOP_VALUE(MIN, INT64),
1383 LEGION_REDOP_MIN_UINT8 = LEGION_REDOP_VALUE(MIN, UINT8),
1384 LEGION_REDOP_MIN_UINT16 = LEGION_REDOP_VALUE(MIN, UINT16),
1385 LEGION_REDOP_MIN_UINT32 = LEGION_REDOP_VALUE(MIN, UINT32),
1386 LEGION_REDOP_MIN_UINT64 = LEGION_REDOP_VALUE(MIN, UINT64),
1387#ifdef LEGION_REDOP_HALF
1388 LEGION_REDOP_MIN_FLOAT16 = LEGION_REDOP_VALUE(MIN, FLOAT16),
1389#endif
1390 LEGION_REDOP_MIN_FLOAT32 = LEGION_REDOP_VALUE(MIN, FLOAT32),
1391 LEGION_REDOP_MIN_FLOAT64 = LEGION_REDOP_VALUE(MIN, FLOAT64),
1392#ifdef LEGION_REDOP_COMPLEX
1393#ifdef LEGION_REDOP_HALF
1394 LEGION_REDOP_MIN_COMPLEX32 = LEGION_REDOP_VALUE(MIN, COMPLEX32),
1395#endif
1396 LEGION_REDOP_MIN_COMPLEX64 = LEGION_REDOP_VALUE(MIN, COMPLEX64),
1397 // TODO: LEGION_REDOP_MIN_COMPLEX128
1398#endif
1400 // Bitwise-OR reductions
1402 LEGION_REDOP_OR_INT8 = LEGION_REDOP_VALUE(OR, INT8),
1403 LEGION_REDOP_OR_INT16 = LEGION_REDOP_VALUE(OR, INT16),
1404 LEGION_REDOP_OR_INT32 = LEGION_REDOP_VALUE(OR, INT32),
1405 LEGION_REDOP_OR_INT64 = LEGION_REDOP_VALUE(OR, INT64),
1406 LEGION_REDOP_OR_UINT8 = LEGION_REDOP_VALUE(OR, UINT8),
1407 LEGION_REDOP_OR_UINT16 = LEGION_REDOP_VALUE(OR, UINT16),
1408 LEGION_REDOP_OR_UINT32 = LEGION_REDOP_VALUE(OR, UINT32),
1409 LEGION_REDOP_OR_UINT64 = LEGION_REDOP_VALUE(OR, UINT64),
1410 // No bitwise-or for float or complex types
1412 // Bitwise-AND reductions
1414 LEGION_REDOP_AND_INT8 = LEGION_REDOP_VALUE(AND, INT8),
1415 LEGION_REDOP_AND_INT16 = LEGION_REDOP_VALUE(AND, INT16),
1416 LEGION_REDOP_AND_INT32 = LEGION_REDOP_VALUE(AND, INT32),
1417 LEGION_REDOP_AND_INT64 = LEGION_REDOP_VALUE(AND, INT64),
1418 LEGION_REDOP_AND_UINT8 = LEGION_REDOP_VALUE(AND, UINT8),
1419 LEGION_REDOP_AND_UINT16 = LEGION_REDOP_VALUE(AND, UINT16),
1420 LEGION_REDOP_AND_UINT32 = LEGION_REDOP_VALUE(AND, UINT32),
1421 LEGION_REDOP_AND_UINT64 = LEGION_REDOP_VALUE(AND, UINT64),
1422 // No bitwise-and for float or complex types
1424 // Bitwise-XOR reductions
1426 LEGION_REDOP_XOR_BOOL = LEGION_REDOP_VALUE(XOR, BOOL),
1427 LEGION_REDOP_XOR_INT8 = LEGION_REDOP_VALUE(XOR, INT8),
1428 LEGION_REDOP_XOR_INT16 = LEGION_REDOP_VALUE(XOR, INT16),
1429 LEGION_REDOP_XOR_INT32 = LEGION_REDOP_VALUE(XOR, INT32),
1430 LEGION_REDOP_XOR_INT64 = LEGION_REDOP_VALUE(XOR, INT64),
1431 LEGION_REDOP_XOR_UINT8 = LEGION_REDOP_VALUE(XOR, UINT8),
1432 LEGION_REDOP_XOR_UINT16 = LEGION_REDOP_VALUE(XOR, UINT16),
1433 LEGION_REDOP_XOR_UINT32 = LEGION_REDOP_VALUE(XOR, UINT32),
1434 LEGION_REDOP_XOR_UINT64 = LEGION_REDOP_VALUE(XOR, UINT64),
1435 // No bitwise-xor for float or complex types
1436 LEGION_REDOP_LAST,
1437} legion_builtin_redop_t;
1438
1439#undef LEGION_REDOP_KIND_SUM_VALUE
1440#undef LEGION_REDOP_KIND_DIFF_VALUE
1441#undef LEGION_REDOP_KIND_PROD_VALUE
1442#undef LEGION_REDOP_KIND_DIV_VALUE
1443#undef LEGION_REDOP_KIND_MAX_VALUE
1444#undef LEGION_REDOP_KIND_MIN_VALUE
1445#undef LEGION_REDOP_KIND_TOTAL_VALUE
1446
1447#ifdef LEGION_USE_PYTHON_CFFI
1448#undef MULTIPLY0
1449#undef MULTIPLY1
1450#undef MULTIPLY2
1451#undef MULTIPLY3
1452#undef MULTIPLY4
1453#undef MULTIPLY5
1454#undef MULTIPLY6
1455#undef MULTIPLY7
1456#undef MULTIPLY8
1457#undef MULTIPLY9
1458#undef MULTIPLY_
1459#undef MULTIPLY
1460#endif
1461
1462typedef enum legion_execution_constraint_t {
1463 LEGION_ISA_CONSTRAINT = 0, // instruction set architecture
1464 LEGION_PROCESSOR_CONSTRAINT = 1, // processor kind constraint
1465 LEGION_RESOURCE_CONSTRAINT = 2, // physical resources
1466 LEGION_LAUNCH_CONSTRAINT = 3, // launch configuration
1467 LEGION_COLOCATION_CONSTRAINT = 4, // region requirements in same instance
1468 // for backwards compatibility
1469 // clang-format off
1470 LEGION_DEPRECATED_ENUM(ISA_CONSTRAINT)
1471 LEGION_DEPRECATED_ENUM(PROCESSOR_CONSTRAINT)
1472 LEGION_DEPRECATED_ENUM(RESOURCE_CONSTRAINT)
1473 LEGION_DEPRECATED_ENUM(LAUNCH_CONSTRAINT)
1474 LEGION_DEPRECATED_ENUM(COLOCATION_CONSTRAINT)
1475 // clang-format on
1476} legion_execution_constraint_t;
1477
1478typedef enum legion_layout_constraint_t {
1479 LEGION_SPECIALIZED_CONSTRAINT =
1480 0, // normal or speicalized (e.g. reduction-fold)
1481 LEGION_MEMORY_CONSTRAINT = 1, // constraint on the kind of memory
1482 LEGION_FIELD_CONSTRAINT = 2, // ordering of fields
1483 LEGION_ORDERING_CONSTRAINT = 3, // ordering of dimensions
1484 LEGION_TILING_CONSTRAINT = 4, // splitting of dimensions
1485 LEGION_DIMENSION_CONSTRAINT = 5, // dimension size constraint
1486 LEGION_ALIGNMENT_CONSTRAINT = 6, // alignment of a field
1487 LEGION_OFFSET_CONSTRAINT = 7, // offset of a field
1488 LEGION_POINTER_CONSTRAINT = 8, // pointer of a field
1489 LEGION_PADDING_CONSTRAINT = 9, // scratch padding
1490 // for backwards compatibility
1491 // clang-format off
1492 LEGION_DEPRECATED_ENUM(SPECIALIZED_CONSTRAINT)
1493 LEGION_DEPRECATED_ENUM(MEMORY_CONSTRAINT)
1494 LEGION_DEPRECATED_ENUM(FIELD_CONSTRAINT)
1495 LEGION_DEPRECATED_ENUM(ORDERING_CONSTRAINT)
1496 LEGION_DEPRECATED_ENUM(DIMENSION_CONSTRAINT)
1497 LEGION_DEPRECATED_ENUM(ALIGNMENT_CONSTRAINT)
1498 LEGION_DEPRECATED_ENUM(OFFSET_CONSTRAINT)
1499 LEGION_DEPRECATED_ENUM(POINTER_CONSTRAINT)
1500 // clang-format on
1501} legion_layout_constraint_t;
1502
1503typedef enum legion_equality_kind_t {
1504 LEGION_LT_EK = 0, // <
1505 LEGION_LE_EK = 1, // <=
1506 LEGION_GT_EK = 2, // >
1507 LEGION_GE_EK = 3, // >=
1508 LEGION_EQ_EK = 4, // ==
1509 LEGION_NE_EK = 5, // !=
1510 // for backwards compatibility
1511 // clang-format off
1512 LEGION_DEPRECATED_ENUM(LT_EK)
1513 LEGION_DEPRECATED_ENUM(LE_EK)
1514 LEGION_DEPRECATED_ENUM(GT_EK)
1515 LEGION_DEPRECATED_ENUM(GE_EK)
1516 LEGION_DEPRECATED_ENUM(EQ_EK)
1517 LEGION_DEPRECATED_ENUM(NE_EK)
1518 // clang-format on
1519} legion_equality_kind_t;
1520
1521typedef enum legion_dimension_kind_t {
1522 LEGION_DIM_X = 0, // first logical index space dimension
1523 LEGION_DIM_Y = 1, // second logical index space dimension
1524 LEGION_DIM_Z = 2, // ...
1525 // field dimension (this is here for legacy reasons: Regent has hard coded it)
1526 LEGION_DIM_W = 3, // fourth logical index space dimension
1527 LEGION_DIM_V = 4, // fifth logical index space dimension
1528 LEGION_DIM_U = 5, // ...
1529 LEGION_DIM_T = 6,
1530 LEGION_DIM_S = 7,
1531 LEGION_DIM_R = 8,
1532 LEGION_DIM_F = 9,
1533 // Numerical names for users that want them
1534 LEGION_DIM_0 = LEGION_DIM_X,
1535 LEGION_DIM_1 = LEGION_DIM_Y,
1536 LEGION_DIM_2 = LEGION_DIM_Z,
1537 LEGION_DIM_3 = LEGION_DIM_W,
1538 LEGION_DIM_4 = LEGION_DIM_V,
1539 LEGION_DIM_5 = LEGION_DIM_U,
1540 LEGION_DIM_6 = LEGION_DIM_T,
1541 LEGION_DIM_7 = LEGION_DIM_S,
1542 LEGION_DIM_8 = LEGION_DIM_R,
1543 // for backwards compatibility
1544 // clang-format off
1545 LEGION_DEPRECATED_ENUM(DIM_X)
1546 LEGION_DEPRECATED_ENUM(DIM_Y)
1547 LEGION_DEPRECATED_ENUM(DIM_Z)
1548 LEGION_DEPRECATED_ENUM(DIM_W)
1549 LEGION_DEPRECATED_ENUM(DIM_V)
1550 LEGION_DEPRECATED_ENUM(DIM_U)
1551 LEGION_DEPRECATED_ENUM(DIM_T)
1552 LEGION_DEPRECATED_ENUM(DIM_S)
1553 LEGION_DEPRECATED_ENUM(DIM_R)
1554 LEGION_DEPRECATED_ENUM(DIM_F)
1555 // clang-format on
1556} legion_dimension_kind_t;
1557
1558// Make all flags 1-hot encoding so we can logically-or them together
1559typedef enum legion_isa_kind_t {
1560 // Top-level ISA Kinds
1561 LEGION_X86_ISA = 0x00000001,
1562 LEGION_ARM_ISA = 0x00000002,
1563 LEGION_PPC_ISA = 0x00000004, // Power PC
1564 LEGION_PTX_ISA = 0x00000008, // auto-launch by runtime
1565 LEGION_CUDA_ISA = 0x00000010, // run on CPU thread bound to CUDA context
1566 LEGION_LUA_ISA = 0x00000020, // run on Lua processor
1567 LEGION_TERRA_ISA = 0x00000040, // JIT to target processor kind
1568 LEGION_LLVM_ISA = 0x00000080, // JIT to target processor kind
1569 LEGION_GL_ISA = 0x00000100, // run on CPU thread with OpenGL context
1570 // x86 Vector Instructions
1571 LEGION_SSE_ISA = 0x00000200,
1572 LEGION_SSE2_ISA = 0x00000400,
1573 LEGION_SSE3_ISA = 0x00000800,
1574 LEGION_SSE4_ISA = 0x00001000,
1575 LEGION_AVX_ISA = 0x00002000,
1576 LEGION_AVX2_ISA = 0x00004000,
1577 LEGION_FMA_ISA = 0x00008000,
1578 // PowerPC Vector Insructions
1579 LEGION_VSX_ISA = 0x00010000,
1580 // GPU variants
1581 LEGION_SM_10_ISA = 0x00020000,
1582 LEGION_SM_20_ISA = 0x00040000,
1583 LEGION_SM_30_ISA = 0x00080000,
1584 LEGION_SM_35_ISA = 0x00100000,
1585 // ARM Vector Instructions
1586 LEGION_NEON_ISA = 0x00200000,
1587 // for backwards compatibility
1588 // clang-format off
1589 LEGION_DEPRECATED_ENUM(X86_ISA)
1590 LEGION_DEPRECATED_ENUM(ARM_ISA)
1591 LEGION_DEPRECATED_ENUM(PPC_ISA)
1592 LEGION_DEPRECATED_ENUM(PTX_ISA)
1593 LEGION_DEPRECATED_ENUM(CUDA_ISA)
1594 LEGION_DEPRECATED_ENUM(LUA_ISA)
1595 LEGION_DEPRECATED_ENUM(TERRA_ISA)
1596 LEGION_DEPRECATED_ENUM(LLVM_ISA)
1597 LEGION_DEPRECATED_ENUM(GL_ISA)
1598 LEGION_DEPRECATED_ENUM(SSE_ISA)
1599 LEGION_DEPRECATED_ENUM(SSE2_ISA)
1600 LEGION_DEPRECATED_ENUM(SSE3_ISA)
1601 LEGION_DEPRECATED_ENUM(SSE4_ISA)
1602 LEGION_DEPRECATED_ENUM(AVX_ISA)
1603 LEGION_DEPRECATED_ENUM(AVX2_ISA)
1604 LEGION_DEPRECATED_ENUM(FMA_ISA)
1605 LEGION_DEPRECATED_ENUM(VSX_ISA)
1606 LEGION_DEPRECATED_ENUM(SM_10_ISA)
1607 LEGION_DEPRECATED_ENUM(SM_20_ISA)
1608 LEGION_DEPRECATED_ENUM(SM_30_ISA)
1609 LEGION_DEPRECATED_ENUM(SM_35_ISA)
1610 LEGION_DEPRECATED_ENUM(NEON_ISA)
1611 // clang-format on
1612} legion_isa_kind_t;
1613
1614typedef enum legion_resource_constraint_t {
1615 LEGION_L1_CACHE_SIZE = 0,
1616 LEGION_L2_CACHE_SIZE = 1,
1617 LEGION_L3_CACHE_SIZE = 2,
1618 LEGION_L1_CACHE_ASSOCIATIVITY = 3,
1619 LEGION_L2_CACHE_ASSOCIATIVITY = 4,
1620 LEGION_L3_CACHE_ASSOCIATIVITY = 5,
1621 LEGION_REGISTER_FILE_SIZE = 6,
1622 LEGION_SHARED_MEMORY_SIZE = 7,
1623 LEGION_TEXTURE_CACHE_SIZE = 8,
1624 LEGION_CONSTANT_CACHE_SIZE = 9,
1625 LEGION_NAMED_BARRIERS = 10,
1626 LEGION_SM_COUNT = 11, // total SMs on the device
1627 LEGION_MAX_OCCUPANCY = 12, // max warps per SM
1628 // for backwards compatibility
1629 // clang-format off
1630 LEGION_DEPRECATED_ENUM(L1_CACHE_SIZE)
1631 LEGION_DEPRECATED_ENUM(L2_CACHE_SIZE)
1632 LEGION_DEPRECATED_ENUM(L3_CACHE_SIZE)
1633 LEGION_DEPRECATED_ENUM(L1_CACHE_ASSOCIATIVITY)
1634 LEGION_DEPRECATED_ENUM(L2_CACHE_ASSOCIATIVITY)
1635 LEGION_DEPRECATED_ENUM(L3_CACHE_ASSOCIATIVITY)
1636 LEGION_DEPRECATED_ENUM(REGISTER_FILE_SIZE)
1637 LEGION_DEPRECATED_ENUM(SHARED_MEMORY_SIZE)
1638 LEGION_DEPRECATED_ENUM(TEXTURE_CACHE_SIZE)
1639 LEGION_DEPRECATED_ENUM(CONSTANT_CACHE_SIZE)
1640 LEGION_DEPRECATED_ENUM(NAMED_BARRIERS)
1641 LEGION_DEPRECATED_ENUM(SM_COUNT)
1642 LEGION_DEPRECATED_ENUM(MAX_OCCUPANCY)
1643 // clang-format on
1644} legion_resource_constraint_t;
1645
1646typedef enum legion_launch_constraint_t {
1647 LEGION_CTA_SHAPE = 0,
1648 LEGION_GRID_SHAPE = 1,
1649 LEGION_DYNAMIC_SHARED_MEMORY = 2,
1650 LEGION_REGISTERS_PER_THREAD = 3,
1651 LEGION_CTAS_PER_SM = 4,
1652 LEGION_NAMED_BARRIERS_PER_CTA = 5,
1653} legion_launch_constraint_t;
1654
1655typedef enum legion_specialized_constraint_t {
1656 LEGION_NO_SPECIALIZE = 0,
1657 LEGION_AFFINE_SPECIALIZE = 1, // affine layout
1658 LEGION_COMPACT_SPECIALIZE = 2, // compacted sparsity
1659 LEGION_AFFINE_REDUCTION_SPECIALIZE = 3,
1660 LEGION_COMPACT_REDUCTION_SPECIALIZE = 4,
1661 LEGION_VIRTUAL_SPECIALIZE = 5,
1662 // All file types must go below here, everything else above
1663 LEGION_GENERIC_FILE_SPECIALIZE,
1664 LEGION_HDF5_FILE_SPECIALIZE,
1665 // for backards compatibility
1666 // clang-format off
1667 LEGION_DEPRECATED_ENUM(NO_SPECIALIZE)
1668 LEGION_DEPRECATED_ENUM(AFFINE_SPECIALIZE)
1669 LEGION_DEPRECATED_ENUM_FROM(NORMAL_SPECIALIZE, LEGION_AFFINE_SPECIALIZE)
1670 LEGION_DEPRECATED_ENUM(COMPACT_SPECIALIZE)
1671 LEGION_DEPRECATED_ENUM(AFFINE_REDUCTION_SPECIALIZE)
1672 LEGION_DEPRECATED_ENUM_FROM(REDUCTION_FOLD_SPECIALIZE, LEGION_AFFINE_REDUCTION_SPECIALIZE)
1673 LEGION_DEPRECATED_ENUM(COMPACT_REDUCTION_SPECIALIZE)
1674 LEGION_DEPRECATED_ENUM_FROM(REDUCTION_LIST_SPECIALIZE, LEGION_COMPACT_REDUCTION_SPECIALIZE)
1675 LEGION_DEPRECATED_ENUM(VIRTUAL_SPECIALIZE)
1676 LEGION_DEPRECATED_ENUM(GENERIC_FILE_SPECIALIZE)
1677 LEGION_DEPRECATED_ENUM(HDF5_FILE_SPECIALIZE)
1678 // clang-format on
1679} legion_specialized_constraint_t;
1680
1681// Keep this in sync with Domain::MAX_RECT_DIM in legion_domain.h
1682// these have to be macros for interacting with the preprocessor
1683#define LEGION_MAX_POINT_DIM (LEGION_MAX_DIM)
1684#define LEGION_MAX_RECT_DIM (LEGION_MAX_DIM)
1685typedef enum legion_domain_max_rect_dim_t {
1686 // for backwards compatibility
1687 // clang-format off
1688 LEGION_DEPRECATED_ENUM(MAX_POINT_DIM)
1689 LEGION_DEPRECATED_ENUM(MAX_RECT_DIM)
1690 // clang-format on
1691} legion_domain_max_rect_dim_t;
1692
1693#undef LEGION_DEPRECATED_ENUM
1694#undef LEGION_DEPRECATED_ENUM_FROM
1695
1696typedef enum legion_unbound_pool_scope_t {
1697 // Bounded pool so other allocations always permitted in parallel
1698 LEGION_BOUNDED_POOL,
1699 // Only allocations for the same task are permitted in parallel
1700 LEGION_STRICT_UNBOUNDED_POOL,
1701 // Only tasks in the same index space task launch
1702 // are allowed to allocate in parallel
1703 LEGION_INDEX_TASK_UNBOUNDED_POOL,
1704 // Anything else is allowed to allocate in parallel
1705 LEGION_PERMISSIVE_UNBOUNDED_POOL,
1706} legion_unbounded_pool_scope_t;
1707
1708//==========================================================================
1709// Types
1710//==========================================================================
1711
1712typedef realm_processor_kind_t legion_processor_kind_t;
1713typedef realm_memory_kind_t legion_memory_kind_t;
1714typedef realm_reduction_op_id_t legion_reduction_op_id_t;
1715typedef realm_custom_serdez_id_t legion_custom_serdez_id_t;
1716typedef realm_address_space_t legion_address_space_t;
1717typedef realm_file_mode_t legion_file_mode_t;
1718typedef realm_id_t legion_proc_id_t;
1719typedef realm_id_t legion_memory_id_t;
1720typedef int legion_task_priority_t;
1721typedef int legion_garbage_collection_priority_t;
1722typedef long long legion_coord_t;
1723typedef unsigned int legion_color_t;
1724typedef unsigned int legion_field_id_t;
1725typedef unsigned int legion_trace_id_t;
1726typedef unsigned int legion_mapper_id_t;
1727typedef unsigned int legion_context_id_t;
1728typedef unsigned int legion_instance_id_t;
1729typedef unsigned int legion_type_tag_t;
1730typedef unsigned int legion_index_tree_id_t;
1731typedef unsigned int legion_generation_id_t;
1732typedef unsigned int legion_type_handle;
1733typedef unsigned int legion_projection_id_t;
1734typedef unsigned int legion_sharding_id_t;
1735typedef unsigned int legion_concurrent_id_t;
1736typedef unsigned int legion_exception_handler_id_t;
1737typedef unsigned int legion_tunable_id_t;
1738typedef unsigned int legion_local_variable_id_t;
1739typedef unsigned int legion_shard_id_t;
1740typedef unsigned int legion_variant_id_t;
1741typedef unsigned long long legion_distributed_id_t;
1742typedef unsigned long legion_mapping_tag_id_t;
1743typedef unsigned long legion_code_descriptor_id_t;
1744typedef unsigned long legion_semantic_tag_t;
1745typedef unsigned long long legion_unique_id_t;
1746typedef unsigned long long legion_version_id_t;
1747typedef unsigned long long legion_projection_epoch_id_t;
1748typedef unsigned long long legion_provenance_id_t;
1749typedef realm_task_func_id_t legion_task_id_t;
1750typedef unsigned long legion_layout_constraint_id_t;
1751typedef long long legion_internal_color_t;
1752typedef legion_distributed_id_t legion_region_tree_id_t;
1753
1754#endif // __LEGION_CONFIG_H__