From 312231da70fd10c639be0192d83a437b16791746 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 23 Sep 2025 12:22:04 -0400 Subject: [PATCH] Improve speed of init functions in cybind-generated bindings --- .../cuda/bindings/_internal/cufile_linux.pyx | 11 ++++++++--- .../cuda/bindings/_internal/nvjitlink_linux.pyx | 10 +++++++--- .../cuda/bindings/_internal/nvjitlink_windows.pyx | 9 ++++++++- cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx | 11 ++++++++--- .../cuda/bindings/_internal/nvvm_windows.pyx | 11 ++++++++--- 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx index ffc92f2282..e333c50813 100644 --- a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx @@ -108,10 +108,8 @@ cdef void* load_library() except* with gil: return handle -cdef int _check_or_init_cufile() except -1 nogil: +cdef int __check_or_init_cufile() except -1 nogil: global __py_cufile_init - if __py_cufile_init: - return 0 cdef void* handle = NULL @@ -422,6 +420,13 @@ cdef int _check_or_init_cufile() except -1 nogil: return 0 +cdef inline int _check_or_init_cufile() except -1 nogil: + if __py_cufile_init: + return 0 + + return __check_or_init_cufile() + + cdef dict func_ptrs = None diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx index af060f318e..b28fa9492f 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx @@ -77,10 +77,8 @@ cdef void* load_library() except* with gil: return handle -cdef int _check_or_init_nvjitlink() except -1 nogil: +cdef int __check_or_init_nvjitlink() except -1 nogil: global __py_nvjitlink_init - if __py_nvjitlink_init: - return 0 cdef void* handle = NULL @@ -188,6 +186,12 @@ cdef int _check_or_init_nvjitlink() except -1 nogil: return 0 +cdef inline int _check_or_init_nvjitlink() except -1 nogil: + if __py_nvjitlink_init: + return 0 + + return __check_or_init_nvjitlink() + cdef dict func_ptrs = None diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx index 730a415561..6c53ca74c2 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx @@ -93,7 +93,7 @@ cdef void* __nvJitLinkGetInfoLog = NULL cdef void* __nvJitLinkVersion = NULL -cdef int _check_or_init_nvjitlink() except -1 nogil: +cdef int __check_or_init_nvjitlink() except -1 nogil: global __py_nvjitlink_init if __py_nvjitlink_init: return 0 @@ -149,6 +149,13 @@ cdef int _check_or_init_nvjitlink() except -1 nogil: return 0 +cdef inline int _check_or_init_nvjitlink() except -1 nogil: + if __py_nvjitlink_init: + return 0 + + return __check_or_init_nvjitlink() + + cdef dict func_ptrs = None diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx index add0ccfb7d..b9febe6abe 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx @@ -76,10 +76,8 @@ cdef void* load_library() except* with gil: return handle -cdef int _check_or_init_nvvm() except -1 nogil: +cdef int __check_or_init_nvvm() except -1 nogil: global __py_nvvm_init - if __py_nvvm_init: - return 0 cdef void* handle = NULL @@ -180,6 +178,13 @@ cdef int _check_or_init_nvvm() except -1 nogil: return 0 +cdef inline int _check_or_init_nvvm() except -1 nogil: + if __py_nvvm_init: + return 0 + + return __check_or_init_nvvm() + + cdef dict func_ptrs = None diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx index 3eb0daa9d7..183276c3c3 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx @@ -92,10 +92,8 @@ cdef void* __nvvmGetProgramLogSize = NULL cdef void* __nvvmGetProgramLog = NULL -cdef int _check_or_init_nvvm() except -1 nogil: +cdef int __check_or_init_nvvm() except -1 nogil: global __py_nvvm_init - if __py_nvvm_init: - return 0 with gil, __symbol_lock: # Load library @@ -145,6 +143,13 @@ cdef int _check_or_init_nvvm() except -1 nogil: return 0 +cdef inline int _check_or_init_nvvm() except -1 nogil: + if __py_nvvm_init: + return 0 + + return __check_or_init_nvvm() + + cdef dict func_ptrs = None