[GHC] #8972: Investigate adding fast compare-and-swap Int type/primops

GHC ghc-devs at haskell.org
Thu Apr 24 13:30:22 UTC 2014


#8972: Investigate adding fast compare-and-swap Int type/primops
-------------------------------------+------------------------------------
        Reporter:  tibbe             |            Owner:  tibbe
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:
       Component:  Compiler          |          Version:  7.9
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:  8157, 7883
-------------------------------------+------------------------------------

Comment (by rrnewton):

 Thanks for these benchmarks!

 I suspect the problem with atomicModifyIORef's poor behavior may have to
 do with blackholes?  Tracing ghc events will perturb these workloads a
 bunch I guess, but maybe threadscope could still tell us something wrt
 blackhole events.

 By the way, I started peeking at the benchmark code.  I don't have a good
 sense currently of how many cycles each of the following takes in
 practice:

  * between a forkIO and the new thread waking up on another CPU.
  * between two forkIO's from a parent thread waking up (gang synchrony)
  * delta between two threads blocked on the same MVar waking up

 I noticed the third method used in MainN.hs and I think this is very
 standard.  However, I wonder if it is worth having all the test threads
 busy-wait on a memory location to start with a greater degree of
 synchrony.  That way we can have them run for exactly the same time
 interval and maximize contention over the whole time period ;-).

 In any case, these benchmarks are great.  I'd like to run these on a few
 different machines with our nightly benchmarking stuff.  I read the README
 but I can't currently build the benchmarks because I don't have chan-
 split-fast -- where is that?

 P.S. We currently accumulate benchmark data into Google Fusion Tables (but
 we'd like to switch to Big Query or Cloud SQL or something).  HSBencher
 does the upload, but it doesn't yet integrate with criterion well.  It's
 more focused on long-running (parallel) benchmarks rather than
 statistically significant sampling of short runs.  Still, adding support
 for consuming criterion reports would be great.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8972#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list