11 patches for repository darcs.haskell.org:/home/darcs/nofib: Thu Nov 11 15:54:00 GMT 2010 Simon Marlow * makefile rules for collecting local GC results Fri Nov 19 12:58:30 GMT 2010 Simon Marlow * turn off thread migration for partree This is hopefully a temporary performance fix Fri Nov 19 13:10:45 GMT 2010 Simon Marlow * increase the runtime a bit Fri Nov 19 13:11:00 GMT 2010 Simon Marlow * reduce the parallelism depth, to avoid creating too many sparks Fri Nov 19 13:11:09 GMT 2010 Simon Marlow * update output Fri Nov 19 13:11:33 GMT 2010 Simon Marlow * use tree-shaped parallelism rather than parBuffer Fri Nov 19 13:12:19 GMT 2010 Simon Marlow * deepseq the matrices before performing the computation avoids some communication Fri Nov 19 13:13:29 GMT 2010 Simon Marlow * add a commented-out alternative version of par_tree_map Fri Nov 19 13:13:57 GMT 2010 Simon Marlow * increase the buffer size to 1000 200 is too small with the fine granularity in this program Fri Nov 19 13:14:48 GMT 2010 Simon Marlow * makefile rules for local-gc benchmarks Fri Nov 19 13:15:07 GMT 2010 Simon Marlow * compute means of total-heap-size and allocations New patches: [makefile rules for collecting local GC results Simon Marlow **20101111155400 Ignore-this: 34ce15701c53f96d33dea4433fa8b925 ] hunk ./parallel/Makefile 25 # NESL: a collection of benchmarks based on NESL examples # -------------- +N=8 + +localgc : + $(MAKE) clean + $(MAKE) -k NoFibRuns=5 EXTRA_HC_OPTS='-threaded' EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-localgc-` date +%Y%m%d%H%M`-N$(N)-$(TAG) + +head : + $(MAKE) clean + $(MAKE) -k NoFibRuns=5 HC=$$HOME/builds/testing/inplace/bin/ghc-stage2 EXTRA_HC_OPTS='-threaded' EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-head-` date +%Y%m%d%H%M`-N$(N)-$(TAG) + +.PHONY: nbody-scale +nbody-scale : + cd nbody; \ + date=`date +%Y%m%d%H%M`; \ + $(MAKE) clean; \ + $(MAKE) NoFibRuns=0 EXTRA_HC_OPTS='-threaded'; \ + for i in 1 2 4 6 8 10 12 14 16; do \ + $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-$$date-N$$i; \ + done; \ + ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-$$date-N{1,2,4,6,8,10,12,14,16} >nbody-$$date.csv + +nbody-scale-head : + cd nbody; \ + date=`date +%Y%m%d%H%M`; \ + $(MAKE) clean; \ + $(MAKE) NoFibRuns=0 HC=$$HOME/builds/testing/inplace/bin/ghc-stage2 EXTRA_HC_OPTS='-threaded'; \ + for i in 1 2 4 6 8 10 12 14 16; do \ + $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-head-$$date-N$$i; \ + done; \ + ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-head-$$date-N{1,2,4,6,8,10,12,14,16} >nbody-head-$$date.csv + include $(TOP)/mk/target.mk [turn off thread migration for partree Simon Marlow **20101119125830 Ignore-this: 81d53195a9acb1e93c57c5fd6e9ba549 This is hopefully a temporary performance fix ] hunk ./parallel/partree/Makefile 6 PROG_ARGS = 300 100 SRC_HC_OPTS += -package parallel +SRC_RUNTEST_OPTS += +RTS -qm -RTS include $(TOP)/mk/target.mk [increase the runtime a bit Simon Marlow **20101119131045 Ignore-this: d773e04f20682bd9246bd7e8b5467f24 ] hunk ./parallel/coins/Makefile 4 TOP = ../.. include $(TOP)/mk/boilerplate.mk -SRC_RUNTEST_OPTS += 3 863 +# This version just counts the results, and runs in constant space: +# SRC_RUNTEST_OPTS += 7 1163 + +# This version builds a list of the results, and needs a lot of memory: +SRC_RUNTEST_OPTS += 3 873 + SRC_HC_OPTS += -package parallel include $(TOP)/mk/target.mk [reduce the parallelism depth, to avoid creating too many sparks Simon Marlow **20101119131100 Ignore-this: 146a67e65889e738f7ef5f32d382be17 ] hunk ./parallel/coins/coins.hs 198 -- sequential, append-list of results 2 -> print $ lenA $ payA arg coins1 [] -- parallel, append-list of results - 3 -> print $ lenA $ payA_par 4 arg coins1 [] + 3 -> print $ lenA $ payA_par 3 arg coins1 [] 4 -> print $ length (pay 0 arg coins []) 5 -> print $ length (pay1 0 arg coins1 (map (\(c,q) -> (c,0)) coins1)) [update output Simon Marlow **20101119131109 Ignore-this: 885848fd1386b38573b162c2e06ae72a ] hunk ./parallel/coins/coins.stdout 1 -198791 +206940 [use tree-shaped parallelism rather than parBuffer Simon Marlow **20101119131133 Ignore-this: b4220f0f28d497c687201ad4aff95371 ] { hunk ./parallel/mandel/Mandel.lhs 17 import Control.Parallel import Control.Parallel.Strategies -- import qualified NewStrategies as NS +import Debug.Trace +import Text.Printf default () \end{code} \end{onlystandalone} hunk ./parallel/mandel/Mandel.lhs 197 The complex plain is initialised, and the mandelbrot set is calculated. \begin{code} - result = parallelMandel - [[windowToViewport s t | s<-[1..screenX]] - | t <- [1..screenY]] - lIMIT - ((max (x'-x) (y'-y)) / 2.0) +-- result = parallelMandel +-- [[windowToViewport s t | s<-[1..screenX]] +-- | t <- [1..screenY]] +-- lIMIT +-- ((max (x'-x) (y'-y)) / 2.0) + + result = concat $ toList $ parListTreeLike 1 screenY + (\t -> let l = [ whenDiverge lIMIT radius (windowToViewport s t) + | s<-[1..screenX] ] + in Mandel.seqList l `pseq` l) + + radius = (max (x'-x) (y'-y)) / 2.0 + prettyRGB::Int -> (Int,Int,Int) prettyRGB s = let t = (lIMIT - s) in (s,t,t) hunk ./parallel/mandel/Mandel.lhs 213 + + +data AList a = ANil | ASing a | Append (AList a) (AList a) | AList [a] + +append ANil r = r +append l ANil = l -- ** +append l r = Append l r + +toList :: AList a -> [a] +toList a = go a [] + where go ANil rest = rest + go (ASing a) rest = a : rest + go (Append l r) rest = go l $! go r rest + go (AList xs) rest = xs ++ rest + +parListTreeLike :: Integer -> Integer -> (Integer -> a) -> AList a +parListTreeLike min max fn + | max - min <= threshold = runEval $ do + l <- rseq (let l = map fn [min..max] in Mandel.seqList l `pseq` l) + return (AList l) + | otherwise = + rght `par` (left `pseq` (left `append` rght)) + where + mid = min + ((max - min) `quot` 2) + left = parListTreeLike min mid fn + rght = parListTreeLike (mid+1) max fn + +threshold = 1 + \end{code} } [deepseq the matrices before performing the computation Simon Marlow **20101119131219 Ignore-this: 251de3f413a49236811b0476cf86257a avoids some communication ] { hunk ./parallel/matmult/MatMult.hs 70 type Vector = [Int] type Matrix = [Vector] --- main computation, different versions: -mult :: Int -> Matrix -> Matrix -> Int -> [[Maybe Matrix]] -mult 0 m1 m2 _ = -#ifdef OUTPUT - [[Just $ multMatricesTr m1 (transpose m2)]] -#else - rnf (multMatricesTr m1 (transpose m2)) `seq` [[Nothing]] -#endif -mult v m1 m2 c = results +mult :: Strategy Matrix -> Matrix -> Matrix -> [[Maybe Matrix]] +mult strat m1 m2 = runEval $ do + rdeepseq m1 + rdeepseq tr_m2 + rseq results where results :: [[Maybe Matrix]] #ifdef OUTPUT results = [[Just computed]] hunk ./parallel/matmult/MatMult.hs 81 #else results = (rnf computed `seq` [[Nothing]]) #endif - computed = multMatricesTr m1 m2Tr `using` (strats'!!v) c - strats' = strats ++ repeat undef - m2Tr = transpose m2 + tr_m2 = transpose m2 + computed = multMatricesTr m1 tr_m2 `using` strat prMM' :: (Matrix,Matrix) -> Matrix prMM' (c,mt) = [[prVV f c | c <- mt]|f <-c] hunk ./parallel/matmult/MatMult.hs 202 a = "Matrices of size " ++ show size ++ " with skeleton " ++ ((names++repeat "UNDEF")!!opt) ++ " using chunk parameter " ++ show chunk ++ "\n" - res = mult opt (mA size) (mB size) chunk + strats' = strats ++ repeat undef + strat = (strats'!!opt) chunk + res = mult strat (mA size) (mB size) b = multMatricesTr (mA size) (transpose (mB size)) -- putStrLn a #ifdef OUTPUT } [add a commented-out alternative version of par_tree_map Simon Marlow **20101119131329 Ignore-this: eb53af9031e0acb96dddc844380adbc8 ] hunk ./parallel/partree/Tree.hs 2 -- -*- haskell -*- --- Time-stamp: <2010-07-16 12:10:03 simonmar> +-- Time-stamp: <2010-11-12 16:31:30 simonmar> -- -- ADT of a binary tree (values only in leaves). -- Parallel functions use par and seq directly. [increase the buffer size to 1000 Simon Marlow **20101119131357 Ignore-this: 7b99f57c447363de69fdd753c29d8e0d 200 is too small with the fine granularity in this program ] hunk ./parallel/ray/Main.lhs 147 #ifdef STRATEGIES_2 > parallel = parBuffer 200 rwhnf #else -> parallel = withStrategy (parBuffer 200 rwhnf) +> parallel = withStrategy (parBuffer 1000 rwhnf) #endif [makefile rules for local-gc benchmarks Simon Marlow **20101119131448 Ignore-this: 4e40c7437922dce52d83180f22337ee7 ] { hunk ./parallel/Makefile 27 N=8 +date=$(shell date "+%Y%m%d%H%M") + +GHC_HEAD="$$HOME/builds/testing/inplace/bin/ghc-stage2" + +.PHONY: head-scale +head-scale: + $(MAKE) head-seq + $(MAKE) head-run N=1 + $(MAKE) head-thr + $(MAKE) head-run N=4 + $(MAKE) head-run N=8 + $(MAKE) head-run N=12 + +.PHONY: localgc-scale +localgc-scale: + $(MAKE) localgc-seq + $(MAKE) localgc-run N=1 + $(MAKE) localgc-thr + $(MAKE) localgc-run N=4 + $(MAKE) localgc-run N=8 + $(MAKE) localgc-run N=12 + +.PHONY: localgc-seq +localgc-seq : + $(MAKE) clean + $(MAKE) -k NoFibRuns=0 + +.PHONY: localgc-thr +localgc-thr : + $(MAKE) clean + $(MAKE) -k NoFibRuns=0 EXTRA_HC_OPTS='-threaded' + +.PHONY: localgc localgc : hunk ./parallel/Makefile 61 + $(MAKE) localgc-thr + $(MAKE) localgc-run + +.PHONY: localgc-run +localgc-run : + $(MAKE) -k NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-localgc-$(date)-N$(N)-$(TAG) + +.PHONY: head-seq +head-seq : $(MAKE) clean hunk ./parallel/Makefile 71 - $(MAKE) -k NoFibRuns=5 EXTRA_HC_OPTS='-threaded' EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-localgc-` date +%Y%m%d%H%M`-N$(N)-$(TAG) + $(MAKE) -k HC=$(GHC_HEAD) NoFibRuns=0 hunk ./parallel/Makefile 73 -head : +.PHONY: head-thr +head-thr : $(MAKE) clean hunk ./parallel/Makefile 76 - $(MAKE) -k NoFibRuns=5 HC=$$HOME/builds/testing/inplace/bin/ghc-stage2 EXTRA_HC_OPTS='-threaded' EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-head-` date +%Y%m%d%H%M`-N$(N)-$(TAG) + $(MAKE) -k HC=$(GHC_HEAD) NoFibRuns=0 EXTRA_HC_OPTS='-threaded' + +.PHONY: head +head : + $(MAKE) head-thr + $(MAKE) head-run + +.PHONY: head-run +head-run : + $(MAKE) -k NoFibRuns=5 HC=$(GHC_HEAD) EXTRA_HC_OPTS='-threaded' EXTRA_RUNTEST_OPTS="+RTS -N$(N) -RTS" 2>&1 | tee log-head-$(date)-N$(N)-$(TAG) .PHONY: nbody-scale nbody-scale : hunk ./parallel/Makefile 90 cd nbody; \ - date=`date +%Y%m%d%H%M`; \ $(MAKE) clean; \ $(MAKE) NoFibRuns=0 EXTRA_HC_OPTS='-threaded'; \ for i in 1 2 4 6 8 10 12 14 16; do \ hunk ./parallel/Makefile 93 - $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-$$date-N$$i; \ + $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-$(date)-N$$i; \ done; \ hunk ./parallel/Makefile 95 - ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-$$date-N{1,2,4,6,8,10,12,14,16} >nbody-$$date.csv + ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-$(date)-N{1,2,4,6,8,10,12,14,16} >nbody-$(date).csv nbody-scale-head : cd nbody; \ hunk ./parallel/Makefile 99 - date=`date +%Y%m%d%H%M`; \ $(MAKE) clean; \ $(MAKE) NoFibRuns=0 HC=$$HOME/builds/testing/inplace/bin/ghc-stage2 EXTRA_HC_OPTS='-threaded'; \ for i in 1 2 4 6 8 10 12 14 16; do \ hunk ./parallel/Makefile 102 - $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-head-$$date-N$$i; \ + $(MAKE) NoFibRuns=5 EXTRA_RUNTEST_OPTS="+RTS -N$$i -RTS" 2>&1 | tee ../nbody-head-$(date)-N$$i; \ done; \ hunk ./parallel/Makefile 104 - ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-head-$$date-N{1,2,4,6,8,10,12,14,16} >nbody-head-$$date.csv + ../../nofib-analyse/nofib-analyse --csv=Elapsed --normalise=ratio nbody-head-$(date)-N{1,2,4,6,8,10,12,14,16} >nbody-head-$(date).csv include $(TOP)/mk/target.mk } [compute means of total-heap-size and allocations Simon Marlow **20101119131507 Ignore-this: 72ee66c0a4c2fb9b2bfe5e3b2c4a20a3 ] { hunk ./nofib-analyse/GenUtils.lhs 9 -- All the code below is understood to be in the public domain. ----------------------------------------------------------------------------- +> {-# LANGUAGE CPP #-} > module GenUtils ( > partition', tack, hunk ./nofib-analyse/Main.hs 1 +{-# LANGUAGE RankNTypes, ExistentialQuantification #-} ----------------------------------------------------------------------------- hunk ./nofib-analyse/Main.hs 3 --- $Id: Main.hs,v 1.10 2005/06/07 10:58:31 simonmar Exp $ - -- (c) Simon Marlow 1997-2005 ----------------------------------------------------------------------------- hunk ./nofib-analyse/Main.hs 121 gc0time_spec, gc0elap_spec, gc1time_spec, gc1elap_spec, balance_spec, totmem_spec :: PerProgTableSpec size_spec = SpecP "Binary Sizes" "Size" "binary-sizes" binary_size compile_status always_ok -alloc_spec = SpecP "Allocations" "Allocs" "allocations" allocs run_status always_ok +alloc_spec = SpecP "Allocations" "Allocs" "allocations" (meanInt allocs) run_status always_ok runtime_spec = SpecP "Run Time" "Runtime" "run-times" (mean run_time) run_status time_ok elapsedtime_spec = SpecP "Elapsed Time" "Elapsed" "elapsed-times" (mean elapsed_time) run_status time_ok muttime_spec = SpecP "Mutator Time" "MutTime" "mutator-time" (mean mut_time) run_status time_ok hunk ./nofib-analyse/Main.hs 138 mreads_spec = SpecP "Memory Reads" "Reads" "mem-reads" mem_reads run_status always_ok mwrite_spec = SpecP "Memory Writes" "Writes" "mem-writes" mem_writes run_status always_ok cmiss_spec = SpecP "Cache Misses" "Misses" "cache-misses" cache_misses run_status always_ok -totmem_spec = SpecP "Total Memory in use" "TotalMem" "total-mem" total_memory run_status always_ok +totmem_spec = SpecP "Total Memory in use" "TotalMem" "total-mem" (meanInt total_memory) run_status always_ok all_specs :: [PerProgTableSpec] all_specs = [ hunk ./nofib-analyse/Main.hs 176 where go [] = Nothing go fs = Just (foldl' (+) 0 fs / fromIntegral (length fs)) +meanInt :: Integral a => (Results -> [a]) -> Results -> Maybe a +meanInt f results = go (f results) + where go [] = Nothing + go fs = Just (foldl' (+) 0 fs `quot` fromIntegral (length fs)) + -- Look for bogus-looking times: On Linux we occasionally get timing results -- that are bizarrely low, and skew the average. checkTimes :: String -> Results -> IO () hunk ./nofib-analyse/Main.hs 850 xs@('-':_) -> xs xs -> '+':xs showBox (BoxFloat f) = printf "%.2f" f -showBox (BoxInt n) = show (n `div` 1024) ++ "k" -showBox (BoxInteger n) = show (n `div` 1024) ++ "k" +showBox (BoxInt n) = show (n `div` (1024*1024)) +showBox (BoxInteger n) = show (n `div` (1024*1024)) +--showBox (BoxInt n) = show (n `div` 1024) ++ "k" +--showBox (BoxInteger n) = show (n `div` 1024) ++ "k" showBox (BoxString s) = s instance Show BoxValue where hunk ./nofib-analyse/Slurp.hs 50 gc1_time :: [Float], gc1_elapsed_time :: [Float], balance :: [Float], - allocs :: Maybe Integer, + allocs :: [Integer], run_status :: Status, compile_status :: Status, hunk ./nofib-analyse/Slurp.hs 53 - total_memory :: Maybe Integer + total_memory :: [Integer] } emptyResults :: Results hunk ./nofib-analyse/Slurp.hs 78 gc1_elapsed_time = [], balance = [], gc_work = Nothing, - allocs = Nothing, + allocs = [], compile_status = NotDone, run_status = NotDone, hunk ./nofib-analyse/Slurp.hs 81 - total_memory = Nothing + total_memory = [] } ----------------------------------------------------------------------------- hunk ./nofib-analyse/Slurp.hs 253 balance = b1 ++ b2, gc_work = gw1 `mplus` gw2, binary_size = bs1 `mplus` bs2, - allocs = al1 `mplus` al2, + allocs = al1 ++ al2, run_status = combStatus rs1 rs2, compile_status = combStatus cs1 cs2, hunk ./nofib-analyse/Slurp.hs 256 - total_memory = tm1 `mplus` tm2 } + total_memory = tm1 ++ tm2 } combStatus :: Status -> Status -> Status combStatus NotDone y = y hunk ./nofib-analyse/Slurp.hs 360 case ghc1_re l of { Just (allocations, _, _, _, _, _, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) -> got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] - Nothing Nothing Nothing Nothing Nothing Nothing; + Nothing Nothing Nothing Nothing Nothing []; Nothing -> case ghc2_re l of { hunk ./nofib-analyse/Slurp.hs 366 Just (allocations, _, _, _, _, in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) -> got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] - Nothing Nothing Nothing Nothing Nothing (Just in_use); + Nothing Nothing Nothing Nothing Nothing [in_use]; Nothing -> hunk ./nofib-analyse/Slurp.hs 373 case ghc3_re l of { Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed) -> got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] - (Just gc_work') Nothing Nothing Nothing Nothing (Just in_use); + (Just gc_work') Nothing Nothing Nothing Nothing [in_use]; Nothing -> hunk ./nofib-analyse/Slurp.hs 381 Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed, is, mem_rs, mem_ws, cache_misses') -> got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [] [] [] [] [] (Just gc_work') (Just is) (Just mem_rs) - (Just mem_ws) (Just cache_misses') (Just in_use); + (Just mem_ws) (Just cache_misses') [in_use]; Nothing -> hunk ./nofib-analyse/Slurp.hs 389 Just (allocations, _, _, _, _, gc_work', in_use, initialisation, init_elapsed, mut, mut_elapsed, gc, gc_elapsed, gc0, gc0_elapsed, gc1, gc1_elapsed, bal) -> got_run_result allocations initialisation init_elapsed mut mut_elapsed gc gc_elapsed [gc0] [gc0_elapsed] [gc1] [gc1_elapsed] [bal] - (Just gc_work') Nothing Nothing Nothing Nothing (Just in_use); + (Just gc_work') Nothing Nothing Nothing Nothing [in_use]; Nothing -> hunk ./nofib-analyse/Slurp.hs 438 gc1_elapsed_time = gc1_elapsed, balance = bal, gc_work = gc_work', - allocs = Just allocations, + allocs = [allocations], instrs = instrs', mem_reads = mem_rs, mem_writes = mem_ws, } Context: [add nbody benchmark Simon Marlow **20101111155548 Ignore-this: bef7b400ac557a1fb585e9a49fd81bbe ] [fix SUBDIRS Simon Marlow **20101111155419 Ignore-this: 420feb54e88e5db04b410b052cdb33bd ] [fix compile Simon Marlow **20101111155414 Ignore-this: 4e79102691b0288717ba5e3513c94194 ] [add more benchmarks Simon Marlow **20101111155351 Ignore-this: 6d9b3652a889861385f8355a7a768907 ] [fix for local GC stats Simon Marlow **20101111155302 Ignore-this: 82bd96741f8ff4283d905a1aa207a9c6 ] [fix compile with GHC 7.0 Simon Marlow **20101111155243 Ignore-this: 49db5781f8cb9c366082c7c3fedcfc54 ] [+RTS -S slows things down (esp. in parallel), so use +RTS -s instead Simon Marlow **20101105132715 Ignore-this: 91fd4b2a41f524e8266cbf95e19e1243 ] [update to version from Seq no More paper Simon Marlow **20101105132632 Ignore-this: d0a2acee9d28126d2c2289ced43e1f31 ] [add transclos program Simon Marlow **20101103121350 Ignore-this: d1d364cb02cdd7747ad9c02e6b9f4a8d ] [accept output Simon Marlow **20101015083016 Ignore-this: eb241c9185e49a139a460b7d51ebb5c0 ] [add sample output Simon Marlow **20101018155932 Ignore-this: ce40cce5b5436b1b48401673fb80232c ] [add sample output Simon Marlow **20101018150352 Ignore-this: 5641bf0723b7331f66c55c9fc27a5698 ] [fix #include Simon Marlow **20101018150336 Ignore-this: d58be40a74836769e8e985f78556ae91 ] [add two mutable store benchmarks Simon Marlow **20101014121139 Ignore-this: 925b4a8258c81b3f20f88e53ab463089 ] [add arguments Simon Marlow **20101008075017 Ignore-this: dcaa1dbc54d0a0c641601dced1ec5c72 ] [Remove ghc from the list of gc tests, as it has bitrotted Ian Lynagh **20100801164721] [Add -package array to SRC_HC_OPTS Simon Marlow **20101014091654 Ignore-this: 7ae7dbec0d1e4b443c7bc94aa55345f To make batch linking work now that haskell98 is not automatically linked. ] [remove -fglasgow-exts, which was causing it to fail w/ the 7.0 typechecker Simon Marlow **20101008091831 Ignore-this: 3325502e5aba228f35e58f159ecd49dc ] [remove n+k pattern Simon Marlow **20101014120423 Ignore-this: f824dd2b253a977bdca277aec0f6c2a7 ] [fix imports Simon Marlow **20101014120414 Ignore-this: 54ccc6f37536b33e3062022c0e60ca93 ] [fix imports Simon Marlow **20101014120400 Ignore-this: 453dfe65aa11a4e3dc8eee98aa928e9b ] [remove ^M Simon Marlow **20101014120206 Ignore-this: aa93436aa59c5051f4b1dbba2fa35fc6 ] [remove -fglasgow-exts Simon Marlow **20101013142351 Ignore-this: a8d60ed8da7976b99d6968c967cf7a39 ] [Update all imports to use the Haskell 2010 hierarchical names Simon Marlow **20101013100043 Ignore-this: 97f7b1ddebe66835468c00bd8f71b687 ] [add blackscholes Simon Marlow **20100820120304 Ignore-this: fedd6f4f75729bbccb45860545e59315 ] [update to work with parallel-3.x Simon Marlow **20100720104025 Ignore-this: eaa1d01e8028f6e2996f7f947caf46d8 ] [add -stdout-binary Simon Marlow **20100716114550 Ignore-this: 9e290dfe6eda97d8b17aa903652f8073 ] [add TChan version of chan Simon Marlow **20100708135508 Ignore-this: 22c441dbbaeef91240fc3968f2776baf ] [add chan, a simple Chan performance benchmark Simon Marlow **20100708135219 Ignore-this: 3a9479fe7d7917ff22e5454c6fa3e342 ] [update to work with weak sparks using the new Strategies Simon Marlow **20100526084337 Ignore-this: 146e0c993b6d16c3fd6b38853cb7da2c ] [gc/fibheaps/Makefile: Increase -K. Marco Túlio Gontijo e Silva **20100710132158 Ignore-this: 5e8dd707a7a03c16698fc12f29a38fad ] [nofib-analyse: Comment unneeded import. Marco Túlio Gontijo e Silva **20100710133316 Ignore-this: aad35524ec1828d88a2f51e571bd0687 ] [nofib-analyse: Check for Total Memory in use. Marco Túlio Gontijo e Silva **20100710133244 Ignore-this: 642a0460f82755ad16e862eb2fc572df ] [replace dos2unix with sed 's/\r//g' Simon Marlow **20100708091637 Ignore-this: 48357f5e1874e8e0ef0948e73ba807fa ] [add a -K Simon Marlow **20100625105223 Ignore-this: 2686a5f15a9b035de7eef2b79baf204f ] [add coins example Simon Marlow **20100527092203 Ignore-this: 5c816bdebc0203a6d39a0604ec7d19a4 ] [update to work with parallel-2.x Simon Marlow **20100526084449 Ignore-this: 47492cbaaae40b591d6406606c1ba4e1 ] [update sample output Simon Marlow **20100526084418 Ignore-this: d529c695ada9ec43446b2b1c47cee6b0 ] [Fix for GHC 6.12: use explict Latin-1 encoding for the input files Simon Marlow **20100526084404 Ignore-this: 41be72303457a369003dd5e5e1c5fdfb ] [convert to UTF-8 (#4137) Simon Marlow **20100625102245 Ignore-this: 52b7d5472b289cd13914ad8a68d4c2e1 ] [add definitions for $(SIZE) and $(STRIP) Simon Marlow **20100622080141 Ignore-this: 7215e0292d7002dbc05596c7e2fbfe ] [Simon-nofib-notes: Small fix. Marco Túlio Gontijo e Silva **20100530002344 Ignore-this: 7738ea8f2b9d06dc67dcf1787adf5a02 ] [Add a slowstdout for digits-of-e1. pj@csee.ltu.se**20100515203735 Ignore-this: 6a6d1c5646ff299558b73fccb943ac6b ] [add callback002, threads007 Simon Marlow **20100331143654 Ignore-this: 698b287ecdae8b8120bb76ba17f54669 ] [bump the iterations Simon Marlow **20100331143644 Ignore-this: d3e6272e0a2e0a81da95e186bb69c4f1 ] [add runInUnboundThread Simon Marlow **20100331143628 Ignore-this: 2f63a13bb9eaa5f77b8291f9724d57e3 ] [reduce the iterations again; -threaded takes ages Simon Marlow **20100331143618 Ignore-this: cbb09f9428287623aa0075840263b737 ] [tweak the set of benchmarks we run by default Simon Marlow **20100331120236 Ignore-this: 3041fc13934057270081e50716ef26d3 ] [update sample output Simon Marlow **20100331120214 Ignore-this: ad1b639ceaf05e46d32eb0a746dd78e1 ] [make this work non-threaded Simon Marlow **20100331120207 Ignore-this: 645199172e25fb99e68c0c530d06821d ] [increase some parameters Simon Marlow **20100331120157 Ignore-this: 7640b54d03fae76cd90d1db6579f370c ] [add a Makefile Simon Marlow **20100331120138 Ignore-this: ac5c91655cadd2aa0c70ada3a49b8b00 ] [Use -rtsopts if we have GHC >= 6.13 Ian Lynagh **20100408153305] [add sample output Simon Marlow **20100325160754 Ignore-this: 6490f5a252e3cd4ccb36b4e75771386e ] [move this out of the OLD subdir, it's a working benchmark now Simon Marlow **20100324085455 Ignore-this: 331d5c1a30600d1ab32b3abbea3f5de6 ] [update to work with new strategies lib Simon Marlow **20100324085352 Ignore-this: 114490f1d0c315656d9dff1eb6137564 ] [Add Neil Brown's pathalogical CML benchmark Simon Marlow **20100323094205 Ignore-this: 9a8b5eb4fafb94b87f3ba437ab265254 ] [add queens Simon Marlow **20100323094055 Ignore-this: 1e616e2f7af936f669ba53a1698191a6 ] [Add parallel N-queens Simon Marlow **20100323094047 Ignore-this: ae06f4252bc926f948334e8df1765713 Aiming to complete the set of noddy benchmarks. ] [add a raw callback performance benchmark Simon Marlow **20100309152232 Ignore-this: 473e25e1af4e9cb858a346af513c8f1d ] [Update Makefile rule following changes in RTS options Simon Marlow **20100203104342 Ignore-this: 36081cae1f2346b8fd72d0cf331d6102 ] [add a hash-table benchmark Simon Marlow **20091230164822 Ignore-this: f92052e946a0f74000541fdd9a3a1019 ] [Changes to work with parallel-2.x Simon Marlow **20091221121052 Ignore-this: 49cd8ca13b3a252eb55351113c31af1c ] [add quicksort Simon Marlow **20091221120922 Ignore-this: c40bdd732b8e59542a6a20da3aeaf63a ] [add Galois' Ray Tracer Simon Marlow **20091221120852 Ignore-this: 71d3946e6a7e8fcf4fc9ba667a3aa6f9 ] [remove use of MKDEPENDC Simon Marlow **20091210091758 Ignore-this: 38a84b3e5567372b6574c726d82800df mkdepenC has gone away, and we don't care about C sources in nofib anyway ] [Add nofib notes simonpj@microsoft.com**20091020075417 Ignore-this: cd2f34cbe9577aa7df052fe49024a815 ] [Add notes about rewrite simonpj@microsoft.com**20091019165523 Ignore-this: b2da27e770fcbdea742a67f08533120e ] [changes for 2009 Haskell Symposium paper on ThreadScope Simon Marlow **20091006091423 Ignore-this: 8582b078d4cc62aa6607ebd8e7ce2c2 ] [Fix for 6.12: set binary mode on stdout Simon Marlow **20090914130558 Ignore-this: 37af0f6281d921d38d1b4179ae05b644 ] [Unbreak these programs after Unicode IO support was added Simon Marlow **20090629091426 Ignore-this: 6dbb7be6b0ca8b99efd5816ce036810a Set binary mode on Handles appropriately. ] [TAG 2009-06-25 Ian Lynagh **20090625160516] Patch bundle hash: d57f9171766ecca4235b4d29c0831a7ae61b55d9