1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/* Communication between GCC and libgomp.
Copyright (C) 2014-2015 Free Software Foundation, Inc.
Contributed by Mentor Embedded.
This file is part of the GNU Offloading and Multi Processing Library
(libgomp).
Libgomp is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef GOMP_CONSTANTS_H
#define GOMP_CONSTANTS_H 1
/* Memory mapping types. */
/* One byte. */
#define GOMP_MAP_LAST (1 << 8)
#define GOMP_MAP_FLAG_TO (1 << 0)
#define GOMP_MAP_FLAG_FROM (1 << 1)
/* Special map kinds, enumerated starting here. */
#define GOMP_MAP_FLAG_SPECIAL_0 (1 << 2)
#define GOMP_MAP_FLAG_SPECIAL_1 (1 << 3)
#define GOMP_MAP_FLAG_SPECIAL (GOMP_MAP_FLAG_SPECIAL_1 \
| GOMP_MAP_FLAG_SPECIAL_0)
/* Flag to force a specific behavior (or else, trigger a run-time error). */
#define GOMP_MAP_FLAG_FORCE (1 << 7)
enum gomp_map_kind
{
/* If not already present, allocate. */
GOMP_MAP_ALLOC = 0,
/* ..., and copy to device. */
GOMP_MAP_TO = (GOMP_MAP_ALLOC | GOMP_MAP_FLAG_TO),
/* ..., and copy from device. */
GOMP_MAP_FROM = (GOMP_MAP_ALLOC | GOMP_MAP_FLAG_FROM),
/* ..., and copy to and from device. */
GOMP_MAP_TOFROM = (GOMP_MAP_TO | GOMP_MAP_FROM),
/* The following kind is an internal only map kind, used for pointer based
array sections. OMP_CLAUSE_SIZE for these is not the pointer size,
which is implicitly POINTER_SIZE_UNITS, but the bias. */
GOMP_MAP_POINTER = (GOMP_MAP_FLAG_SPECIAL_0 | 0),
/* Also internal, behaves like GOMP_MAP_TO, but additionally any
GOMP_MAP_POINTER records consecutive after it which have addresses
falling into that range will not be ignored if GOMP_MAP_TO_PSET wasn't
mapped already. */
GOMP_MAP_TO_PSET = (GOMP_MAP_FLAG_SPECIAL_0 | 1),
/* Must already be present. */
GOMP_MAP_FORCE_PRESENT = (GOMP_MAP_FLAG_SPECIAL_0 | 2),
/* Deallocate a mapping, without copying from device. */
GOMP_MAP_FORCE_DEALLOC = (GOMP_MAP_FLAG_SPECIAL_0 | 3),
/* Is a device pointer. OMP_CLAUSE_SIZE for these is unused; is implicitly
POINTER_SIZE_UNITS. */
GOMP_MAP_FORCE_DEVICEPTR = (GOMP_MAP_FLAG_SPECIAL_1 | 0),
/* Allocate. */
GOMP_MAP_FORCE_ALLOC = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_ALLOC),
/* ..., and copy to device. */
GOMP_MAP_FORCE_TO = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_TO),
/* ..., and copy from device. */
GOMP_MAP_FORCE_FROM = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_FROM),
/* ..., and copy to and from device. */
GOMP_MAP_FORCE_TOFROM = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_TOFROM)
};
#define GOMP_MAP_COPY_TO_P(X) \
(!((X) & GOMP_MAP_FLAG_SPECIAL) \
&& ((X) & GOMP_MAP_FLAG_TO))
#define GOMP_MAP_COPY_FROM_P(X) \
(!((X) & GOMP_MAP_FLAG_SPECIAL) \
&& ((X) & GOMP_MAP_FLAG_FROM))
#define GOMP_MAP_POINTER_P(X) \
((X) == GOMP_MAP_POINTER)
/* Asynchronous behavior. Keep in sync with
libgomp/{openacc.h,openacc.f90,openacc_lib.h}:acc_async_t. */
#define GOMP_ASYNC_NOVAL -1
#define GOMP_ASYNC_SYNC -2
/* Device codes. Keep in sync with
libgomp/{openacc.h,openacc.f90,openacc_lib.h}:acc_device_t as well as
libgomp/libgomp_target.h. */
#define GOMP_DEVICE_NONE 0
#define GOMP_DEVICE_DEFAULT 1
#define GOMP_DEVICE_HOST 2
#define GOMP_DEVICE_HOST_NONSHM 3
#define GOMP_DEVICE_NOT_HOST 4
#define GOMP_DEVICE_NVIDIA_PTX 5
#define GOMP_DEVICE_INTEL_MIC 6
#define GOMP_DEVICE_ICV -1
#define GOMP_DEVICE_HOST_FALLBACK -2
#endif
|