Download Pytorch/include/internal/pycore_atomic_funcs.h from RayTBRP/codellama-CodeLlama-7b-Python-hf: direct link, hf CLI and curl.
- Browser
- Download file 2.44 kB
-
https://huggingface.co/RayTBRP/codellama-CodeLlama-7b-Python-hf/resolve/c0c5506eba15c7ab03ff4f59bbe251ee2db72517/Pytorch/include/internal/pycore_atomic_funcs.h
- Command line
-
hf download hf://RayTBRP/codellama-CodeLlama-7b-Python-hf@c0c5506eba15c7ab03ff4f59bbe251ee2db72517/Pytorch/include/internal/pycore_atomic_funcs.h
-
curl -L -o pycore_atomic_funcs.h https://huggingface.co/RayTBRP/codellama-CodeLlama-7b-Python-hf/resolve/c0c5506eba15c7ab03ff4f59bbe251ee2db72517/Pytorch/include/internal/pycore_atomic_funcs.h
2.44 kB
| /* Atomic functions: similar to pycore_atomic.h, but don't need | |
| to declare variables as atomic. | |
| Py_ssize_t type: | |
| * value = _Py_atomic_size_get(&var) | |
| * _Py_atomic_size_set(&var, value) | |
| Use sequentially-consistent ordering (__ATOMIC_SEQ_CST memory order): | |
| enforce total ordering with all other atomic functions. | |
| */ | |
| extern "C" { | |
| // Use builtin atomic operations in GCC >= 4.7 and clang | |
| static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) | |
| { | |
| return __atomic_load_n(var, __ATOMIC_SEQ_CST); | |
| } | |
| static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) | |
| { | |
| __atomic_store_n(var, value, __ATOMIC_SEQ_CST); | |
| } | |
| static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) | |
| { | |
| Py_BUILD_ASSERT(sizeof(__int64) == sizeof(*var)); | |
| volatile __int64 *volatile_var = (volatile __int64 *)var; | |
| __int64 old; | |
| do { | |
| old = *volatile_var; | |
| } while(_InterlockedCompareExchange64(volatile_var, old, old) != old); | |
| Py_BUILD_ASSERT(sizeof(long) == sizeof(*var)); | |
| volatile long *volatile_var = (volatile long *)var; | |
| long old; | |
| do { | |
| old = *volatile_var; | |
| } while(_InterlockedCompareExchange(volatile_var, old, old) != old); | |
| return old; | |
| } | |
| static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) | |
| { | |
| Py_BUILD_ASSERT(sizeof(__int64) == sizeof(*var)); | |
| volatile __int64 *volatile_var = (volatile __int64 *)var; | |
| _InterlockedExchange64(volatile_var, value); | |
| Py_BUILD_ASSERT(sizeof(long) == sizeof(*var)); | |
| volatile long *volatile_var = (volatile long *)var; | |
| _InterlockedExchange(volatile_var, value); | |
| } | |
| // Fallback implementation using volatile | |
| static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) | |
| { | |
| volatile Py_ssize_t *volatile_var = (volatile Py_ssize_t *)var; | |
| return *volatile_var; | |
| } | |
| static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) | |
| { | |
| volatile Py_ssize_t *volatile_var = (volatile Py_ssize_t *)var; | |
| *volatile_var = value; | |
| } | |
| } | |