/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® quad-core |
Each table row shows performance measurements for this Haskell GHC program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 12 | 0.07 | 0.02 | ? | 611 | 100% 100% 100% 67% |
| 16 | 1.15 | 0.40 | 240 | 611 | 63% 65% 65% 100% |
| 20 | 27.06 | 10.38 | 151,668 | 611 | 58% 81% 68% 55% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read binary-trees benchmark to see what this program should do.
llvm version 3.1-2ubuntu1
The Glorious Glasgow Haskell Compilation System, version 7.6.2
-- -- The Computer Language Benchmarks Game -- http://benchmarksgame.alioth.debian.org/ -- -- Contributed by Don Stewart -- Parallelized by Louis Wasserman import System.Environment import Control.Monad import System.Mem import Data.Bits import Text.Printf import GHC.Conc data Tree = Nil | Node !Int Tree Tree minN = 4 io s n t = printf "%s of depth %d\t check: %d\n" s n t main = do n <- getArgs >>= readIO . head let maxN = max (minN + 2) n stretchN = maxN + 1 -- stretch memory tree let c = {-# SCC "stretch" #-} check (make 0 stretchN) io "stretch tree" stretchN c -- allocate a long lived tree let !long = make 0 maxN -- allocate, walk, and deallocate many bottom-up binary trees let vs = depth minN maxN mapM_ (\((m,d,i)) -> io (show m ++ "\t trees") d i) vs -- confirm the the long-lived binary tree still exists io "long lived tree" maxN (check long) -- generate many trees depth :: Int -> Int -> [(Int,Int,Int)] depth d m | d <= m = let s = sumT d n 0 rest = depth (d+2) m in s `par` ((2*n,d,s) : rest) | otherwise = [] where n = bit (m - d + minN) -- allocate and check lots of trees sumT :: Int -> Int -> Int -> Int sumT d 0 t = t sumT d i t = a `par` b `par` sumT d (i-1) ans where a = check (make i d) b = check (make (-i) d) ans = a + b + t check = check' True 0 -- traverse the tree, counting up the nodes check' :: Bool -> Int -> Tree -> Int check' !b !z Nil = z check' b z (Node i l r) = check' (not b) (check' b (if b then z+i else z-i) l) r -- build a tree make :: Int -> Int -> Tree make i 0 = Node i Nil Nil make i d = Node i (make (i2-1) d2) (make i2 d2) where i2 = 2*i; d2 = d-1
Thu, 31 Jan 2013 04:10:07 GMT MAKE: mv binarytrees.ghc-5.ghc binarytrees.ghc-5.hs /usr/local/src/ghc-7.6.2/bin/ghc --make -fllvm -O2 -XBangPatterns -threaded -rtsopts -funbox-strict-fields binarytrees.ghc-5.hs -o binarytrees.ghc-5.ghc_run [1 of 1] Compiling Main ( binarytrees.ghc-5.hs, binarytrees.ghc-5.o ) Linking binarytrees.ghc-5.ghc_run ... rm binarytrees.ghc-5.hs 1.22s to complete and log all make actions COMMAND LINE: ./binarytrees.ghc-5.ghc_run +RTS -N4 -K128M -H -RTS 20 PROGRAM OUTPUT: stretch tree of depth 21 check: -1 2097152 trees of depth 4 check: -2097152 524288 trees of depth 6 check: -524288 131072 trees of depth 8 check: -131072 32768 trees of depth 10 check: -32768 8192 trees of depth 12 check: -8192 2048 trees of depth 14 check: -2048 512 trees of depth 16 check: -512 128 trees of depth 18 check: -128 32 trees of depth 20 check: -32 long lived tree of depth 20 check: -1