Skip to content

Commit 73fa3c0

Browse files
authored
cuda.core: CUResult, cudaError explanations (#503)
* Bring back DRIVER_CU_RESULT_EXPLANATIONS, RUNTIME_CUDA_ERROR_T_EXPLANATIONS originally created under PR #458 This code was removed from PR #458 with this commit: d3df80d * Add instructions for regenerating the dictionaries. * Use DRIVER_CU_RESULT_EXPLANATIONS, RUNTIME_CUDA_ERROR_EXPLANATIONS in cuda_utils.handle_return() * Add test_driver_cu_result_explanations_health(), test_runtime_cuda_error_explanations_health() * Add test_check_driver_error(), test_check_runtime_error() * Copy https://github.com/rwgk/stuff/blob/6fc0881d2d9a37a0c6a5352ab5908b90ab0bd41e/cuda-python/reformat_cuda_enums_from_web_as_py.py
1 parent 1c6f3bc commit 73fa3c0

File tree

5 files changed

+989
-18
lines changed

5 files changed

+989
-18
lines changed

cuda_core/cuda/core/experimental/_utils/cuda_utils.py

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
from cuda import cudart as runtime
1616
from cuda import nvrtc
1717

18+
from cuda.core.experimental._utils.driver_cu_result_explanations import DRIVER_CU_RESULT_EXPLANATIONS
19+
from cuda.core.experimental._utils.runtime_cuda_error_explanations import RUNTIME_CUDA_ERROR_EXPLANATIONS
20+
1821

1922
class CUDAError(Exception):
2023
pass
@@ -45,27 +48,45 @@ def cast_to_3_tuple(label, cfg):
4548
return cfg + (1,) * (3 - len(cfg))
4649

4750

51+
def _check_driver_error(error):
52+
if error == driver.CUresult.CUDA_SUCCESS:
53+
return
54+
name_err, name = driver.cuGetErrorName(error)
55+
if name_err != driver.CUresult.CUDA_SUCCESS:
56+
raise CUDAError(f"UNEXPECTED ERROR CODE: {error}")
57+
name = name.decode()
58+
expl = DRIVER_CU_RESULT_EXPLANATIONS.get(int(error))
59+
if expl is not None:
60+
raise CUDAError(f"{name}: {expl}")
61+
desc_err, desc = driver.cuGetErrorString(error)
62+
if desc_err != driver.CUresult.CUDA_SUCCESS:
63+
raise CUDAError(f"{name}")
64+
desc = desc.decode()
65+
raise CUDAError(f"{name}: {desc}")
66+
67+
68+
def _check_runtime_error(error):
69+
if error == runtime.cudaError_t.cudaSuccess:
70+
return
71+
name_err, name = runtime.cudaGetErrorName(error)
72+
if name_err != runtime.cudaError_t.cudaSuccess:
73+
raise CUDAError(f"UNEXPECTED ERROR CODE: {error}")
74+
name = name.decode()
75+
expl = RUNTIME_CUDA_ERROR_EXPLANATIONS.get(int(error))
76+
if expl is not None:
77+
raise CUDAError(f"{name}: {expl}")
78+
desc_err, desc = runtime.cudaGetErrorString(error)
79+
if desc_err != runtime.cudaError_t.cudaSuccess:
80+
raise CUDAError(f"{name}")
81+
desc = desc.decode()
82+
raise CUDAError(f"{name}: {desc}")
83+
84+
4885
def _check_error(error, handle=None):
4986
if isinstance(error, driver.CUresult):
50-
if error == driver.CUresult.CUDA_SUCCESS:
51-
return
52-
err, name = driver.cuGetErrorName(error)
53-
if err == driver.CUresult.CUDA_SUCCESS:
54-
err, desc = driver.cuGetErrorString(error)
55-
if err == driver.CUresult.CUDA_SUCCESS:
56-
raise CUDAError(f"{name.decode()}: {desc.decode()}")
57-
else:
58-
raise CUDAError(f"unknown error: {error}")
87+
_check_driver_error(error)
5988
elif isinstance(error, runtime.cudaError_t):
60-
if error == runtime.cudaError_t.cudaSuccess:
61-
return
62-
err, name = runtime.cudaGetErrorName(error)
63-
if err == runtime.cudaError_t.cudaSuccess:
64-
err, desc = runtime.cudaGetErrorString(error)
65-
if err == runtime.cudaError_t.cudaSuccess:
66-
raise CUDAError(f"{name.decode()}: {desc.decode()}")
67-
else:
68-
raise CUDAError(f"unknown error: {error}")
89+
_check_runtime_error(error)
6990
elif isinstance(error, nvrtc.nvrtcResult):
7091
if error == nvrtc.nvrtcResult.NVRTC_SUCCESS:
7192
return

0 commit comments

Comments
 (0)