Home | History | Annotate | Line # | Download | only in cuda
      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