Skip to content

Commit 229e893

Browse files
mdboomleofang
andauthored
Improve #789: Remove cyclical dependency between cuda.bindings.{driver|runtime} and c.b.utils (#840)
* Improve #789: Remove cyclical dependency between {driver|runtime} and utils Rather than having bindings.utils._get_handle.pyx depend on driver and runtime and define the getters there, this flips things so driver and runtime register their own handlers. * Defer imports * cdef on _add_cuda_native_handlers --------- Co-authored-by: Leo Fang <leof@nvidia.com>
1 parent 127f798 commit 229e893

File tree

4 files changed

+251
-235
lines changed

4 files changed

+251
-235
lines changed

cuda_bindings/cuda/bindings/driver.pyx.in

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53948,3 +53948,125 @@ def sizeof(objType):
5394853948
if objType == VdpOutputSurface:
5394953949
return sizeof(cydriver.VdpOutputSurface){{endif}}
5395053950
raise TypeError("Unknown type: " + str(objType))
53951+
53952+
cdef int _add_native_handle_getters() except?-1:
53953+
from cuda.bindings.utils import _add_cuda_native_handle_getter
53954+
{{if 'CUcontext' in found_types}}
53955+
def CUcontext_getter(CUcontext x): return <uintptr_t><void*><cydriver.CUcontext>(x._pvt_ptr[0])
53956+
_add_cuda_native_handle_getter(CUcontext, CUcontext_getter)
53957+
{{endif}}
53958+
{{if 'CUmodule' in found_types}}
53959+
def CUmodule_getter(CUmodule x): return <uintptr_t><void*><cydriver.CUmodule>(x._pvt_ptr[0])
53960+
_add_cuda_native_handle_getter(CUmodule, CUmodule_getter)
53961+
{{endif}}
53962+
{{if 'CUfunction' in found_types}}
53963+
def CUfunction_getter(CUfunction x): return <uintptr_t><void*><cydriver.CUfunction>(x._pvt_ptr[0])
53964+
_add_cuda_native_handle_getter(CUfunction, CUfunction_getter)
53965+
{{endif}}
53966+
{{if 'CUlibrary' in found_types}}
53967+
def CUlibrary_getter(CUlibrary x): return <uintptr_t><void*><cydriver.CUlibrary>(x._pvt_ptr[0])
53968+
_add_cuda_native_handle_getter(CUlibrary, CUlibrary_getter)
53969+
{{endif}}
53970+
{{if 'CUkernel' in found_types}}
53971+
def CUkernel_getter(CUkernel x): return <uintptr_t><void*><cydriver.CUkernel>(x._pvt_ptr[0])
53972+
_add_cuda_native_handle_getter(CUkernel, CUkernel_getter)
53973+
{{endif}}
53974+
{{if 'CUarray' in found_types}}
53975+
def CUarray_getter(CUarray x): return <uintptr_t><void*><cydriver.CUarray>(x._pvt_ptr[0])
53976+
_add_cuda_native_handle_getter(CUarray, CUarray_getter)
53977+
{{endif}}
53978+
{{if 'CUmipmappedArray' in found_types}}
53979+
def CUmipmappedArray_getter(CUmipmappedArray x): return <uintptr_t><void*><cydriver.CUmipmappedArray>(x._pvt_ptr[0])
53980+
_add_cuda_native_handle_getter(CUmipmappedArray, CUmipmappedArray_getter)
53981+
{{endif}}
53982+
{{if 'CUtexref' in found_types}}
53983+
def CUtexref_getter(CUtexref x): return <uintptr_t><void*><cydriver.CUtexref>(x._pvt_ptr[0])
53984+
_add_cuda_native_handle_getter(CUtexref, CUtexref_getter)
53985+
{{endif}}
53986+
{{if 'CUsurfref' in found_types}}
53987+
def CUsurfref_getter(CUsurfref x): return <uintptr_t><void*><cydriver.CUsurfref>(x._pvt_ptr[0])
53988+
_add_cuda_native_handle_getter(CUsurfref, CUsurfref_getter)
53989+
{{endif}}
53990+
{{if 'CUevent' in found_types}}
53991+
def CUevent_getter(CUevent x): return <uintptr_t><void*><cydriver.CUevent>(x._pvt_ptr[0])
53992+
_add_cuda_native_handle_getter(CUevent, CUevent_getter)
53993+
{{endif}}
53994+
{{if 'CUstream' in found_types}}
53995+
def CUstream_getter(CUstream x): return <uintptr_t><void*><cydriver.CUstream>(x._pvt_ptr[0])
53996+
_add_cuda_native_handle_getter(CUstream, CUstream_getter)
53997+
{{endif}}
53998+
{{if 'CUgraphicsResource' in found_types}}
53999+
def CUgraphicsResource_getter(CUgraphicsResource x): return <uintptr_t><void*><cydriver.CUgraphicsResource>(x._pvt_ptr[0])
54000+
_add_cuda_native_handle_getter(CUgraphicsResource, CUgraphicsResource_getter)
54001+
{{endif}}
54002+
{{if 'CUexternalMemory' in found_types}}
54003+
def CUexternalMemory_getter(CUexternalMemory x): return <uintptr_t><void*><cydriver.CUexternalMemory>(x._pvt_ptr[0])
54004+
_add_cuda_native_handle_getter(CUexternalMemory, CUexternalMemory_getter)
54005+
{{endif}}
54006+
{{if 'CUexternalSemaphore' in found_types}}
54007+
def CUexternalSemaphore_getter(CUexternalSemaphore x): return <uintptr_t><void*><cydriver.CUexternalSemaphore>(x._pvt_ptr[0])
54008+
_add_cuda_native_handle_getter(CUexternalSemaphore, CUexternalSemaphore_getter)
54009+
{{endif}}
54010+
{{if 'CUgraph' in found_types}}
54011+
def CUgraph_getter(CUgraph x): return <uintptr_t><void*><cydriver.CUgraph>(x._pvt_ptr[0])
54012+
_add_cuda_native_handle_getter(CUgraph, CUgraph_getter)
54013+
{{endif}}
54014+
{{if 'CUgraphNode' in found_types}}
54015+
def CUgraphNode_getter(CUgraphNode x): return <uintptr_t><void*><cydriver.CUgraphNode>(x._pvt_ptr[0])
54016+
_add_cuda_native_handle_getter(CUgraphNode, CUgraphNode_getter)
54017+
{{endif}}
54018+
{{if 'CUgraphExec' in found_types}}
54019+
def CUgraphExec_getter(CUgraphExec x): return <uintptr_t><void*><cydriver.CUgraphExec>(x._pvt_ptr[0])
54020+
_add_cuda_native_handle_getter(CUgraphExec, CUgraphExec_getter)
54021+
{{endif}}
54022+
{{if 'CUmemoryPool' in found_types}}
54023+
def CUmemoryPool_getter(CUmemoryPool x): return <uintptr_t><void*><cydriver.CUmemoryPool>(x._pvt_ptr[0])
54024+
_add_cuda_native_handle_getter(CUmemoryPool, CUmemoryPool_getter)
54025+
{{endif}}
54026+
{{if 'CUuserObject' in found_types}}
54027+
def CUuserObject_getter(CUuserObject x): return <uintptr_t><void*><cydriver.CUuserObject>(x._pvt_ptr[0])
54028+
_add_cuda_native_handle_getter(CUuserObject, CUuserObject_getter)
54029+
{{endif}}
54030+
{{if 'CUgraphDeviceNode' in found_types}}
54031+
def CUgraphDeviceNode_getter(CUgraphDeviceNode x): return <uintptr_t><void*><cydriver.CUgraphDeviceNode>(x._pvt_ptr[0])
54032+
_add_cuda_native_handle_getter(CUgraphDeviceNode, CUgraphDeviceNode_getter)
54033+
{{endif}}
54034+
{{if 'CUasyncCallbackHandle' in found_types}}
54035+
def CUasyncCallbackHandle_getter(CUasyncCallbackHandle x): return <uintptr_t><void*><cydriver.CUasyncCallbackHandle>(x._pvt_ptr[0])
54036+
_add_cuda_native_handle_getter(CUasyncCallbackHandle, CUasyncCallbackHandle_getter)
54037+
{{endif}}
54038+
{{if 'CUgreenCtx' in found_types}}
54039+
def CUgreenCtx_getter(CUgreenCtx x): return <uintptr_t><void*><cydriver.CUgreenCtx>(x._pvt_ptr[0])
54040+
_add_cuda_native_handle_getter(CUgreenCtx, CUgreenCtx_getter)
54041+
{{endif}}
54042+
{{if 'CUlinkState' in found_types}}
54043+
def CUlinkState_getter(CUlinkState x): return <uintptr_t><void*><cydriver.CUlinkState>(x._pvt_ptr[0])
54044+
_add_cuda_native_handle_getter(CUlinkState, CUlinkState_getter)
54045+
{{endif}}
54046+
{{if 'CUdevResourceDesc' in found_types}}
54047+
def CUdevResourceDesc_getter(CUdevResourceDesc x): return <uintptr_t><void*><cydriver.CUdevResourceDesc>(x._pvt_ptr[0])
54048+
_add_cuda_native_handle_getter(CUdevResourceDesc, CUdevResourceDesc_getter)
54049+
{{endif}}
54050+
{{if 'CUlogsCallbackHandle' in found_types}}
54051+
def CUlogsCallbackHandle_getter(CUlogsCallbackHandle x): return <uintptr_t><void*><cydriver.CUlogsCallbackHandle>(x._pvt_ptr[0])
54052+
_add_cuda_native_handle_getter(CUlogsCallbackHandle, CUlogsCallbackHandle_getter)
54053+
{{endif}}
54054+
{{if True}}
54055+
def CUeglStreamConnection_getter(CUeglStreamConnection x): return <uintptr_t><void*><cydriver.CUeglStreamConnection>(x._pvt_ptr[0])
54056+
_add_cuda_native_handle_getter(CUeglStreamConnection, CUeglStreamConnection_getter)
54057+
{{endif}}
54058+
{{if True}}
54059+
def EGLImageKHR_getter(EGLImageKHR x): return <uintptr_t><void*><cydriver.EGLImageKHR>(x._pvt_ptr[0])
54060+
_add_cuda_native_handle_getter(EGLImageKHR, EGLImageKHR_getter)
54061+
{{endif}}
54062+
{{if True}}
54063+
def EGLStreamKHR_getter(EGLStreamKHR x): return <uintptr_t><void*><cydriver.EGLStreamKHR>(x._pvt_ptr[0])
54064+
_add_cuda_native_handle_getter(EGLStreamKHR, EGLStreamKHR_getter)
54065+
{{endif}}
54066+
{{if True}}
54067+
def EGLSyncKHR_getter(EGLSyncKHR x): return <uintptr_t><void*><cydriver.EGLSyncKHR>(x._pvt_ptr[0])
54068+
_add_cuda_native_handle_getter(EGLSyncKHR, EGLSyncKHR_getter)
54069+
{{endif}}
54070+
return 0
54071+
_add_native_handle_getters()
54072+

