rcu 0.2.5 → 0.2.6
raw patch · 9 files changed
+72/−38 lines, 9 filesdep ~transformers
Dependency ranges changed: transformers
Files
- .hlint.yaml +1/−1
- CHANGELOG.markdown +4/−0
- examples/IncCounterExperiment.hs +15/−4
- examples/TimeSynchronize.hs +4/−4
- rcu.cabal +18/−16
- src/Control/Concurrent/RCU/Class.hs +1/−0
- src/Control/Concurrent/RCU/GC/Internal.hs +11/−5
- src/Control/Concurrent/RCU/QSBR/Internal.hs +11/−5
- unstable/Control/Concurrent/RCU/STM/Internal.hs +7/−3
.hlint.yaml view
@@ -1,4 +1,4 @@-- arguments: [--cpp-define=HLINT, --cpp-ansi]+- arguments: [-XCPP, --cpp-define=HLINT, --cpp-ansi] - ignore: {name: Reduce duplication} - ignore: {name: Redundant lambda}
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+## 0.2.6 [2022.05.18]+---------------------+* Make the `IncCounterExperiment` benchmark compile with GHC 9.4.+ ## 0.2.5 [2021.02.17] --------------------- * The build-type has been changed from `Custom` to `Simple`.
examples/IncCounterExperiment.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE UnboxedTuples #-} -----------------------------------------------------------------------------@@ -54,15 +55,25 @@ incCounterAtomic :: Counter -> IO Word64 incCounterAtomic (Counter (MutableByteArray c)) = primitive $ \ s -> case fetchAddIntArray# c 0# 2# s of- (# s', r #) -> (# s', W64# (int2Word# r) #)+ (# s', r #) ->+#if MIN_VERSION_base(4,17,0)+ (# s', W64# (wordToWord64# (int2Word# r)) #)+#else+ (# s', W64# (int2Word# r) #)+#endif {-# INLINE incCounterAtomic #-} incCounterNonAtomicFancy :: Counter -> IO Word64 incCounterNonAtomicFancy (Counter (MutableByteArray c)) = primitive $ \ s -> case readWord64Array# c 0# s of- (# s', r #) -> case plusWord# r (int2Word# 2#) of- r' -> case writeWord64Array# c 0# r' s' of- s'' -> (# s'', W64# r' #)+ (# s', r #) ->+#if MIN_VERSION_base(4,17,0)+ case plusWord64# r (wordToWord64# 2##) of+#else+ case plusWord# r 2## of+#endif+ r' -> case writeWord64Array# c 0# r' s' of+ s'' -> (# s'', W64# r' #) {-# INLINE incCounterNonAtomicFancy #-} incCounterNonAtomic :: Counter -> IO Word64
examples/TimeSynchronize.hs view
@@ -77,9 +77,9 @@ writer n m = do #if MEASURE_SYNCHRONIZE helper n m timeZero- where helper 0 _ !acc = return acc- helper !n m !acc = do d <- m- helper (pred n) m (acc + d)+ where helper 0 _ !acc = return acc+ helper !n' m' !acc = do d <- m'+ helper (pred n') m' (acc + d) #else replicateM_ n m return timeZero@@ -191,7 +191,7 @@ let aud = wtd / fromIntegral nUpdates putStrLn $ "average writer update time: " ++ show aud #if MEASURE_SYNCHRONIZE- putStrLn $ "average synchronize time: " ++ show wfrd+ putStrLn $ "average synchronize time: " ++ show _wfrd #endif where opts = info optsParser ( fullDesc
rcu.cabal view
@@ -1,6 +1,6 @@ name: rcu category: Data-version: 0.2.5+version: 0.2.6 license: BSD3 cabal-version: 1.22 license-file: LICENSE@@ -16,8 +16,10 @@ , GHC == 8.2.2 , GHC == 8.4.4 , GHC == 8.6.5- , GHC == 8.8.3- , GHC == 8.10.1+ , GHC == 8.8.4+ , GHC == 8.10.7+ , GHC == 9.0.2+ , GHC == 9.2.2 synopsis: Read-Copy-Update for Haskell description: Read-Copy-Update for Haskell. @@ -50,7 +52,7 @@ ghc-prim >= 0.3, parallel >= 3.2 && < 3.3, primitive >= 0.6,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 exposed-modules: Control.Concurrent.RCU.Class@@ -132,7 +134,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -159,7 +161,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -186,7 +188,7 @@ primitive >= 0.6, rcu, time >= 1.5.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DUNBOUND -DMEASURE_SYNCHRONIZE@@ -213,7 +215,7 @@ primitive >= 0.6, rcu, time >= 1.5.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DUNBOUND -DMEASURE_SYNCHRONIZE@@ -240,7 +242,7 @@ primitive >= 0.6, rcu, time >= 1.5.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DUNBOUND -DMEASURE_SYNCHRONIZE@@ -267,7 +269,7 @@ primitive >= 0.6, rcu, time >= 1.5.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DUNBOUND -DMEASURE_SYNCHRONIZE@@ -294,7 +296,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -321,7 +323,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -348,7 +350,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -375,7 +377,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -402,7 +404,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=QSBR -DBENCHMARKS -DMEASURE_SYNCHRONIZE@@ -429,7 +431,7 @@ primitive >= 0.6, rcu, rdtsc >= 1.3.0.1,- transformers >= 0.4 && < 0.6+ transformers >= 0.4 && < 0.7 if flag(measure-synchronize) cpp-options: -DMODE=GC -DBENCHMARKS -DMEASURE_SYNCHRONIZE
src/Control/Concurrent/RCU/Class.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE Safe #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DefaultSignatures #-}
src/Control/Concurrent/RCU/GC/Internal.hs view
@@ -47,7 +47,7 @@ import Control.Parallel import Data.Atomics import Data.IORef-import Data.List+import qualified Data.List as L import Data.Primitive import Prelude hiding (Read(..)) import System.Mem@@ -135,10 +135,12 @@ ReadingRCU mf <*> ReadingRCU ma = ReadingRCU $ \ s -> mf s <*> ma s instance Monad (ReadingRCU s) where- return a = ReadingRCU $ \ _ -> pure a ReadingRCU m >>= f = ReadingRCU $ \ s -> do a <- m s runReadingRCU (f a) s+#if !(MIN_VERSION_base(4,11,0))+ return a = ReadingRCU $ \ _ -> pure a+#endif #if !(MIN_VERSION_base(4,13,0)) fail = Fail.fail #endif@@ -174,10 +176,12 @@ WritingRCU mf <*> WritingRCU ma = WritingRCU $ \ s -> mf s <*> ma s instance Monad (WritingRCU s) where- return a = WritingRCU $ \ _ -> pure a WritingRCU m >>= f = WritingRCU $ \ s -> do a <- m s runWritingRCU (f a) s+#if !(MIN_VERSION_base(4,11,0))+ return a = WritingRCU $ \ _ -> pure a+#endif #if !(MIN_VERSION_base(4,13,0)) fail = Fail.fail #endif@@ -258,11 +262,13 @@ deriving Functor instance Applicative (RCU s) where- pure = return+ pure a = RCU $ \ _ -> return a (<*>) = ap instance Monad (RCU s) where+#if !(MIN_VERSION_base(4,11,0)) return a = RCU $ \ _ -> return a+#endif RCU m >>= f = RCU $ \s -> do a <- m s unRCU (f a) s@@ -289,7 +295,7 @@ tid <- forkIO $ do x <- m $ s { rcuStateMyCounter = threadCounter } putMVar result x- modifyMVar_ (rcuStateThreadCountersV s) $ return . delete threadCounter+ modifyMVar_ (rcuStateThreadCountersV s) $ return . L.delete threadCounter return (RCUThread tid result) {-# INLINE forking #-}
src/Control/Concurrent/RCU/QSBR/Internal.hs view
@@ -50,7 +50,7 @@ import Control.Parallel import Data.Atomics import Data.IORef-import Data.List+import qualified Data.List as L import Data.Primitive import Foreign import qualified Control.Monad.Fail as Fail@@ -146,10 +146,12 @@ ReadingRCU mf <*> ReadingRCU ma = ReadingRCU $ \ s -> mf s <*> ma s instance Monad (ReadingRCU s) where- return a = ReadingRCU $ \ _ -> pure a ReadingRCU m >>= f = ReadingRCU $ \ s -> do a <- m s runReadingRCU (f a) s+#if !(MIN_VERSION_base(4,11,0))+ return a = ReadingRCU $ \ _ -> pure a+#endif #if !(MIN_VERSION_base(4,13,0)) fail = Fail.fail #endif@@ -185,10 +187,12 @@ WritingRCU mf <*> WritingRCU ma = WritingRCU $ \ s -> mf s <*> ma s instance Monad (WritingRCU s) where- return a = WritingRCU $ \ _ -> pure a WritingRCU m >>= f = WritingRCU $ \ s -> do a <- m s runWritingRCU (f a) s+#if !(MIN_VERSION_base(4,11,0))+ return a = WritingRCU $ \ _ -> pure a+#endif #if !(MIN_VERSION_base(4,13,0)) fail = Fail.fail #endif@@ -265,11 +269,13 @@ deriving Functor instance Applicative (RCU s) where- pure = return+ pure a = RCU $ \ _ -> return a (<*>) = ap instance Monad (RCU s) where+#if !(MIN_VERSION_base(4,11,0)) return a = RCU $ \ _ -> return a+#endif RCU m >>= f = RCU $ \s -> do a <- m s unRCU (f a) s@@ -310,7 +316,7 @@ -- and remove this counter from the list writers poll. writeBarrier writeCounter threadCounter offline- withMVar rcuStateThreadCountersLockV $ \ _ -> writeSRefIO rcuStateThreadCountersR . delete threadCounter =<< readSRefIO rcuStateThreadCountersR+ withMVar rcuStateThreadCountersLockV $ \ _ -> writeSRefIO rcuStateThreadCountersR . L.delete threadCounter =<< readSRefIO rcuStateThreadCountersR return (RCUThread tid result) {-# INLINE forking #-}
unstable/Control/Concurrent/RCU/STM/Internal.hs view
@@ -80,7 +80,9 @@ WritingRCU mf <*> WritingRCU ma = WritingRCU $ \c -> mf c <*> ma c instance Monad (WritingRCU s) where- return a = WritingRCU $ \ _ -> pure a+#if !(MIN_VERSION_base(4,11,0))+ return = pure+#endif WritingRCU m >>= f = WritingRCU $ \ c -> do a <- m c runWritingRCU (f a) c@@ -122,11 +124,13 @@ deriving Functor instance Applicative (RCU s) where- pure = return+ pure a = RCU $ \ _ -> pure a (<*>) = ap instance Monad (RCU s) where- return a = RCU $ \ _ -> return a+#if !(MIN_VERSION_base(4,11,0))+ return = pure+#endif RCU m >>= f = RCU $ \s -> do a <- m s unRCU (f a) s