1 /* CUDA API description. 2 Copyright (C) 2017-2020 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 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. */ 28 29 #ifndef GCC_CUDA_H 30 #define GCC_CUDA_H 31 32 #include <stdlib.h> 33 34 #define CUDA_VERSION 8000 35 36 typedef void *CUcontext; 37 typedef int CUdevice; 38 #if defined(__LP64__) || defined(_WIN64) 39 typedef unsigned long long CUdeviceptr; 40 #else 41 typedef unsigned CUdeviceptr; 42 #endif 43 typedef void *CUevent; 44 typedef void *CUfunction; 45 typedef void *CUlinkState; 46 typedef void *CUmodule; 47 typedef size_t (*CUoccupancyB2DSize)(int); 48 typedef void *CUstream; 49 50 typedef enum { 51 CUDA_SUCCESS = 0, 52 CUDA_ERROR_INVALID_VALUE = 1, 53 CUDA_ERROR_OUT_OF_MEMORY = 2, 54 CUDA_ERROR_INVALID_CONTEXT = 201, 55 CUDA_ERROR_NOT_FOUND = 500, 56 CUDA_ERROR_NOT_READY = 600, 57 CUDA_ERROR_LAUNCH_FAILED = 719, 58 CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE = 720, 59 CUDA_ERROR_NOT_PERMITTED = 800, 60 CUDA_ERROR_NOT_SUPPORTED = 801, 61 CUDA_ERROR_UNKNOWN = 999 62 } CUresult; 63 64 typedef enum { 65 CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1, 66 CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10, 67 CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12, 68 CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13, 69 CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15, 70 CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16, 71 CU_DEVICE_ATTRIBUTE_INTEGRATED = 18, 72 CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19, 73 CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20, 74 CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31, 75 CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39, 76 CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40, 77 CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR = 82 78 } CUdevice_attribute; 79 80 enum { 81 CU_EVENT_DEFAULT = 0, 82 CU_EVENT_DISABLE_TIMING = 2 83 }; 84 85 typedef enum { 86 CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0, 87 CU_FUNC_ATTRIBUTE_NUM_REGS = 4 88 } CUfunction_attribute; 89 90 typedef enum { 91 CU_JIT_WALL_TIME = 2, 92 CU_JIT_INFO_LOG_BUFFER = 3, 93 CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES = 4, 94 CU_JIT_ERROR_LOG_BUFFER = 5, 95 CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES = 6, 96 CU_JIT_OPTIMIZATION_LEVEL = 7, 97 CU_JIT_LOG_VERBOSE = 12 98 } CUjit_option; 99 100 typedef enum { 101 CU_JIT_INPUT_PTX = 1 102 } CUjitInputType; 103 104 enum { 105 CU_CTX_SCHED_AUTO = 0 106 }; 107 108 #define CU_LAUNCH_PARAM_END ((void *) 0) 109 #define CU_LAUNCH_PARAM_BUFFER_POINTER ((void *) 1) 110 #define CU_LAUNCH_PARAM_BUFFER_SIZE ((void *) 2) 111 112 enum { 113 CU_STREAM_DEFAULT = 0, 114 CU_STREAM_NON_BLOCKING = 1 115 }; 116 117 #define cuCtxCreate cuCtxCreate_v2 118 CUresult cuCtxCreate (CUcontext *, unsigned, CUdevice); 119 #define cuCtxDestroy cuCtxDestroy_v2 120 CUresult cuCtxDestroy (CUcontext); 121 CUresult cuCtxGetCurrent (CUcontext *); 122 CUresult cuCtxGetDevice (CUdevice *); 123 #define cuCtxPopCurrent cuCtxPopCurrent_v2 124 CUresult cuCtxPopCurrent (CUcontext *); 125 #define cuCtxPushCurrent cuCtxPushCurrent_v2 126 CUresult cuCtxPushCurrent (CUcontext); 127 CUresult cuCtxSynchronize (void); 128 CUresult cuDeviceGet (CUdevice *, int); 129 #define cuDeviceTotalMem cuDeviceTotalMem_v2 130 CUresult cuDeviceTotalMem (size_t *, CUdevice); 131 CUresult cuDeviceGetAttribute (int *, CUdevice_attribute, CUdevice); 132 CUresult cuDeviceGetCount (int *); 133 CUresult cuDeviceGetName (char *, int, CUdevice); 134 CUresult cuEventCreate (CUevent *, unsigned); 135 #define cuEventDestroy cuEventDestroy_v2 136 CUresult cuEventDestroy (CUevent); 137 CUresult cuEventElapsedTime (float *, CUevent, CUevent); 138 CUresult cuEventQuery (CUevent); 139 CUresult cuEventRecord (CUevent, CUstream); 140 CUresult cuEventSynchronize (CUevent); 141 CUresult cuFuncGetAttribute (int *, CUfunction_attribute, CUfunction); 142 CUresult cuGetErrorString (CUresult, const char **); 143 CUresult cuInit (unsigned); 144 CUresult cuDriverGetVersion (int *); 145 CUresult cuLaunchKernel (CUfunction, unsigned, unsigned, unsigned, unsigned, 146 unsigned, unsigned, unsigned, CUstream, void **, void **); 147 #define cuLinkAddData cuLinkAddData_v2 148 CUresult cuLinkAddData (CUlinkState, CUjitInputType, void *, size_t, const char *, 149 unsigned, CUjit_option *, void **); 150 CUresult cuLinkComplete (CUlinkState, void **, size_t *); 151 #define cuLinkCreate cuLinkCreate_v2 152 CUresult cuLinkCreate (unsigned, CUjit_option *, void **, CUlinkState *); 153 CUresult cuLinkDestroy (CUlinkState); 154 #define cuMemGetInfo cuMemGetInfo_v2 155 CUresult cuMemGetInfo (size_t *, size_t *); 156 #define cuMemAlloc cuMemAlloc_v2 157 CUresult cuMemAlloc (CUdeviceptr *, size_t); 158 #define cuMemAllocHost cuMemAllocHost_v2 159 CUresult cuMemAllocHost (void **, size_t); 160 CUresult cuMemcpy (CUdeviceptr, CUdeviceptr, size_t); 161 #define cuMemcpyDtoDAsync cuMemcpyDtoDAsync_v2 162 CUresult cuMemcpyDtoDAsync (CUdeviceptr, CUdeviceptr, size_t, CUstream); 163 #define cuMemcpyDtoH cuMemcpyDtoH_v2 164 CUresult cuMemcpyDtoH (void *, CUdeviceptr, size_t); 165 #define cuMemcpyDtoHAsync cuMemcpyDtoHAsync_v2 166 CUresult cuMemcpyDtoHAsync (void *, CUdeviceptr, size_t, CUstream); 167 #define cuMemcpyHtoD cuMemcpyHtoD_v2 168 CUresult cuMemcpyHtoD (CUdeviceptr, const void *, size_t); 169 #define cuMemcpyHtoDAsync cuMemcpyHtoDAsync_v2 170 CUresult cuMemcpyHtoDAsync (CUdeviceptr, const void *, size_t, CUstream); 171 #define cuMemFree cuMemFree_v2 172 CUresult cuMemFree (CUdeviceptr); 173 CUresult cuMemFreeHost (void *); 174 #define cuMemGetAddressRange cuMemGetAddressRange_v2 175 CUresult cuMemGetAddressRange (CUdeviceptr *, size_t *, CUdeviceptr); 176 #define cuMemHostGetDevicePointer cuMemHostGetDevicePointer_v2 177 CUresult cuMemHostGetDevicePointer (CUdeviceptr *, void *, unsigned); 178 CUresult cuModuleGetFunction (CUfunction *, CUmodule, const char *); 179 #define cuModuleGetGlobal cuModuleGetGlobal_v2 180 CUresult cuModuleGetGlobal (CUdeviceptr *, size_t *, CUmodule, const char *); 181 CUresult cuModuleLoad (CUmodule *, const char *); 182 CUresult cuModuleLoadData (CUmodule *, const void *); 183 CUresult cuModuleUnload (CUmodule); 184 CUresult cuOccupancyMaxPotentialBlockSize(int *, int *, CUfunction, 185 CUoccupancyB2DSize, size_t, int); 186 typedef void (*CUstreamCallback)(CUstream, CUresult, void *); 187 CUresult cuStreamAddCallback(CUstream, CUstreamCallback, void *, unsigned int); 188 CUresult cuStreamCreate (CUstream *, unsigned); 189 #define cuStreamDestroy cuStreamDestroy_v2 190 CUresult cuStreamDestroy (CUstream); 191 CUresult cuStreamQuery (CUstream); 192 CUresult cuStreamSynchronize (CUstream); 193 CUresult cuStreamWaitEvent (CUstream, CUevent, unsigned); 194 195 #endif /* GCC_CUDA_H */ 196