Skip to content

Commit 1ceee45

Browse files
committed
add a test case to increase probability triggering contention
1 parent 8e3dd5b commit 1ceee45

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
import threading
5+
6+
import pytest
7+
8+
from cuda.bindings import driver
9+
from cuda_python_test_helpers import driver_version_less_than
10+
11+
NUM_THREADS = 16
12+
NUM_ITERATIONS = 500
13+
14+
15+
@pytest.mark.agent_authored(model="claude-sonnet-5-5")
16+
@pytest.mark.skipif(
17+
driver_version_less_than(12090),
18+
reason="cuLogs* functions were introduced in CUDA 12.9",
19+
)
20+
@pytest.mark.thread_unsafe(reason="starts its own threads and needs them to overlap")
21+
def test_culogs_register_unregister_from_many_threads():
22+
(err,) = driver.cuInit(0)
23+
assert err == driver.CUresult.CUDA_SUCCESS
24+
25+
barrier = threading.Barrier(NUM_THREADS)
26+
failures = []
27+
28+
def worker():
29+
try:
30+
barrier.wait()
31+
for _ in range(NUM_ITERATIONS):
32+
err, handle = driver.cuLogsRegisterCallback(0, None)
33+
assert err == driver.CUresult.CUDA_SUCCESS
34+
(err,) = driver.cuLogsUnregisterCallback(handle)
35+
assert err == driver.CUresult.CUDA_SUCCESS
36+
except BaseException as e:
37+
failures.append(e)
38+
39+
threads = [threading.Thread(target=worker) for _ in range(NUM_THREADS)]
40+
for t in threads:
41+
t.start()
42+
for t in threads:
43+
t.join()
44+
45+
assert not failures, failures

0 commit comments

Comments
 (0)