Proposal: provide cas and barriers symbols even without -threaded

Edward Z. Yang ezyang at MIT.EDU
Thu Jul 18 18:11:09 CEST 2013


I want to note something, which is that if we did link in
cas/store_load_barrier, then your lockfree queue would always be
synchronized, even if you didn't compile with -threaded.  Perhaps this
is not a big deal, but it is generally nice to not pay the cost of
synchronization when it is unnecessary.  So it would be better if there
were threaded/nonthreaded variants which you could use instead.  How
does that sound? (Fortunately, you are not inlining the functions, so
it's totally possible for this to happen.  We'd have a tougher row
to hoe if you needed to inline these functions.)

Edward

Excerpts from Ryan Newton's message of Thu Jul 18 06:17:44 -0700 2013:
> The "atomic-primops" library depends on symbols such as store_load_barrier
> and "cas", which are defined in SMP.h.  Thus the result is that if the
> program is linked WITHOUT "-threaded", the user gets a linker error about
> undefined symbols.
> 
> The specific place it's used is in the 'foreign "C"' bits of this .cmm code:
> 
> 
> https://github.com/rrnewton/haskell-lockfree-queue/blob/87e63b21b2a6c375e93c30b98c28c1d04f88781c/AtomicPrimops/cbits/primops.cmm
> 
> I'm trying to explore hacks that will enable me to pull in those functions
> during compile time, without duplicating a whole bunch of code from the
> RTS.  But it's a fragile business.
> 
> It seems to me that some of these routines have general utility.  In future
> versions of GHC, could we consider linking in those routines irrespective
> of "-threaded"?
> 
>   -Ryan




More information about the ghc-devs mailing list