Comments (5)
I think this
stg_fetchAddByteArrayIntzh
/* MutableByteArray# s -> Int# -> Int# -> State# s -> (# State# s, Int# #) */
{
W_ arr, p, ind, incr, h, len;
arr = R1;
ind = R2;
incr = R3;
p = arr + SIZEOF_StgArrWords + WDS(ind);
(h) = foreign "C" atomic_inc_with(incr, p) [];
RET_N(h);
}
could be replaced by
foreign import ccall unsafe "atomic_inc_with" fetchAddByteArrayInt
:: MutableByteArray# s -> Int -> Int -> IO Int
except I'm not quite sure about the s
parameter to MBA#
.
Relevant docs: https://www.haskell.org/ghc/docs/7.6.3/html/users_guide/ffi.html#idp56267600
from haskell-lockfree.
Figured it out: you also need to give the UnliftedFFITypes
language pragma to be allowed to mention MBA#
in the FFI import.
from haskell-lockfree.
How do you picture this working for CAS? It's a funky case because it currently returns a pair from the CMM primop:
stg_casMutVarzh ( gcptr mv, gcptr old, gcptr new )
{
gcptr h;
(h) = ccall cas(mv + SIZEOF_StgHeader + OFFSET_StgMutVar_var,
old, new);
if (h != old) {
return (1,h);
} else {
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr");
}
return (0,new);
}
Assuming it is possible to do the GET_INFO/dirty bits in C, then there's just the issue of returning the two values efficiently. Could pass an output param for one and poke the pointer...
from haskell-lockfree.
Poking a pointer sounds like the way to go.
On Sun, Apr 13, 2014 at 3:57 AM, Ryan Newton [email protected]:
How do you picture this working for CAS? It's a funky case because it
currently returns a pair from the CMM primop:stg_casMutVarzh ( gcptr mv, gcptr old, gcptr new ){
gcptr h;
(h) = ccall cas(mv + SIZEOF_StgHeader + OFFSET_StgMutVar_var,
old, new);
if (h != old) {
return (1,h);
} else {
if (GET_INFO(mv) == stg_MUT_VAR_CLEAN_info) {
ccall dirty_MUT_VAR(BaseReg "ptr", mv "ptr");
}
return (0,new);
}Assuming it is possible to do the GET_INFO/dirty bits in C, then there's
just the issue of returning the two values efficiently. Could pass an
output param for one and poke the pointer...Reply to this email directly or view it on GitHubhttps://github.com//issues/27#issuecomment-40298247
.
from haskell-lockfree.
Yeah, it's a write to memory rather than returning in registers but worth it to turn the double function call into a single one.
from haskell-lockfree.
Related Issues (20)
- Cannot find module "Data.Atomics.Counter.Unboxed" HOT 6
- Are memory barriers compiler reordering barriers? HOT 1
- Various cabal issues.
- Saw a genuine nondeterministic test failure
- atomic-primops: can GC duplication of pure objects screw up Tickets and cause a false negative?
- atomic-primops: ghc 8 support needed HOT 7
- Build fail on armv8
- atomic-primops: Need to make barriers inline primops HOT 3
- Missing load-store barrier HOT 1
- [chaselev-deque] stackage availability HOT 4
- Provide loop wrapper for casArrayElem? HOT 2
- Implement multi-item CAS (CASN) HOT 2
- Cut a new atomic-primops release for GHC 8.2.1 HOT 2
- testing/Fetch.hs missing from Hackage release HOT 1
- Recursion in haddocks of `atomic-primops` HOT 1
- CAS fails with newly created ticket HOT 8
- CAS very rarely fails not due to a race, in GHC >= 8.2
- [lockfree-queue]: GHC 9.4 support HOT 2
- Release chaselev-deque-0.5.0.6 on hackage HOT 1
- No more load_load_barrier in GHC HEAD HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from haskell-lockfree.