xref: /netbsd-src/external/gpl3/gcc/dist/include/cuda/cuda.h (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 /* CUDA Driver API description.
2    Copyright (C) 2017-2022 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10 
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 Under Section 7 of GPL version 3, you are granted additional
17 permissions described in the GCC Runtime Library Exception, version
18 3.1, as published by the Free Software Foundation.
19 
20 You should have received a copy of the GNU General Public License and
21 a copy of the GCC Runtime Library Exception along with this program;
22 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23 <http://www.gnu.org/licenses/>.
24 
25 This header provides parts of the CUDA Driver API, without having to rely on
26 the proprietary CUDA toolkit.  */
27 
28 #ifndef GCC_CUDA_H
29 #define GCC_CUDA_H
30 
31 #include <stdlib.h>
32 
33 #define CUDA_VERSION 8000
34 
35 typedef void *CUcontext;
36 typedef int CUdevice;
37 #if defined(__LP64__) || defined(_WIN64)
38 typedef unsigned long long CUdeviceptr;
39 #else
40 typedef unsigned CUdeviceptr;
41 #endif
42 typedef void *CUevent;
43 typedef void *CUfunction;
44 typedef void *CUlinkState;
45 typedef void *CUmodule;
46 typedef size_t (*CUoccupancyB2DSize)(int);
47 typedef void *CUstream;
48 
49 typedef enum {
50   CUDA_SUCCESS = 0,
51   CUDA_ERROR_INVALID_VALUE = 1,
52   CUDA_ERROR_OUT_OF_MEMORY = 2,
53   CUDA_ERROR_INVALID_CONTEXT = 201,
54   CUDA_ERROR_NOT_FOUND = 500,
55   CUDA_ERROR_NOT_READY = 600,
56   CUDA_ERROR_LAUNCH_FAILED = 719,
57   CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE = 720,
58   CUDA_ERROR_NOT_PERMITTED = 800,
59   CUDA_ERROR_NOT_SUPPORTED = 801,
60   CUDA_ERROR_UNKNOWN = 999
61 } CUresult;
62 
63 typedef enum {
64   CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1,
65   CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10,
66   CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12,
67   CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13,
68   CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15,
69   CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16,
70   CU_DEVICE_ATTRIBUTE_INTEGRATED = 18,
71   CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19,
72   CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20,
73   CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31,
74   CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39,
75   CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40,
76   CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR = 82
77 } CUdevice_attribute;
78 
79 enum {
80   CU_EVENT_DEFAULT = 0,
81   CU_EVENT_DISABLE_TIMING = 2
82 };
83 
84 typedef enum {
85   CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0,
86   CU_FUNC_ATTRIBUTE_NUM_REGS = 4
87 } CUfunction_attribute;
88 
89 typedef enum {
90   CU_JIT_WALL_TIME = 2,
91   CU_JIT_INFO_LOG_BUFFER = 3,
92   CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES = 4,
93   CU_JIT_ERROR_LOG_BUFFER = 5,
94   CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES = 6,
95   CU_JIT_OPTIMIZATION_LEVEL = 7,
96   CU_JIT_LOG_VERBOSE = 12
97 } CUjit_option;
98 
99 typedef enum {
100   CU_JIT_INPUT_PTX = 1
101 } CUjitInputType;
102 
103 enum {
104   CU_CTX_SCHED_AUTO = 0
105 };
106 
107 #define CU_LAUNCH_PARAM_END ((void *) 0)
108 #define CU_LAUNCH_PARAM_BUFFER_POINTER ((void *) 1)
109 #define CU_LAUNCH_PARAM_BUFFER_SIZE ((void *) 2)
110 
111 enum {
112   CU_STREAM_DEFAULT = 0,
113   CU_STREAM_NON_BLOCKING = 1
114 };
115 
116 #define cuCtxCreate cuCtxCreate_v2
117 CUresult cuCtxCreate (CUcontext *, unsigned, CUdevice);
118 #define cuCtxDestroy cuCtxDestroy_v2
119 CUresult cuCtxDestroy (CUcontext);
120 CUresult cuCtxGetCurrent (CUcontext *);
121 CUresult cuCtxGetDevice (CUdevice *);
122 #define cuCtxPopCurrent cuCtxPopCurrent_v2
123 CUresult cuCtxPopCurrent (CUcontext *);
124 #define cuCtxPushCurrent cuCtxPushCurrent_v2
125 CUresult cuCtxPushCurrent (CUcontext);
126 CUresult cuCtxSynchronize (void);
127 CUresult cuDeviceGet (CUdevice *, int);
128 #define cuDeviceTotalMem cuDeviceTotalMem_v2
129 CUresult cuDeviceTotalMem (size_t *, CUdevice);
130 CUresult cuDeviceGetAttribute (int *, CUdevice_attribute, CUdevice);
131 CUresult cuDeviceGetCount (int *);
132 CUresult cuDeviceGetName (char *, int, CUdevice);
133 CUresult cuEventCreate (CUevent *, unsigned);
134 #define cuEventDestroy cuEventDestroy_v2
135 CUresult cuEventDestroy (CUevent);
136 CUresult cuEventElapsedTime (float *, CUevent, CUevent);
137 CUresult cuEventQuery (CUevent);
138 CUresult cuEventRecord (CUevent, CUstream);
139 CUresult cuEventSynchronize (CUevent);
140 CUresult cuFuncGetAttribute (int *, CUfunction_attribute, CUfunction);
141 CUresult cuGetErrorString (CUresult, const char **);
142 CUresult cuInit (unsigned);
143 CUresult cuDriverGetVersion (int *);
144 CUresult cuLaunchKernel (CUfunction, unsigned, unsigned, unsigned, unsigned,
145 			 unsigned, unsigned, unsigned, CUstream, void **, void **);
146 #define cuLinkAddData cuLinkAddData_v2
147 CUresult cuLinkAddData (CUlinkState, CUjitInputType, void *, size_t, const char *,
148 			unsigned, CUjit_option *, void **);
149 CUresult cuLinkComplete (CUlinkState, void **, size_t *);
150 #define cuLinkCreate cuLinkCreate_v2
151 CUresult cuLinkCreate (unsigned, CUjit_option *, void **, CUlinkState *);
152 CUresult cuLinkDestroy (CUlinkState);
153 #define cuMemGetInfo cuMemGetInfo_v2
154 CUresult cuMemGetInfo (size_t *, size_t *);
155 #define cuMemAlloc cuMemAlloc_v2
156 CUresult cuMemAlloc (CUdeviceptr *, size_t);
157 #define cuMemAllocHost cuMemAllocHost_v2
158 CUresult cuMemAllocHost (void **, size_t);
159 CUresult cuMemcpy (CUdeviceptr, CUdeviceptr, size_t);
160 #define cuMemcpyDtoDAsync cuMemcpyDtoDAsync_v2
161 CUresult cuMemcpyDtoDAsync (CUdeviceptr, CUdeviceptr, size_t, CUstream);
162 #define cuMemcpyDtoH cuMemcpyDtoH_v2
163 CUresult cuMemcpyDtoH (void *, CUdeviceptr, size_t);
164 #define cuMemcpyDtoHAsync cuMemcpyDtoHAsync_v2
165 CUresult cuMemcpyDtoHAsync (void *, CUdeviceptr, size_t, CUstream);
166 #define cuMemcpyHtoD cuMemcpyHtoD_v2
167 CUresult cuMemcpyHtoD (CUdeviceptr, const void *, size_t);
168 #define cuMemcpyHtoDAsync cuMemcpyHtoDAsync_v2
169 CUresult cuMemcpyHtoDAsync (CUdeviceptr, const void *, size_t, CUstream);
170 #define cuMemFree cuMemFree_v2
171 CUresult cuMemFree (CUdeviceptr);
172 CUresult cuMemFreeHost (void *);
173 #define cuMemGetAddressRange cuMemGetAddressRange_v2
174 CUresult cuMemGetAddressRange (CUdeviceptr *, size_t *, CUdeviceptr);
175 #define cuMemHostGetDevicePointer cuMemHostGetDevicePointer_v2
176 CUresult cuMemHostGetDevicePointer (CUdeviceptr *, void *, unsigned);
177 CUresult cuModuleGetFunction (CUfunction *, CUmodule, const char *);
178 #define cuModuleGetGlobal cuModuleGetGlobal_v2
179 CUresult cuModuleGetGlobal (CUdeviceptr *, size_t *, CUmodule, const char *);
180 CUresult cuModuleLoad (CUmodule *, const char *);
181 CUresult cuModuleLoadData (CUmodule *, const void *);
182 CUresult cuModuleUnload (CUmodule);
183 CUresult cuOccupancyMaxPotentialBlockSize(int *, int *, CUfunction,
184 					  CUoccupancyB2DSize, size_t, int);
185 typedef void (*CUstreamCallback)(CUstream, CUresult, void *);
186 CUresult cuStreamAddCallback(CUstream, CUstreamCallback, void *, unsigned int);
187 CUresult cuStreamCreate (CUstream *, unsigned);
188 #define cuStreamDestroy cuStreamDestroy_v2
189 CUresult cuStreamDestroy (CUstream);
190 CUresult cuStreamQuery (CUstream);
191 CUresult cuStreamSynchronize (CUstream);
192 CUresult cuStreamWaitEvent (CUstream, CUevent, unsigned);
193 
194 #endif /* GCC_CUDA_H */
195