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: 7 months 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 6 years ago)
 - Default Branch: master
 - Last Pushed: 2019-07-08T23:23:50.000Z (over 6 years ago)
 - Last Synced: 2025-03-30T23:43:31.824Z (7 months ago)
 - Topics: chapel, chapel-language, lock-free, non-blocking, parallel-computing
 - Language: Chapel
 - Homepage:
 - Size: 12.7 KB
 - Stars: 1
 - Watchers: 1
 - 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.