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=5748bf3321e7720f794cdbace9342c322bfbdfe48eb66758556a9ca55f0f2c89
6+ # CYTHON-BINDINGS-GENERATED-DO-NOT-MODIFY-THIS-FILE: format=1; content-sha256=b101459d496c90e392500d4a36a0b5d567ad8097b4a8f727af2177ac6c6e1dd3
77
88
99# <<<< PREAMBLE CONTENT >>>>
1010
11+ cdef extern from * nogil:
12+ """
13+ #if defined(_MSC_VER) && !defined(__clang__)
14+ #include <intrin.h>
15+ static __forceinline int atomic_int_load(int *p) {
16+ int v = *(int volatile *)p; _ReadBarrier(); return v;
17+ }
18+ static __forceinline void atomic_int_store(int *p, int v) {
19+ _WriteBarrier(); *(int volatile *)p = v;
20+ }
21+ #elif defined(__cplusplus)
22+ /* GCC/Clang __atomic builtins work in any C++ standard without headers */
23+ static inline int atomic_int_load(int *p) {
24+ return __atomic_load_n(p, __ATOMIC_ACQUIRE);
25+ }
26+ static inline void atomic_int_store(int *p, int v) {
27+ __atomic_store_n(p, v, __ATOMIC_RELEASE);
28+ }
29+ #else
30+ #include <stdatomic.h>
31+ static inline int atomic_int_load(int *p) {
32+ return (int)atomic_load_explicit((atomic_int *)p, memory_order_acquire);
33+ }
34+ static inline void atomic_int_store(int *p, int v) {
35+ atomic_store_explicit((atomic_int *)p, v, memory_order_release);
36+ }
37+ #endif
38+
39+ """
40+ cdef int _cyb_atomic_int_load " atomic_int_load" (int * p) nogil
41+ cdef void _cyb_atomic_int_store " atomic_int_store" (int * p, int v) nogil
42+
1143cdef extern from " <windows.h>" :
1244 ctypedef void * HMODULE
1345 void * _cyb_GetProcAddress " GetProcAddress" (HMODULE, const char * ) nogil
@@ -19,7 +51,7 @@ import threading as _cyb_threading
1951
2052ctypedef int (* _cyb_cuGetProcAddress_v2_T)(const char * , void ** , int , cuuint64_t, CUdriverProcAddressQueryResult * )except ?CUDA_ERROR_NOT_FOUND nogil
2153
22- cdef bint _cyb___py_driver_init = False
54+ cdef int _cyb___py_driver_init = 0
2355cdef dict _cyb_func_ptrs = None
2456cdef object _cyb_symbol_lock = _cyb_threading.Lock()
2557
@@ -1990,11 +2022,11 @@ cdef int _init_driver() except -1 nogil:
19902022 global __cuGraphicsVDPAURegisterOutputSurface
19912023 cuGetProcAddress_v2(' cuGraphicsVDPAURegisterOutputSurface' , < void ** > & __cuGraphicsVDPAURegisterOutputSurface, 3010 , ptds_mode, NULL )
19922024
1993- _cyb___py_driver_init = True
2025+ _cyb_atomic_int_store( < int * > & _cyb___py_driver_init, 1 )
19942026 return 0
19952027
19962028cdef inline int _check_or_init_driver() except - 1 nogil:
1997- if _cyb___py_driver_init:
2029+ if _cyb_atomic_int_load( < int * > & _cyb___py_driver_init) :
19982030 return 0
19992031
20002032 return _init_driver()
0 commit comments