cuda.h 6.9 KB

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