cuda_bindings/cuda/bindings/runtime.pyx.in

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37912,3 +37912,105 @@ def sizeof(objType):
3791237912
if objType == cudaEglStreamConnection:
3791337913
return sizeof(cyruntime.cudaEglStreamConnection){{endif}}
3791437914
raise TypeError("Unknown type: " + str(objType))
37915+
37916+
cdef int _add_native_handle_getters() except?-1:
37917+
from cuda.bindings.utils import _add_cuda_native_handle_getter
37918+
{{if 'cudaArray_t' in found_types}}
37919+
def cudaArray_t_getter(cudaArray_t x): return <uintptr_t><void*><cyruntime.cudaArray_t>(x._pvt_ptr[0])
37920+
_add_cuda_native_handle_getter(cudaArray_t, cudaArray_t_getter)
37921+
{{endif}}
37922+
{{if 'cudaArray_const_t' in found_types}}
37923+
def cudaArray_const_t_getter(cudaArray_const_t x): return <uintptr_t><void*><cyruntime.cudaArray_const_t>(x._pvt_ptr[0])
37924+
_add_cuda_native_handle_getter(cudaArray_const_t, cudaArray_const_t_getter)
37925+
{{endif}}
37926+
{{if 'cudaMipmappedArray_t' in found_types}}
37927+
def cudaMipmappedArray_t_getter(cudaMipmappedArray_t x): return <uintptr_t><void*><cyruntime.cudaMipmappedArray_t>(x._pvt_ptr[0])
37928+
_add_cuda_native_handle_getter(cudaMipmappedArray_t, cudaMipmappedArray_t_getter)
37929+
{{endif}}
37930+
{{if 'cudaMipmappedArray_const_t' in found_types}}
37931+
def cudaMipmappedArray_const_t_getter(cudaMipmappedArray_const_t x): return <uintptr_t><void*><cyruntime.cudaMipmappedArray_const_t>(x._pvt_ptr[0])
37932+
_add_cuda_native_handle_getter(cudaMipmappedArray_const_t, cudaMipmappedArray_const_t_getter)
37933+
{{endif}}
37934+
{{if 'cudaStream_t' in found_types}}
37935+
def cudaStream_t_getter(cudaStream_t x): return <uintptr_t><void*><cyruntime.cudaStream_t>(x._pvt_ptr[0])
37936+
_add_cuda_native_handle_getter(cudaStream_t, cudaStream_t_getter)
37937+
{{endif}}
37938+
{{if 'cudaEvent_t' in found_types}}
37939+
def cudaEvent_t_getter(cudaEvent_t x): return <uintptr_t><void*><cyruntime.cudaEvent_t>(x._pvt_ptr[0])
37940+
_add_cuda_native_handle_getter(cudaEvent_t, cudaEvent_t_getter)
37941+
{{endif}}
37942+
{{if 'cudaGraphicsResource_t' in found_types}}
37943+
def cudaGraphicsResource_t_getter(cudaGraphicsResource_t x): return <uintptr_t><void*><cyruntime.cudaGraphicsResource_t>(x._pvt_ptr[0])
37944+
_add_cuda_native_handle_getter(cudaGraphicsResource_t, cudaGraphicsResource_t_getter)
37945+
{{endif}}
37946+
{{if 'cudaExternalMemory_t' in found_types}}
37947+
def cudaExternalMemory_t_getter(cudaExternalMemory_t x): return <uintptr_t><void*><cyruntime.cudaExternalMemory_t>(x._pvt_ptr[0])
37948+
_add_cuda_native_handle_getter(cudaExternalMemory_t, cudaExternalMemory_t_getter)
37949+
{{endif}}
37950+
{{if 'cudaExternalSemaphore_t' in found_types}}
37951+
def cudaExternalSemaphore_t_getter(cudaExternalSemaphore_t x): return <uintptr_t><void*><cyruntime.cudaExternalSemaphore_t>(x._pvt_ptr[0])
37952+
_add_cuda_native_handle_getter(cudaExternalSemaphore_t, cudaExternalSemaphore_t_getter)
37953+
{{endif}}
37954+
{{if 'cudaGraph_t' in found_types}}
37955+
def cudaGraph_t_getter(cudaGraph_t x): return <uintptr_t><void*><cyruntime.cudaGraph_t>(x._pvt_ptr[0])
37956+
_add_cuda_native_handle_getter(cudaGraph_t, cudaGraph_t_getter)
37957+
{{endif}}
37958+
{{if 'cudaGraphNode_t' in found_types}}
37959+
def cudaGraphNode_t_getter(cudaGraphNode_t x): return <uintptr_t><void*><cyruntime.cudaGraphNode_t>(x._pvt_ptr[0])
37960+
_add_cuda_native_handle_getter(cudaGraphNode_t, cudaGraphNode_t_getter)
37961+
{{endif}}
37962+
{{if 'cudaUserObject_t' in found_types}}
37963+
def cudaUserObject_t_getter(cudaUserObject_t x): return <uintptr_t><void*><cyruntime.cudaUserObject_t>(x._pvt_ptr[0])
37964+
_add_cuda_native_handle_getter(cudaUserObject_t, cudaUserObject_t_getter)
37965+
{{endif}}
37966+
{{if 'cudaFunction_t' in found_types}}
37967+
def cudaFunction_t_getter(cudaFunction_t x): return <uintptr_t><void*><cyruntime.cudaFunction_t>(x._pvt_ptr[0])
37968+
_add_cuda_native_handle_getter(cudaFunction_t, cudaFunction_t_getter)
37969+
{{endif}}
37970+
{{if 'cudaKernel_t' in found_types}}
37971+
def cudaKernel_t_getter(cudaKernel_t x): return <uintptr_t><void*><cyruntime.cudaKernel_t>(x._pvt_ptr[0])
37972+
_add_cuda_native_handle_getter(cudaKernel_t, cudaKernel_t_getter)
37973+
{{endif}}
37974+
{{if 'cudaLibrary_t' in found_types}}
37975+
def cudaLibrary_t_getter(cudaLibrary_t x): return <uintptr_t><void*><cyruntime.cudaLibrary_t>(x._pvt_ptr[0])
37976+
_add_cuda_native_handle_getter(cudaLibrary_t, cudaLibrary_t_getter)
37977+
{{endif}}
37978+
{{if 'cudaMemPool_t' in found_types}}
37979+
def cudaMemPool_t_getter(cudaMemPool_t x): return <uintptr_t><void*><cyruntime.cudaMemPool_t>(x._pvt_ptr[0])
37980+
_add_cuda_native_handle_getter(cudaMemPool_t, cudaMemPool_t_getter)
37981+
{{endif}}
37982+
{{if 'cudaGraphExec_t' in found_types}}
37983+
def cudaGraphExec_t_getter(cudaGraphExec_t x): return <uintptr_t><void*><cyruntime.cudaGraphExec_t>(x._pvt_ptr[0])
37984+
_add_cuda_native_handle_getter(cudaGraphExec_t, cudaGraphExec_t_getter)
37985+
{{endif}}
37986+
{{if 'cudaGraphDeviceNode_t' in found_types}}
37987+
def cudaGraphDeviceNode_t_getter(cudaGraphDeviceNode_t x): return <uintptr_t><void*><cyruntime.cudaGraphDeviceNode_t>(x._pvt_ptr[0])
37988+
_add_cuda_native_handle_getter(cudaGraphDeviceNode_t, cudaGraphDeviceNode_t_getter)
37989+
{{endif}}
37990+
{{if 'cudaAsyncCallbackHandle_t' in found_types}}
37991+
def cudaAsyncCallbackHandle_t_getter(cudaAsyncCallbackHandle_t x): return <uintptr_t><void*><cyruntime.cudaAsyncCallbackHandle_t>(x._pvt_ptr[0])
37992+
_add_cuda_native_handle_getter(cudaAsyncCallbackHandle_t, cudaAsyncCallbackHandle_t_getter)
37993+
{{endif}}
37994+
{{if 'cudaLogsCallbackHandle' in found_types}}
37995+
def cudaLogsCallbackHandle_getter(cudaLogsCallbackHandle x): return <uintptr_t><void*><cyruntime.cudaLogsCallbackHandle>(x._pvt_ptr[0])
37996+
_add_cuda_native_handle_getter(cudaLogsCallbackHandle, cudaLogsCallbackHandle_getter)
37997+
{{endif}}
37998+
{{if True}}
37999+
def EGLImageKHR_getter(EGLImageKHR x): return <uintptr_t><void*><cyruntime.EGLImageKHR>(x._pvt_ptr[0])
38000+
_add_cuda_native_handle_getter(EGLImageKHR, EGLImageKHR_getter)
38001+
{{endif}}
38002+
{{if True}}
38003+
def EGLStreamKHR_getter(EGLStreamKHR x): return <uintptr_t><void*><cyruntime.EGLStreamKHR>(x._pvt_ptr[0])
38004+
_add_cuda_native_handle_getter(EGLStreamKHR, EGLStreamKHR_getter)
38005+
{{endif}}
38006+
{{if True}}
38007+
def EGLSyncKHR_getter(EGLSyncKHR x): return <uintptr_t><void*><cyruntime.EGLSyncKHR>(x._pvt_ptr[0])
38008+
_add_cuda_native_handle_getter(EGLSyncKHR, EGLSyncKHR_getter)
38009+
{{endif}}
38010+
{{if True}}
38011+
def cudaEglStreamConnection_getter(cudaEglStreamConnection x): return <uintptr_t><void*><cyruntime.cudaEglStreamConnection>(x._pvt_ptr[0])
38012+
_add_cuda_native_handle_getter(cudaEglStreamConnection, cudaEglStreamConnection_getter)
38013+
{{endif}}
38014+
return 0
38015+
_add_native_handle_getters()
38016+
Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
33

4-
from ._get_handle import get_cuda_native_handle
4+
from typing import Any, Callable
5+
56
from ._ptx_utils import get_minimal_required_cuda_ver_from_ptx_ver, get_ptx_ver
7+
8+
_handle_getters: dict[type, Callable[[Any], int]] = {}
9+
10+
11+
def _add_cuda_native_handle_getter(t: type, getter: Callable[[Any], int]) -> None:
12+
_handle_getters[t] = getter
13+
14+
15+
def get_cuda_native_handle(obj: Any) -> int:
16+
"""Returns the address of the provided CUDA Python object as a Python int.
17+
18+
Parameters
19+
----------
20+
obj : Any
21+
CUDA Python object
22+
23+
Returns
24+
-------
25+
int : The object address.
26+
"""
27+
obj_type = type(obj)
28+
try:
29+
return _handle_getters[obj_type](obj)
30+
except KeyError:
31+
raise TypeError("Unknown type: " + str(obj_type)) from None

0 commit comments

Comments
 (0)