Easiest way to extend CAS (casMutVar#) to boxed/unboxed Vector elements?
marlowsd at gmail.com
Thu Jan 12 09:54:57 CET 2012
On 10/01/2012 17:19, Ryan Newton wrote:
> Hello there,
> I was wondering what the recommendations would be for getting CAS on
> [mutable] vector elements?
> I thought that as a first step I might create an a library that does the
> trick only for unboxed vectors, by using bits-atomic (i.e. FFI + GCC
> Roman Leshchinskiy recommended against depending on GCC. He thought,
> therefore, that not only boxed arrays but unboxed ones would need an
> extra PrimOp to be handled properly:
>> You can't rely on gcc extensions because code is usually compiled with the
>> native code generator nowadays and doesn't go through gcc. The dependency
>> on gcc will (hopefully) be dropped eventually anyway. So you'd probably
>> also want primops for unboxed arrrays and Addr#.
> Any advice?
For boxed arrays you need a PrimOp of course (like catMutVar#). For
unboxed arrays you could get away with FFI, but a PrimOp would be better
because it could be inline. But to get it inline would mean modifying
the native and LLVM backends to support CAS operations.
If I were you I would use FFI for now. The cost of the out-of-line call
is much less than the cost of the CAS anyway. A gcc dependency is not a
big deal, it's available on all Unix-like platforms and I don't see us
removing it from the Windows installs any time soon.
More information about the Glasgow-haskell-users