Extended, cached CPU info with consistent output format
Project description
cengal_memory_barriers
Fast crossplatform memory barriers for Python.
Memory barriers are utilized by the operating system to implement synchronization primitives, such as Mutexes.
Advantages
Supported OS: at least ["Linux", "Darwin", "Windows"]. Supported targets: at least ["Emscripten", "ARM", "x86_64", "x86", "i386", "i686", "AMD64"]. "Other" system or target should have "stdatomic.h" header to be supported.
Installation
pip install cengal_memory_barriers
Documentation
Import
from cengal_memory_barriers import full_memory_barrier, mm_pause
Supported systems
OS \ CPU: | x86 ("x86_64", "x86", "i386", "i686", "AMD64") | ARM | Emscripten | Other targets |
---|---|---|---|---|
Linux | + | + | + | + |
Darwin | + | + | + | + |
Windows | + | + | + | |
Other systems with "stdatomic.h" header | + | + | + | + |
Available functions per system
Func name: \ System: | Linux/Darwin (x86) | Linux/Darwin (ARM) | Windows (x86) | Windows (ARM) | Emscripten | Other systems with "stdatomic.h" header |
---|---|---|---|---|---|---|
full_memory_barrier() | + | + | + | + | + | + |
memory_barrier() | + | + | + | + | + | + |
sync_synchronize() | + | + | + | + | + | + |
mm_pause() | + | + | + | + | + | + |
mm_mfence() | + | + | + | + | + | + |
mm_sfence() | + | + | + | + | + | + |
mm_lfence() | + | + | + | + | + | + |
mm_clflush(...) | + | + | ||||
iso_volatile_store16(...) | + | |||||
py_emscripten_atomic_fence() | + | |||||
clear_cache(...) | + | + | ||||
py_atomic_thread_fence(...) | + | + | + | + | ||
py_atomic_thread_fence__*() | + | + | + | + |
Backend calls - Main functions
System: \ Func name: | full_memory_barrier() |
memory_barrier() |
sync_synchronize() |
---|---|---|---|
Linux/Darwin (x86) | _mm_mfence() | _mm_mfence() | __sync_synchronize() |
Linux/Darwin (ARM) | __sync_synchronize() | __sync_synchronize() | __sync_synchronize() |
Windows (x86) | MemoryBarrier() | MemoryBarrier() | MemoryBarrier() |
Windows (ARM) | MemoryBarrier() | MemoryBarrier() | MemoryBarrier() |
Emscripten | emscripten_atomic_fence() | __sync_synchronize() | __sync_synchronize() |
Other systems with "stdatomic.h" header | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) |
Backend calls - Secondary functions
System: \ Func name: | mm_mfence() |
mm_sfence() |
mm_lfence() |
mm_pause() |
---|---|---|---|---|
Linux/Darwin (x86) | _mm_mfence() | _mm_sfence() | _mm_lfence() | _mm_pause() |
Linux/Darwin (ARM) | __sync_synchronize() | __sync_synchronize() | __sync_synchronize() | pass |
Windows (x86) | _mm_mfence() | _mm_sfence() | _mm_lfence() | _mm_pause() |
Windows (ARM) | MemoryBarrier() | MemoryBarrier() | MemoryBarrier() | pass |
Emscripten | __sync_synchronize() | __sync_synchronize() | __sync_synchronize() | pass |
Other systems with "stdatomic.h" header | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) | pass |
Backend calls - Unique calls
Func name: | Backend call: |
---|---|
mm_clflush(p: int) -> None | _mm_clflush(...) |
iso_volatile_store16(p: int, val: int) -> None | __iso_volatile_store16(...) |
py_emscripten_atomic_fence() -> None | emscripten_atomic_fence() |
clear_cache(beg: int, end: int) -> None | __clear_cache(...) |
py_atomic_thread_fence(order: int) -> None | atomic_thread_fence(...) |
py_atomic_thread_fence__memory_order_relaxed() | atomic_thread_fence(MEMORY_ORDER_RELAXED) |
py_atomic_thread_fence__memory_order_consume() | atomic_thread_fence(MEMORY_ORDER_CONSUME) |
py_atomic_thread_fence__memory_order_acquire() | atomic_thread_fence(MEMORY_ORDER_ACQUIRE) |
py_atomic_thread_fence__memory_order_release() | atomic_thread_fence(MEMORY_ORDER_RELEASE) |
py_atomic_thread_fence__memory_order_acq_rel() | atomic_thread_fence(MEMORY_ORDER_ACQ_REL) |
py_atomic_thread_fence__memory_order_seq_cst() | atomic_thread_fence(MEMORY_ORDER_SEQ_CST) |
Alternatives description:
clear_cache(beg: int, end: int) -> None
- "Linux", "Darwin" - An alternative tomm_clflush()
in GCC and Clang compilersiso_volatile_store16(p: int, val: int) -> None
- "Windows" - "ARM" - An alternative tomm_clflush()
for ARM in Visual Studio compilerpy_emscripten_atomic_fence() -> None
- "Emscripten" - Probably can be used as an alternative tomm_clflush()
for Emscripten
Based on Cengal
Represents part of Cengal library:
An equivalent import:
from cengal.hardware.memory.barriers import full_memory_barrier, mm_pause
Cengal library can be installed by:
pip install cengal
Projects using Cengal
- flet_async - wrapper which makes Flet async and brings booth Cengal.coroutines and asyncio to Flet (Flutter based UI)
- justpy_containers - wrapper around JustPy in order to bring more security and more production-needed features to JustPy (VueJS based UI)
- Bensbach - decompiler from Unreal Engine 3 bytecode to a Lisp-like script and compiler back to Unreal Engine 3 bytecode. Made for a game modding purposes
- Realistic-Damage-Model-mod-for-Long-War - Mod for both the original XCOM:EW and the mod Long War. Was made with a Bensbach, which was made with Cengal
- SmartCATaloguer.com - TagDB based catalog of images (tags), music albums (genre tags) and apps (categories)
License
Copyright © 2012-2023 ButenkoMS. All rights reserved.
Licensed under the Apache License, Version 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cengal_memory_barriers-2.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b2fc48971f18dff7f57f44c6adc9098625de98956a5a6e94722a7a221f784d2 |
|
MD5 | 25725b85739411910d3a534bd29c288f |
|
BLAKE2b-256 | 693164ff79e186eba419ad7e5b832695474144cec3d77b4bfb9a6098e085a348 |
Hashes for cengal_memory_barriers-2.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96ea1e20e251f127aeb9c2ca651d8f1b9e6e90853727f3afa3cfe65edb592eba |
|
MD5 | 4d914b0b3276a102d3bbbd44949c3934 |
|
BLAKE2b-256 | 1e97b14d42a5cc4802fca163e72760ccbb68a26c35222b32122c108c7d46dd2d |