Skip to content

Commit b1112af

Browse files
committed
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) (cherry picked from commit 32f088e)
1 parent f568268 commit b1112af

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 with version 12.9.0. Do not modify it directly.
6-
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=c4957d188c7c3258823fd50e2eb0cba162810911af7294ab726f1e49769642c8
6+
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=d382464130e581b718a589e652053c30057e65ddc824b2c79a903341858f1e88
77

88

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

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

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

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

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

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

19111911
global __cuCheckpointProcessGetRestoreThreadId
19121912
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 with version 12.9.0. Do not modify it directly.
6-
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=d36a59b7d4c8939f88b07a4600cbd4251a2ed69571b425bb6009a626cfd4dc3e
6+
# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=895c345db6512915d2c6c9f27757175413ce053e7356b6eeb890478159cdc918
77

88

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

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

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

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

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

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

19141914
global __cuCheckpointProcessGetRestoreThreadId
19151915
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,8 +2,10 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
import ctypes
5+
import os
56
import platform
67
import shutil
8+
import tempfile
79
import textwrap
810

911
import numpy as np
@@ -12,6 +14,7 @@
1214
import cuda.cuda as cuda
1315
import cuda.cudart as cudart
1416
from cuda.bindings import driver
17+
from cuda.bindings._internal.utils import FunctionNotFoundError
1518

1619

1720
def driverVersionLessThan(target):
@@ -1146,6 +1149,39 @@ def test_cuCheckpointProcessGetState_failure():
11461149
assert state is None
11471150

11481151

1152+
@pytest.mark.skipif(
1153+
driverVersionLessThan(12090),
1154+
reason="cuLogs* functions were introduced in CUDA 12.9",
1155+
)
1156+
def test_culogs_functions():
1157+
try:
1158+
err, callback_handle = cuda.cuLogsRegisterCallback(0, None)
1159+
assert err == cuda.CUresult.CUDA_SUCCESS
1160+
1161+
err, _ = cuda.cuLogsCurrent(0)
1162+
assert err == cuda.CUresult.CUDA_SUCCESS
1163+
1164+
with tempfile.NamedTemporaryFile(delete=False) as f:
1165+
log_path = f.name
1166+
try:
1167+
err, _ = cuda.cuLogsDumpToFile(None, log_path.encode(), 0)
1168+
assert err == cuda.CUresult.CUDA_SUCCESS
1169+
finally:
1170+
os.remove(log_path)
1171+
1172+
# cuLogsDumpToMemory's own docstring states the driver's internal log
1173+
# buffer is capped at 25600 bytes, so a buffer of that size is always
1174+
# large enough to hold the dump without risking a buffer overrun.
1175+
buf = bytearray(25600)
1176+
err, _, _ = cuda.cuLogsDumpToMemory(None, buf, len(buf), 0)
1177+
assert err == cuda.CUresult.CUDA_SUCCESS
1178+
1179+
(err,) = cuda.cuLogsUnregisterCallback(callback_handle)
1180+
assert err == cuda.CUresult.CUDA_SUCCESS
1181+
except FunctionNotFoundError as e:
1182+
pytest.fail(f"cuLogs* function unexpectedly not found on the driver: {e}")
1183+
1184+
11491185
def test_private_function_pointer_inspector():
11501186
from cuda.bindings._internal.driver import _inspect_function_pointer
11511187

0 commit comments

Comments
 (0)