2 #ifndef SINGA_UTILS_CUDA_UTILS_H_ 3 #define SINGA_UTILS_CUDA_UTILS_H_ 5 #include "singa/singa_config.h" 9 #include <cuda_runtime.h> 12 inline const char* cublasGetErrorString(cublasStatus_t error) {
14 case CUBLAS_STATUS_SUCCESS:
15 return "CUBLAS_STATUS_SUCCESS";
16 case CUBLAS_STATUS_NOT_INITIALIZED:
17 return "CUBLAS_STATUS_NOT_INITIALIZED";
18 case CUBLAS_STATUS_ALLOC_FAILED:
19 return "CUBLAS_STATUS_ALLOC_FAILED";
20 case CUBLAS_STATUS_INVALID_VALUE:
21 return "CUBLAS_STATUS_INVALID_VALUE";
22 case CUBLAS_STATUS_ARCH_MISMATCH:
23 return "CUBLAS_STATUS_ARCH_MISMATCH";
24 case CUBLAS_STATUS_MAPPING_ERROR:
25 return "CUBLAS_STATUS_MAPPING_ERROR";
26 case CUBLAS_STATUS_EXECUTION_FAILED:
27 return "CUBLAS_STATUS_EXECUTION_FAILED";
28 case CUBLAS_STATUS_INTERNAL_ERROR:
29 return "CUBLAS_STATUS_INTERNAL_ERROR";
30 #if CUDA_VERSION >= 6000 31 case CUBLAS_STATUS_NOT_SUPPORTED:
32 return "CUBLAS_STATUS_NOT_SUPPORTED";
34 #if CUDA_VERSION >= 6050 35 case CUBLAS_STATUS_LICENSE_ERROR:
36 return "CUBLAS_STATUS_LICENSE_ERROR";
39 return "Unknown cublas status";
42 inline const char* curandGetErrorString(curandStatus_t error) {
44 case CURAND_STATUS_SUCCESS:
45 return "CURAND_STATUS_SUCCESS";
46 case CURAND_STATUS_VERSION_MISMATCH:
47 return "CURAND_STATUS_VERSION_MISMATCH";
48 case CURAND_STATUS_NOT_INITIALIZED:
49 return "CURAND_STATUS_NOT_INITIALIZED";
50 case CURAND_STATUS_ALLOCATION_FAILED:
51 return "CURAND_STATUS_ALLOCATION_FAILED";
52 case CURAND_STATUS_TYPE_ERROR:
53 return "CURAND_STATUS_TYPE_ERROR";
54 case CURAND_STATUS_OUT_OF_RANGE:
55 return "CURAND_STATUS_OUT_OF_RANGE";
56 case CURAND_STATUS_LENGTH_NOT_MULTIPLE:
57 return "CURAND_STATUS_LENGTH_NOT_MULTIPLE";
58 case CURAND_STATUS_DOUBLE_PRECISION_REQUIRED:
59 return "CURAND_STATUS_DOUBLE_PRECISION_REQUIRED";
60 case CURAND_STATUS_LAUNCH_FAILURE:
61 return "CURAND_STATUS_LAUNCH_FAILURE";
62 case CURAND_STATUS_PREEXISTING_FAILURE:
63 return "CURAND_STATUS_PREEXISTING_FAILURE";
64 case CURAND_STATUS_INITIALIZATION_FAILED:
65 return "CURAND_STATUS_INITIALIZATION_FAILED";
66 case CURAND_STATUS_ARCH_MISMATCH:
67 return "CURAND_STATUS_ARCH_MISMATCH";
68 case CURAND_STATUS_INTERNAL_ERROR:
69 return "CURAND_STATUS_INTERNAL_ERROR";
71 return "Unknown curand status";
79 #define CUDA_CHECK(condition) \ 82 cudaError_t error = condition; \ 83 CHECK_EQ(error, cudaSuccess) << " " << cudaGetErrorString(error); \ 86 #define CUBLAS_CHECK(condition) \ 88 cublasStatus_t status = condition; \ 89 CHECK_EQ(status, CUBLAS_STATUS_SUCCESS) << " " \ 90 << cublasGetErrorString(status); \ 93 #define CURAND_CHECK(condition) \ 95 curandStatus_t status = condition; \ 96 CHECK_EQ(status, CURAND_STATUS_SUCCESS) << " " \ 97 << curandGetErrorString(status); \ 102 #endif // SINGA_UTILS_CUDA_UTILS_H_