diff --git a/cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx b/cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx index 7c4c9d311e..d65ecc2c9d 100644 --- a/cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/cudla_linux.pyx @@ -2,11 +2,43 @@ # SPDX-License-Identifier: Apache-2.0 # This code was automatically generated across versions from 1.5.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=a7e70bc7234821ae1f02306321604d7605aee20e0fde536def5edd52263be5de +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=052aecd587e459179f49158c93f43cde9e327476eedfb5be12e98520f7401d94 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -15,7 +47,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_cudla_init = False +cdef int _cyb___py_cudla_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -142,11 +174,11 @@ cdef int _init_cudla() except -1 nogil: handle = load_library() __cudlaSetTaskTimeoutInMs = _cyb_dlsym(handle, 'cudlaSetTaskTimeoutInMs') - _cyb___py_cudla_init = True + _cyb_atomic_int_store(&_cyb___py_cudla_init, 1) return 0 cdef inline int _check_or_init_cudla() except -1 nogil: - if _cyb___py_cudla_init: + if _cyb_atomic_int_load(&_cyb___py_cudla_init): return 0 return _init_cudla() diff --git a/cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx b/cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx index 333ac59e92..52a50e606e 100644 --- a/cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/cudla_windows.pyx @@ -2,11 +2,43 @@ # SPDX-License-Identifier: Apache-2.0 # This code was automatically generated across versions from 1.5.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=2f2d196de722c29b044dff6aed4e22bd72347a0890d30c885d35780882c6800f +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=32765bada1ce206d4a0f4790d6c14563b07e79567fc4569c6a843ccb086ab620 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -15,7 +47,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_cudla_init = False +cdef int _cyb___py_cudla_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -95,11 +127,11 @@ cdef int _init_cudla() except -1 nogil: global __cudlaSetTaskTimeoutInMs __cudlaSetTaskTimeoutInMs = _cyb_GetProcAddress(handle, 'cudlaSetTaskTimeoutInMs') - _cyb___py_cudla_init = True + _cyb_atomic_int_store(&_cyb___py_cudla_init, 1) return 0 cdef inline int _check_or_init_cudla() except -1 nogil: - if _cyb___py_cudla_init: + if _cyb_atomic_int_load(&_cyb___py_cudla_init): return 0 return _init_cudla() diff --git a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx index 46c8928d0b..1491c4588a 100644 --- a/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/cufile_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=ae15aefcbc4ccf2d415fb5d6436ae854690559f5561704523ba7d6f45abfc592 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=73d6889e33bb56f1e0e63be7a0ba1f176c5c09e6e1adf9c4360d23335e131260 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -17,7 +49,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_cufile_init = False +cdef int _cyb___py_cufile_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -385,11 +417,11 @@ cdef int _init_cufile() except -1 nogil: handle = load_library() __cuFileGetParameterPosixPoolSlabArray = _cyb_dlsym(handle, 'cuFileGetParameterPosixPoolSlabArray') - _cyb___py_cufile_init = True + _cyb_atomic_int_store(&_cyb___py_cufile_init, 1) return 0 cdef inline int _check_or_init_cufile() except -1 nogil: - if _cyb___py_cufile_init: + if _cyb_atomic_int_load(&_cyb___py_cufile_init): return 0 return _init_cufile() diff --git a/cuda_bindings/cuda/bindings/_internal/driver_linux.pyx b/cuda_bindings/cuda/bindings/_internal/driver_linux.pyx index e8bef60476..25b7e9330a 100644 --- a/cuda_bindings/cuda/bindings/_internal/driver_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/driver_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=644e8be3cdcaddb497db76bdc5912df43457a11696b5b7f710d46cba991d0d0b +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=93ad3ec4e08c2af84cb387a5321ad62c2ce683d690ad6865196771e4766eb127 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil @@ -18,7 +50,7 @@ import threading as _cyb_threading ctypedef int (*_cyb_cuGetProcAddress_v2_T)(const char *, void **, int, cuuint64_t, CUdriverProcAddressQueryResult *)except?CUDA_ERROR_NOT_FOUND nogil -cdef bint _cyb___py_driver_init = False +cdef int _cyb___py_driver_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -2123,11 +2155,11 @@ cdef int _init_driver() except -1 nogil: global __cuStreamBeginRecaptureToGraph cuGetProcAddress_v2('cuStreamBeginRecaptureToGraph', &__cuStreamBeginRecaptureToGraph, 13030, ptds_mode, NULL) - _cyb___py_driver_init = True + _cyb_atomic_int_store(&_cyb___py_driver_init, 1) return 0 cdef inline int _check_or_init_driver() except -1 nogil: - if _cyb___py_driver_init: + if _cyb_atomic_int_load(&_cyb___py_driver_init): return 0 return _init_driver() diff --git a/cuda_bindings/cuda/bindings/_internal/driver_windows.pyx b/cuda_bindings/cuda/bindings/_internal/driver_windows.pyx index 4cc1ab3e1c..23ec74d7e6 100644 --- a/cuda_bindings/cuda/bindings/_internal/driver_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/driver_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=501497a3d88840c62eda1dfb0b72fe7494ff20a208230b1f45ad2f0c11bf47a5 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=86a420a34dae5d88ef57070872a942cba79608505c6d67a2a77366185afcf6c6 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -19,7 +51,7 @@ import threading as _cyb_threading ctypedef int (*_cyb_cuGetProcAddress_v2_T)(const char *, void **, int, cuuint64_t, CUdriverProcAddressQueryResult *)except?CUDA_ERROR_NOT_FOUND nogil -cdef bint _cyb___py_driver_init = False +cdef int _cyb___py_driver_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -2126,11 +2158,11 @@ cdef int _init_driver() except -1 nogil: global __cuStreamBeginRecaptureToGraph cuGetProcAddress_v2('cuStreamBeginRecaptureToGraph', &__cuStreamBeginRecaptureToGraph, 13030, ptds_mode, NULL) - _cyb___py_driver_init = True + _cyb_atomic_int_store(&_cyb___py_driver_init, 1) return 0 cdef inline int _check_or_init_driver() except -1 nogil: - if _cyb___py_driver_init: + if _cyb_atomic_int_load(&_cyb___py_driver_init): return 0 return _init_driver() diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx index 8cdec7065b..01881a519b 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvfatbin_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.4.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=8a025fac12ad4fa9dc651c68c1ab7948f78cbb4b9450935db8f930c9d44988f4 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=f86a7f7527aad594d7b2e67742165454729ecca3810c00e6786f772099b17850 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvfatbin_init = False +cdef int _cyb___py_nvfatbin_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -135,11 +167,11 @@ cdef int _init_nvfatbin() except -1 nogil: handle = load_library() __nvFatbinAddTileIR = _cyb_dlsym(handle, 'nvFatbinAddTileIR') - _cyb___py_nvfatbin_init = True + _cyb_atomic_int_store(&_cyb___py_nvfatbin_init, 1) return 0 cdef inline int _check_or_init_nvfatbin() except -1 nogil: - if _cyb___py_nvfatbin_init: + if _cyb_atomic_int_load(&_cyb___py_nvfatbin_init): return 0 return _init_nvfatbin() diff --git a/cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx index c9bb82113c..69d1417e8b 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvfatbin_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.4.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=c44272bf506dcc20b5771a20fb6efc77f920c9b9bb21a89b53e3a9e7d69ce1ef +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=3b89f4c5e0a102d65950a485dab14517cb67887864d22152311d76341701e667 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvfatbin_init = False +cdef int _cyb___py_nvfatbin_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -87,11 +119,11 @@ cdef int _init_nvfatbin() except -1 nogil: global __nvFatbinAddTileIR __nvFatbinAddTileIR = _cyb_GetProcAddress(handle, 'nvFatbinAddTileIR') - _cyb___py_nvfatbin_init = True + _cyb_atomic_int_store(&_cyb___py_nvfatbin_init, 1) return 0 cdef inline int _check_or_init_nvfatbin() except -1 nogil: - if _cyb___py_nvfatbin_init: + if _cyb_atomic_int_load(&_cyb___py_nvfatbin_init): return 0 return _init_nvfatbin() diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx index 2ff4282e6c..6c515c54d0 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvjitlink_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.0.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=2a8907b5ab8df8ecb19b6d0fd3014dea67a9e76e7a2a0ee81fdf23f449402dd6 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=11665992d7c94100ae00600171ac56e9e99ee0c2c43c1cb720b4df27602ca829 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvjitlink_init = False +cdef int _cyb___py_nvjitlink_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -167,11 +199,11 @@ cdef int _init_nvjitlink() except -1 nogil: handle = load_library() __nvJitLinkGetLinkedLTOIR = _cyb_dlsym(handle, 'nvJitLinkGetLinkedLTOIR') - _cyb___py_nvjitlink_init = True + _cyb_atomic_int_store(&_cyb___py_nvjitlink_init, 1) return 0 cdef inline int _check_or_init_nvjitlink() except -1 nogil: - if _cyb___py_nvjitlink_init: + if _cyb_atomic_int_load(&_cyb___py_nvjitlink_init): return 0 return _init_nvjitlink() diff --git a/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx index 680038584a..6c2ccbd067 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvjitlink_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.0.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=8f99393554faa677ab0ab8326185997a183259db6b26b55561ed2ab6250201a6 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=72ad04bbd206b13b7c53a4530a55f9c84369e5fcf1599164b18546e2176f16f8 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvjitlink_init = False +cdef int _cyb___py_nvjitlink_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -103,11 +135,11 @@ cdef int _init_nvjitlink() except -1 nogil: global __nvJitLinkGetLinkedLTOIR __nvJitLinkGetLinkedLTOIR = _cyb_GetProcAddress(handle, 'nvJitLinkGetLinkedLTOIR') - _cyb___py_nvjitlink_init = True + _cyb_atomic_int_store(&_cyb___py_nvjitlink_init, 1) return 0 cdef inline int _check_or_init_nvjitlink() except -1 nogil: - if _cyb___py_nvjitlink_init: + if _cyb_atomic_int_load(&_cyb___py_nvjitlink_init): return 0 return _init_nvjitlink() diff --git a/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx index 2cff506e87..d2882b251b 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvml_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=27eba7e4fbbc2bca4f40e906d63b9386cce38cbabfcc50e6a2d7ad5bc0b68e91 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=646d902675de6987cff08e5702d3b2bff889e6a827273e57413aa5de45a5897a # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvml_init = False +cdef int _cyb___py_nvml_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -2847,11 +2879,11 @@ cdef int _init_nvml() except -1 nogil: handle = load_library() __nvmlGpuInstanceSetVgpuSchedulerState_v2 = _cyb_dlsym(handle, 'nvmlGpuInstanceSetVgpuSchedulerState_v2') - _cyb___py_nvml_init = True + _cyb_atomic_int_store(&_cyb___py_nvml_init, 1) return 0 cdef inline int _check_or_init_nvml() except -1 nogil: - if _cyb___py_nvml_init: + if _cyb_atomic_int_load(&_cyb___py_nvml_init): return 0 return _init_nvml() diff --git a/cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx index e0e38c1913..f7ae66ae98 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvml_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=71acdbf6d477ea00af29faeca397fad7352eec03aca08accffa76af57f2234f9 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=831330186c4a7bb029b953be6dd3cda119a7f10c56fa9378ab621fbc4374f9d1 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvml_init = False +cdef int _cyb___py_nvml_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -1443,11 +1475,11 @@ cdef int _init_nvml() except -1 nogil: global __nvmlGpuInstanceSetVgpuSchedulerState_v2 __nvmlGpuInstanceSetVgpuSchedulerState_v2 = _cyb_GetProcAddress(handle, 'nvmlGpuInstanceSetVgpuSchedulerState_v2') - _cyb___py_nvml_init = True + _cyb_atomic_int_store(&_cyb___py_nvml_init, 1) return 0 cdef inline int _check_or_init_nvml() except -1 nogil: - if _cyb___py_nvml_init: + if _cyb_atomic_int_load(&_cyb___py_nvml_init): return 0 return _init_nvml() diff --git a/cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx index bc635a3ca9..e58f6920b4 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvrtc_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=0ca6f301335e0e0a3b70c6fddc4f54b7930b547f18e05f0ede5a9e0f437c79f8 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=ff5d5beb8dc8a8fb1dac0241d4b72d29bf8c55cfd2cba627567cfab2d4d10767 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvrtc_init = False +cdef int _cyb___py_nvrtc_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -271,11 +303,11 @@ cdef int _init_nvrtc() except -1 nogil: handle = load_library() __nvrtcRemoveBundledHeaders = _cyb_dlsym(handle, 'nvrtcRemoveBundledHeaders') - _cyb___py_nvrtc_init = True + _cyb_atomic_int_store(&_cyb___py_nvrtc_init, 1) return 0 cdef inline int _check_or_init_nvrtc() except -1 nogil: - if _cyb___py_nvrtc_init: + if _cyb_atomic_int_load(&_cyb___py_nvrtc_init): return 0 return _init_nvrtc() diff --git a/cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx index bb295d8fae..3c363d8f17 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvrtc_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.9.0 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=fb8577d2b93fb2a36b8f02f62b920524ff9c191b2f4d8203ee3105820bc6f28c +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=becc61b4d220395420a59980fa3a7dc2ea4c45e7c64881bf7819df3a57443343 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvrtc_init = False +cdef int _cyb___py_nvrtc_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -155,11 +187,11 @@ cdef int _init_nvrtc() except -1 nogil: global __nvrtcRemoveBundledHeaders __nvrtcRemoveBundledHeaders = _cyb_GetProcAddress(handle, 'nvrtcRemoveBundledHeaders') - _cyb___py_nvrtc_init = True + _cyb_atomic_int_store(&_cyb___py_nvrtc_init, 1) return 0 cdef inline int _check_or_init_nvrtc() except -1 nogil: - if _cyb___py_nvrtc_init: + if _cyb_atomic_int_load(&_cyb___py_nvrtc_init): return 0 return _init_nvrtc() diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx index 0aba7664f8..d8b4271eb4 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvvm_linux.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.0.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=786a789c534d0bdda803be738a4f76f2db47bf188708dac946b41aec6c6aa4a4 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=e0b66c45b6f66a7ab7bae49939a26007efef95651084f1ef09fd32848260f2c8 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": void* _cyb_dlsym "dlsym"(void*, const char*) nogil const void * _cyb_RTLD_DEFAULT "RTLD_DEFAULT" @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvvm_init = False +cdef int _cyb___py_nvvm_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -151,11 +183,11 @@ cdef int _init_nvvm() except -1 nogil: handle = load_library() __nvvmLLVMVersion = _cyb_dlsym(handle, 'nvvmLLVMVersion') - _cyb___py_nvvm_init = True + _cyb_atomic_int_store(&_cyb___py_nvvm_init, 1) return 0 cdef inline int _check_or_init_nvvm() except -1 nogil: - if _cyb___py_nvvm_init: + if _cyb_atomic_int_load(&_cyb___py_nvvm_init): return 0 return _init_nvvm() diff --git a/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx b/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx index 72262266fa..31e23b6f79 100644 --- a/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx +++ b/cuda_bindings/cuda/bindings/_internal/nvvm_windows.pyx @@ -3,11 +3,43 @@ # SPDX-License-Identifier: Apache-2.0 # # This code was automatically generated across versions from 12.0.1 to 13.3.0. Do not modify it directly. -# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=cd105988425e21a30e32255acbc5654de835d0c09b5dd1c4598b09146fa590c5 +# CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=19fa5b34915a71deea0e75c2a16830e9571463f9cc32aa8b233853c303d6d742 # <<<< PREAMBLE CONTENT >>>> +cdef extern from * nogil: + """ + #if defined(_MSC_VER) && !defined(__clang__) + #include + static __forceinline int atomic_int_load(int *p) { + int v = *(int volatile *)p; _ReadBarrier(); return v; + } + static __forceinline void atomic_int_store(int *p, int v) { + _WriteBarrier(); *(int volatile *)p = v; + } + #elif defined(__cplusplus) + /* GCC/Clang __atomic builtins work in any C++ standard without headers */ + static inline int atomic_int_load(int *p) { + return __atomic_load_n(p, __ATOMIC_ACQUIRE); + } + static inline void atomic_int_store(int *p, int v) { + __atomic_store_n(p, v, __ATOMIC_RELEASE); + } + #else + #include + static inline int atomic_int_load(int *p) { + return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire); + } + static inline void atomic_int_store(int *p, int v) { + atomic_store_explicit((atomic_int *)p, v, memory_order_release); + } + #endif + + """ + cdef int _cyb_atomic_int_load "atomic_int_load"(int *p) nogil + cdef void _cyb_atomic_int_store "atomic_int_store"(int *p, int v) nogil + cdef extern from "": ctypedef void* HMODULE void* _cyb_GetProcAddress "GetProcAddress"(HMODULE, const char*) nogil @@ -16,7 +48,7 @@ from libc.stdint cimport intptr_t as _cyb_intptr_t import threading as _cyb_threading -cdef bint _cyb___py_nvvm_init = False +cdef int _cyb___py_nvvm_init = 0 cdef dict _cyb_func_ptrs = None cdef object _cyb_symbol_lock = _cyb_threading.Lock() @@ -95,11 +127,11 @@ cdef int _init_nvvm() except -1 nogil: global __nvvmLLVMVersion __nvvmLLVMVersion = _cyb_GetProcAddress(handle, 'nvvmLLVMVersion') - _cyb___py_nvvm_init = True + _cyb_atomic_int_store(&_cyb___py_nvvm_init, 1) return 0 cdef inline int _check_or_init_nvvm() except -1 nogil: - if _cyb___py_nvvm_init: + if _cyb_atomic_int_load(&_cyb___py_nvvm_init): return 0 return _init_nvvm()