Re: [Haskell-cafe] Support for lock-free/wait-free programming?

2010-08-17 Thread Serguey Zefirov
2010/8/17 Gregory Collins g...@gregorycollins.net:
 Does GHC expose any primitives for things like atomic compare-and-swap?

I think that STM could qualify as LL/SC.

It does LL with TVars and bulk SC with transaction commit. ;)
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Support for lock-free/wait-free programming?

2010-08-16 Thread Gregory Collins
Hello all,

Does GHC expose any primitives for things like atomic compare-and-swap?
I can't seem to find anything in the docs. I'm wondering if it's
possible, for example, to implement things like the wait-free concurrent
queue from [1] or a lock-free wait-free hash table like the Azul people
are doing [2].

In network servers, we often have a large number of clients fighting
over shared resources -- even simple stuff like which threads are
scheduled to timeout? and which threads are currently active, so I can
kill them if I need to?. Shared mutable collections seem to be a fact
of life here.

Under load, pure data structures behind MVars don't perform well because
of lock contention, and in my experience atomicModifyIORef is marginally
better but still suffers from contention issues (probably related to
thunk blackholing).

Recently I got a ~35% speedup on a benchmark by switching one of these
tables from a Map behind an IORef to a hashmap using a striped-locking
scheme (see [3] if you're interested.) I think there's a need for
high-concurrency data structures like this, and I don't see much on
Hackage that addresses it. As much as we like to say that we have a
handle on concurrency issues, from what I can see java.util.concurrent.*
has us soundly thrashed in this department, especially as it relates to
exposing atomic wait-free CPU primitives like the ones in
java.util.concurrent.atomic.* [4]. Speaking as a partisan, this cannot
be allowed to stand, can it?

Cheers,

G.

--

[1] Maged M. Michael and Michael L. Scott, Simple, Fast, and Practical
Non-Blocking and Blocking Concurrent Queue Algorithms:
http://www.cs.rochester.edu/u/michael/PODC96.html

[2] http://www.stanford.edu/class/ee380/Abstracts/070221_LockFreeHash.pdf

[3] 
http://github.com/snapframework/snap-server/blob/master/src/Data/HashMap/Concurrent.hs#L1

[4] 
http://download.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/AtomicInteger.html

-- 
Gregory Collins g...@gregorycollins.net
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe