1 /* CUDA API description.
2 Copyright (C) 2017-2018 Free Software Foundation, Inc.
4 This file is part of GCC.
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)
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.
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.
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/>.
25 This header provides the minimum amount of typedefs, enums and function
26 declarations to be able to compile plugin-nvptx.c if cuda.h and
27 libcuda.so.1 are not available. */
34 #define CUDA_VERSION 8000
36 typedef void *CUcontext
;
38 #if defined(__LP64__) || defined(_WIN64)
39 typedef unsigned long long CUdeviceptr
;
41 typedef unsigned CUdeviceptr
;
43 typedef void *CUevent
;
44 typedef void *CUfunction
;
45 typedef void *CUlinkState
;
46 typedef void *CUmodule
;
47 typedef void *CUstream
;
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
60 CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK
= 1,
61 CU_DEVICE_ATTRIBUTE_WARP_SIZE
= 10,
62 CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK
= 12,
63 CU_DEVICE_ATTRIBUTE_CLOCK_RATE
= 13,
64 CU_DEVICE_ATTRIBUTE_GPU_OVERLAP
= 15,
65 CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT
= 16,
66 CU_DEVICE_ATTRIBUTE_INTEGRATED
= 18,
67 CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY
= 19,
68 CU_DEVICE_ATTRIBUTE_COMPUTE_MODE
= 20,
69 CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS
= 31,
70 CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR
= 39,
71 CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT
= 40,
72 CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR
= 82
77 CU_EVENT_DISABLE_TIMING
= 2
81 CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK
= 0,
82 CU_FUNC_ATTRIBUTE_NUM_REGS
= 4
83 } CUfunction_attribute
;
87 CU_JIT_INFO_LOG_BUFFER
= 3,
88 CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES
= 4,
89 CU_JIT_ERROR_LOG_BUFFER
= 5,
90 CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES
= 6,
91 CU_JIT_LOG_VERBOSE
= 12
102 #define CU_LAUNCH_PARAM_END ((void *) 0)
103 #define CU_LAUNCH_PARAM_BUFFER_POINTER ((void *) 1)
104 #define CU_LAUNCH_PARAM_BUFFER_SIZE ((void *) 2)
107 CU_STREAM_DEFAULT
= 0,
108 CU_STREAM_NON_BLOCKING
= 1
111 #define cuCtxCreate cuCtxCreate_v2
112 CUresult
cuCtxCreate (CUcontext
*, unsigned, CUdevice
);
113 #define cuCtxDestroy cuCtxDestroy_v2
114 CUresult
cuCtxDestroy (CUcontext
);
115 CUresult
cuCtxGetCurrent (CUcontext
*);
116 CUresult
cuCtxGetDevice (CUdevice
*);
117 #define cuCtxPopCurrent cuCtxPopCurrent_v2
118 CUresult
cuCtxPopCurrent (CUcontext
*);
119 #define cuCtxPushCurrent cuCtxPushCurrent_v2
120 CUresult
cuCtxPushCurrent (CUcontext
);
121 CUresult
cuCtxSynchronize (void);
122 CUresult
cuDeviceGet (CUdevice
*, int);
123 CUresult
cuDeviceGetAttribute (int *, CUdevice_attribute
, CUdevice
);
124 CUresult
cuDeviceGetCount (int *);
125 CUresult
cuEventCreate (CUevent
*, unsigned);
126 #define cuEventDestroy cuEventDestroy_v2
127 CUresult
cuEventDestroy (CUevent
);
128 CUresult
cuEventElapsedTime (float *, CUevent
, CUevent
);
129 CUresult
cuEventQuery (CUevent
);
130 CUresult
cuEventRecord (CUevent
, CUstream
);
131 CUresult
cuEventSynchronize (CUevent
);
132 CUresult
cuFuncGetAttribute (int *, CUfunction_attribute
, CUfunction
);
133 CUresult
cuGetErrorString (CUresult
, const char **);
134 CUresult
cuInit (unsigned);
135 CUresult
cuLaunchKernel (CUfunction
, unsigned, unsigned, unsigned, unsigned,
136 unsigned, unsigned, unsigned, CUstream
, void **, void **);
137 #define cuLinkAddData cuLinkAddData_v2
138 CUresult
cuLinkAddData (CUlinkState
, CUjitInputType
, void *, size_t, const char *,
139 unsigned, CUjit_option
*, void **);
140 CUresult
cuLinkComplete (CUlinkState
, void **, size_t *);
141 #define cuLinkCreate cuLinkCreate_v2
142 CUresult
cuLinkCreate (unsigned, CUjit_option
*, void **, CUlinkState
*);
143 CUresult
cuLinkDestroy (CUlinkState
);
144 #define cuMemAlloc cuMemAlloc_v2
145 CUresult
cuMemAlloc (CUdeviceptr
*, size_t);
146 #define cuMemAllocHost cuMemAllocHost_v2
147 CUresult
cuMemAllocHost (void **, size_t);
148 CUresult
cuMemcpy (CUdeviceptr
, CUdeviceptr
, size_t);
149 #define cuMemcpyDtoDAsync cuMemcpyDtoDAsync_v2
150 CUresult
cuMemcpyDtoDAsync (CUdeviceptr
, CUdeviceptr
, size_t, CUstream
);
151 #define cuMemcpyDtoH cuMemcpyDtoH_v2
152 CUresult
cuMemcpyDtoH (void *, CUdeviceptr
, size_t);
153 #define cuMemcpyDtoHAsync cuMemcpyDtoHAsync_v2
154 CUresult
cuMemcpyDtoHAsync (void *, CUdeviceptr
, size_t, CUstream
);
155 #define cuMemcpyHtoD cuMemcpyHtoD_v2
156 CUresult
cuMemcpyHtoD (CUdeviceptr
, const void *, size_t);
157 #define cuMemcpyHtoDAsync cuMemcpyHtoDAsync_v2
158 CUresult
cuMemcpyHtoDAsync (CUdeviceptr
, const void *, size_t, CUstream
);
159 #define cuMemFree cuMemFree_v2
160 CUresult
cuMemFree (CUdeviceptr
);
161 CUresult
cuMemFreeHost (void *);
162 #define cuMemGetAddressRange cuMemGetAddressRange_v2
163 CUresult
cuMemGetAddressRange (CUdeviceptr
*, size_t *, CUdeviceptr
);
164 #define cuMemHostGetDevicePointer cuMemHostGetDevicePointer_v2
165 CUresult
cuMemHostGetDevicePointer (CUdeviceptr
*, void *, unsigned);
166 CUresult
cuModuleGetFunction (CUfunction
*, CUmodule
, const char *);
167 #define cuModuleGetGlobal cuModuleGetGlobal_v2
168 CUresult
cuModuleGetGlobal (CUdeviceptr
*, size_t *, CUmodule
, const char *);
169 CUresult
cuModuleLoad (CUmodule
*, const char *);
170 CUresult
cuModuleLoadData (CUmodule
*, const void *);
171 CUresult
cuModuleUnload (CUmodule
);
172 CUresult
cuStreamCreate (CUstream
*, unsigned);
173 #define cuStreamDestroy cuStreamDestroy_v2
174 CUresult
cuStreamDestroy (CUstream
);
175 CUresult
cuStreamQuery (CUstream
);
176 CUresult
cuStreamSynchronize (CUstream
);
177 CUresult
cuStreamWaitEvent (CUstream
, CUevent
, unsigned);
179 #endif /* GCC_CUDA_H */