There are four differences compared to the original C API. 1. Not all functions are ported. 2. Errors are translated into CUDARuntimeError exceptions. 3. The 'cuda' prefix of each API is omitted and the next character is set to lower case. 4. The resulting values are returned directly instead of references. """ import ctypes import sys from cupy.cuda import internal if 'win32' == sys.platform: _cudart = internal.load_library( internal.get_windows_cuda_library_names('cudart')) else: _cudart = internal.load_library('cudart') ############################################################################### # Types ############################################################################### Device = ctypes.c_int Function = ctypes.c_void_p Stream = ctypes.c_void_p Event = ctypes.c_void_p memcpyHostToHost = 0 memcpyHostToDevice = 1 memcpyDeviceToHost = 2
"""Thin wrapper of CUBLAS.""" import ctypes from cupy.cuda import driver from cupy.cuda import internal _cublas = internal.load_library('cublas') _I = ctypes.c_int _P = ctypes.c_void_p _F = ctypes.c_float _D = ctypes.c_double _IP = ctypes.POINTER(_I) _FP = ctypes.POINTER(_F) _DP = ctypes.POINTER(_D) Handle = _P CUBLAS_OP_N = 0 CUBLAS_OP_T = 1 CUBLAS_OP_C = 2 CUBLAS_POINTER_MODE_HOST = 0 CUBLAS_POINTER_MODE_DEVICE = 1 ############################################################################### # Error handling ############################################################################### STATUS = { 0: 'CUBLAS_STATUS_SUCCESS',
"""Thin wrapper of CUDA Runtime API. There are four differences compared to the original C API. 1. Not all functions are ported. 2. Errors are translated into CUDARuntimeError exceptions. 3. The 'cuda' prefix of each API is omitted and the next character is set to lower case. 4. The resulting values are returned directly instead of references. """ import ctypes from cupy.cuda import internal _cudart = internal.load_library('cudart') ############################################################################### # Types ############################################################################### Device = ctypes.c_int Function = ctypes.c_void_p Stream = ctypes.c_void_p Event = ctypes.c_void_p memcpyHostToHost = 0 memcpyHostToDevice = 1 memcpyDeviceToHost = 2 memcpyDeviceToDevice = 3 memcpyDefault = 4
1. Not all functions are ported. 2. Errors are translated into CUDADriverError exceptions. 3. The 'cu' prefix of each API is omitted and the next character is set to lower case. 4. The resulting values are returned directly instead of references. """ import ctypes import sys import six from cupy.cuda import internal if 'win32' == sys.platform: _cuda = internal.load_library('nvcuda') else: _cuda = internal.load_library('cuda') ############################################################################### # Types ############################################################################### Device = ctypes.c_int Context = ctypes.c_void_p Module = ctypes.c_void_p Function = ctypes.c_void_p Stream = ctypes.c_void_p Event = ctypes.c_void_p ###############################################################################
"""Thin wrapper of cuRAND.""" import ctypes from cupy.cuda import internal from cupy.cuda import runtime _curand = internal.load_library('curand') _I = ctypes.c_int _U = ctypes.c_uint _S = ctypes.c_size_t _ULL = ctypes.c_ulonglong _P = ctypes.c_void_p _IP = ctypes.POINTER(_I) _UP = ctypes.POINTER(_U) _ULLP = ctypes.POINTER(_ULL) _F = ctypes.c_float _D = ctypes.c_double _FP = ctypes.POINTER(_F) _DP = ctypes.POINTER(_D) CURAND_RNG_PSEUDO_DEFAULT = 100 CURAND_RNG_PSEUDO_XORWOW = 101 CURAND_RNG_PSEUDO_MRG32K3A = 121 CURAND_RNG_PSEUDO_MTGP32 = 141 CURAND_RNG_PSEUDO_MT19937 = 142 CURAND_RNG_PSEUDO_PHILOX4_32_10 = 161 CURAND_RNG_QUASI_DEFAULT = 200 CURAND_RNG_QUASI_SOBOL32 = 201 CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202 CURAND_RNG_QUASI_SOBOL64 = 203
"""Thin wrapper of cuRAND.""" import ctypes import sys from cupy.cuda import internal from cupy.cuda import runtime if 'win32' == sys.platform: _curand = internal.load_library( internal.get_windows_cuda_library_names('curand')) else: _curand = internal.load_library('curand') _I = ctypes.c_int _U = ctypes.c_uint _S = ctypes.c_size_t _ULL = ctypes.c_ulonglong _P = ctypes.c_void_p _IP = ctypes.POINTER(_I) _UP = ctypes.POINTER(_U) _ULLP = ctypes.POINTER(_ULL) _F = ctypes.c_float _D = ctypes.c_double _FP = ctypes.POINTER(_F) _DP = ctypes.POINTER(_D) CURAND_RNG_PSEUDO_DEFAULT = 100 CURAND_RNG_PSEUDO_XORWOW = 101 CURAND_RNG_PSEUDO_MRG32K3A = 121 CURAND_RNG_PSEUDO_MTGP32 = 141 CURAND_RNG_PSEUDO_MT19937 = 142
"""Thin wrapper of cuRAND.""" import ctypes from cupy.cuda import internal from cupy.cuda import runtime _curand = internal.load_library("curand") _I = ctypes.c_int _U = ctypes.c_uint _S = ctypes.c_size_t _ULL = ctypes.c_ulonglong _P = ctypes.c_void_p _IP = ctypes.POINTER(_I) _UP = ctypes.POINTER(_U) _ULLP = ctypes.POINTER(_ULL) _F = ctypes.c_float _D = ctypes.c_double _FP = ctypes.POINTER(_F) _DP = ctypes.POINTER(_D) CURAND_RNG_PSEUDO_DEFAULT = 100 CURAND_RNG_PSEUDO_XORWOW = 101 CURAND_RNG_PSEUDO_MRG32K3A = 121 CURAND_RNG_PSEUDO_MTGP32 = 141 CURAND_RNG_PSEUDO_MT19937 = 142 CURAND_RNG_PSEUDO_PHILOX4_32_10 = 161 CURAND_RNG_QUASI_DEFAULT = 200 CURAND_RNG_QUASI_SOBOL32 = 201 CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202 CURAND_RNG_QUASI_SOBOL64 = 203
"""Thin wrapper of CuDNN.""" # NOTE: This wrapper does not cover all APIs of CuDNN v2. import ctypes from cupy.cuda import internal from cupy.cuda import runtime _cudnn = internal.load_library('cudnn') _I = ctypes.c_int _S = ctypes.c_size_t _P = ctypes.c_void_p _IP = ctypes.POINTER(_I) _SP = ctypes.POINTER(_S) Handle = _P TensorDescriptor = _P ConvolutionDescriptor = _P PoolingDescriptor = _P FilterDescriptor = _P CUDNN_DATA_FLOAT = 0 CUDNN_DATA_DOUBLE = 1 CUDNN_TENSOR_NCHW = 0 CUDNN_TENSOR_NHWC = 1 CUDNN_ADD_IMAGE = 0 CUDNN_ADD_SAME_HW = 0 CUDNN_ADD_FEATURE_MAP = 1 CUDNN_ADD_SAME_CHW = 1
"""Thin wrapper of CUBLAS.""" import ctypes import sys from cupy.cuda import driver from cupy.cuda import internal if 'win32' == sys.platform: _cublas = internal.load_library( internal.get_windows_cuda_library_names('cublas')) else: _cublas = internal.load_library('cublas') _I = ctypes.c_int _P = ctypes.c_void_p _F = ctypes.c_float _D = ctypes.c_double _IP = ctypes.POINTER(_I) _FP = ctypes.POINTER(_F) _DP = ctypes.POINTER(_D) Handle = _P CUBLAS_OP_N = 0 CUBLAS_OP_T = 1 CUBLAS_OP_C = 2 CUBLAS_POINTER_MODE_HOST = 0 CUBLAS_POINTER_MODE_DEVICE = 1