Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/louisjenkinscs/localatomics
Building Blocks for non-blocking programming in Shared Memory Chapel
https://github.com/louisjenkinscs/localatomics
chapel chapel-language lock-free non-blocking parallel-computing
Last synced: 10 days ago
JSON representation
Building Blocks for non-blocking programming in Shared Memory Chapel
- Host: GitHub
- URL: https://github.com/louisjenkinscs/localatomics
- Owner: LouisJenkinsCS
- Created: 2019-06-06T00:04:12.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-07-08T23:23:50.000Z (over 5 years ago)
- Last Synced: 2024-10-25T09:47:55.288Z (about 2 months ago)
- Topics: chapel, chapel-language, lock-free, non-blocking, parallel-computing
- Language: Chapel
- Homepage:
- Size: 12.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
The `LocalAtomicObject` is a very simple abstraction that is optimized to ignore the `locale`
portion of a wide pointer (and act directly on the `addr`), and perform normal 64-bit atomic
operations that way. It is a simple yet efficient solution. Also provided is a solution for
the ABA problem that relies on CMPXCHG16B Intel instruction for Double-Word Compare-And-Swap.
We require `unmanaged` classes; currently this will leak memory if you do not have safe memory-management solution. Originally
developed during the
[Distributed Data Structures effort for GSoC 2017](https://summerofcode.withgoogle.com/archive/2017/projects/6530769430249472/)
and now continued in the [Concurrent-Safe Memory Reclamation Systems effort for GSoC 2019](https://summerofcode.withgoogle.com/projects/#6095033818677248).**Dependencies**
Intel's `CMPXCHG16B` must be supported on your system (it is on ~99% of machines these days)
for double-word compare-and-swap. As well, when you compile you _must_ build with
`CHPL_LLVM` set (I.E to `CHPL_LLVM=llvm` or `CHPL_LLVM=system`) as the program uses `extern`
blocks.