Skip to content

Commit 32f088e

Browse files
authored
fix(driver): regenerate bindings, correct cuLogs* introduced version to 12.9 (#2978)
* rebase and regenerate * test(driver): add regression test for cuLogs* version pinning Adds test_culogs_functions_are_resolved to confirm cuLogsRegisterCallback, cuLogsUnregisterCallback, cuLogsCurrent, cuLogsDumpToFile, and cuLogsDumpToMemory are resolved by cuGetProcAddress_v2 and do not raise FunctionNotFoundError, guarding against the version mismatch fixed in this PR. Addresses review feedback on #2978, closes #2979. * add regression test, driver log could be non zero, for example per cudaVersion argument (13030) exceeds the driver version (13020)
1 parent 8269b3b commit 32f088e

3 files changed

Lines changed: 48 additions & 12 deletions

File tree

‎cuda_bindings/cuda/bindings/_internal/driver_linux.pyx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0
44
#
55
# This code was automatically generated across versions from 12.9.0 to 13.4.1. Do not modify it directly.
6-
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=f23c5b6833163c19813f5a513216d2a4192b545a5ae8a47ffe7c95ebbc9bdbaf
6+
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=c6a477ceb1a35675c0ffe5e40f9826ea3e3bd9cbec23720f78fe4cf28feafbe0
77

88

99
# <<<< PREAMBLE CONTENT >>>>
@@ -1896,19 +1896,19 @@ cdef int _init_driver() except -1 nogil:
18961896
cuGetProcAddress_v2('cuGreenCtxStreamCreate', <void **>&__cuGreenCtxStreamCreate, 12050, ptds_mode, NULL)
18971897

18981898
global __cuLogsRegisterCallback
1899-
cuGetProcAddress_v2('cuLogsRegisterCallback', <void **>&__cuLogsRegisterCallback, 12080, ptds_mode, NULL)
1899+
cuGetProcAddress_v2('cuLogsRegisterCallback', <void **>&__cuLogsRegisterCallback, 12090, ptds_mode, NULL)
19001900

19011901
global __cuLogsUnregisterCallback
1902-
cuGetProcAddress_v2('cuLogsUnregisterCallback', <void **>&__cuLogsUnregisterCallback, 12080, ptds_mode, NULL)
1902+
cuGetProcAddress_v2('cuLogsUnregisterCallback', <void **>&__cuLogsUnregisterCallback, 12090, ptds_mode, NULL)
19031903

19041904
global __cuLogsCurrent
1905-
cuGetProcAddress_v2('cuLogsCurrent', <void **>&__cuLogsCurrent, 12080, ptds_mode, NULL)
1905+
cuGetProcAddress_v2('cuLogsCurrent', <void **>&__cuLogsCurrent, 12090, ptds_mode, NULL)
19061906

19071907
global __cuLogsDumpToFile
1908-
cuGetProcAddress_v2('cuLogsDumpToFile', <void **>&__cuLogsDumpToFile, 12080, ptds_mode, NULL)
1908+
cuGetProcAddress_v2('cuLogsDumpToFile', <void **>&__cuLogsDumpToFile, 12090, ptds_mode, NULL)
19091909

19101910
global __cuLogsDumpToMemory
1911-
cuGetProcAddress_v2('cuLogsDumpToMemory', <void **>&__cuLogsDumpToMemory, 12080, ptds_mode, NULL)
1911+
cuGetProcAddress_v2('cuLogsDumpToMemory', <void **>&__cuLogsDumpToMemory, 12090, ptds_mode, NULL)
19121912

19131913
global __cuCheckpointProcessGetRestoreThreadId
19141914
cuGetProcAddress_v2('cuCheckpointProcessGetRestoreThreadId', <void **>&__cuCheckpointProcessGetRestoreThreadId, 12080, ptds_mode, NULL)

‎cuda_bindings/cuda/bindings/_internal/driver_windows.pyx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0
44
#
55
# This code was automatically generated across versions from 12.9.0 to 13.4.1. Do not modify it directly.
6-
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=f49a90c93b3876714d90f8948fabc654d408ba6c8bc3a122503b1d1ef663f434
6+
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=a04dbfec5a461010c493b3aca0b092910ff3eb49d31942a68c957309892b2aa6
77

88

99
# <<<< PREAMBLE CONTENT >>>>
@@ -1899,19 +1899,19 @@ cdef int _init_driver() except -1 nogil:
18991899
cuGetProcAddress_v2('cuGreenCtxStreamCreate', <void **>&__cuGreenCtxStreamCreate, 12050, ptds_mode, NULL)
19001900

19011901
global __cuLogsRegisterCallback
1902-
cuGetProcAddress_v2('cuLogsRegisterCallback', <void **>&__cuLogsRegisterCallback, 12080, ptds_mode, NULL)
1902+
cuGetProcAddress_v2('cuLogsRegisterCallback', <void **>&__cuLogsRegisterCallback, 12090, ptds_mode, NULL)
19031903

19041904
global __cuLogsUnregisterCallback
1905-
cuGetProcAddress_v2('cuLogsUnregisterCallback', <void **>&__cuLogsUnregisterCallback, 12080, ptds_mode, NULL)
1905+
cuGetProcAddress_v2('cuLogsUnregisterCallback', <void **>&__cuLogsUnregisterCallback, 12090, ptds_mode, NULL)
19061906

19071907
global __cuLogsCurrent
1908-
cuGetProcAddress_v2('cuLogsCurrent', <void **>&__cuLogsCurrent, 12080, ptds_mode, NULL)
1908+
cuGetProcAddress_v2('cuLogsCurrent', <void **>&__cuLogsCurrent, 12090, ptds_mode, NULL)
19091909

19101910
global __cuLogsDumpToFile
1911-
cuGetProcAddress_v2('cuLogsDumpToFile', <void **>&__cuLogsDumpToFile, 12080, ptds_mode, NULL)
1911+
cuGetProcAddress_v2('cuLogsDumpToFile', <void **>&__cuLogsDumpToFile, 12090, ptds_mode, NULL)
19121912

19131913
global __cuLogsDumpToMemory
1914-
cuGetProcAddress_v2('cuLogsDumpToMemory', <void **>&__cuLogsDumpToMemory, 12080, ptds_mode, NULL)
1914+
cuGetProcAddress_v2('cuLogsDumpToMemory', <void **>&__cuLogsDumpToMemory, 12090, ptds_mode, NULL)
19151915

19161916
global __cuCheckpointProcessGetRestoreThreadId
19171917
cuGetProcAddress_v2('cuCheckpointProcessGetRestoreThreadId', <void **>&__cuCheckpointProcessGetRestoreThreadId, 12080, ptds_mode, NULL)

‎cuda_bindings/tests/test_cuda.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
import ctypes
5+
import os
56
import shutil
7+
import tempfile
68
import textwrap
79

810
import numpy as np
@@ -13,6 +15,7 @@
1315
import cuda.bindings.driver as cuda
1416
import cuda.bindings.runtime as cudart
1517
from cuda.bindings import driver
18+
from cuda.bindings._internal.utils import FunctionNotFoundError
1619
from cuda_python_test_helpers import driver_version_less_than
1720

1821

@@ -974,6 +977,39 @@ def test_cuCheckpointProcessGetState_failure():
974977
assert state is None
975978

976979

980+
@pytest.mark.skipif(
981+
driver_version_less_than(12090),
982+
reason="cuLogs* functions were introduced in CUDA 12.9",
983+
)
984+
def test_culogs_functions():
985+
try:
986+
err, callback_handle = cuda.cuLogsRegisterCallback(0, None)
987+
assert err == cuda.CUresult.CUDA_SUCCESS
988+
989+
err, _ = cuda.cuLogsCurrent(0)
990+
assert err == cuda.CUresult.CUDA_SUCCESS
991+
992+
with tempfile.NamedTemporaryFile(delete=False) as f:
993+
log_path = f.name
994+
try:
995+
err, _ = cuda.cuLogsDumpToFile(None, log_path.encode(), 0)
996+
assert err == cuda.CUresult.CUDA_SUCCESS
997+
finally:
998+
os.remove(log_path)
999+
1000+
# cuLogsDumpToMemory's own docstring states the driver's internal log
1001+
# buffer is capped at 25600 bytes, so a buffer of that size is always
1002+
# large enough to hold the dump without risking a buffer overrun.
1003+
buf = bytearray(25600)
1004+
err, _, _ = cuda.cuLogsDumpToMemory(None, buf, len(buf), 0)
1005+
assert err == cuda.CUresult.CUDA_SUCCESS
1006+
1007+
(err,) = cuda.cuLogsUnregisterCallback(callback_handle)
1008+
assert err == cuda.CUresult.CUDA_SUCCESS
1009+
except FunctionNotFoundError as e:
1010+
pytest.fail(f"cuLogs* function unexpectedly not found on the driver: {e}")
1011+
1012+
9771013
def test_private_function_pointer_inspector():
9781014
from cuda.bindings._internal.driver import _inspect_function_pointer
9791015

0 commit comments

Comments
 (0)