Created
August 25, 2012 19:10
-
-
Save teh/3469506 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import System.Environment | |
import Data.Array.Repa as R | |
import Data.Array.Repa.Algorithms.Randomish as RR | |
import Criterion.Main | |
import Criterion.Config | |
ra = RR.randomishDoubleArray (ix2 1000 3) 0 1 1 | |
main = defaultMainWith defaultConfig {cfgSamples = ljust 10} (return ()) [ | |
bgroup "pairwise-random" [ | |
bench "extract" $ whnf pairwise ra, | |
bench "slice" $ whnf pairwise2 ra | |
] | |
] | |
pairwise :: Array U DIM2 Double -> Array U DIM2 Double | |
pairwise in_ = | |
let Z :. m :. n = extent in_ | |
getRow i = extract (ix2 i 0) (ix2 i n) in_ | |
v i j = (getRow i) -^ (getRow j) | |
f (Z :. i :. j) = R.sumAllS $ (v i j) *^ (v i j) | |
arrayD = fromFunction (ix2 m m) f | |
in computeUnboxedS arrayD | |
pairwise2 :: Array U DIM2 Double -> Array U DIM2 Double | |
pairwise2 in_ = | |
let Z :. m :. n = extent in_ | |
getRow i = (slice in_ $ Any :. (i::Int) :. All) | |
v i j = (getRow i) -^ (getRow j) | |
f (Z :. i :. j) = R.sumAllS $ (v i j) *^ (v i j) | |
arrayD = fromFunction (ix2 m m) f | |
in computeUnboxedS arrayD | |
------ | |
$ ghc --make matrix.hs -Odph -rtsopts -threaded -fno-liberate-case -funfolding-use-threshold1000 -funfolding-keeness-factor1000 -fllvm -optlo-O3 | |
[1 of 1] Compiling Main ( matrix.hs, matrix.o ) | |
Linking matrix ... | |
$ ./matrix | |
warming up | |
estimating clock resolution... | |
mean is 1.654411 us (320001 iterations) | |
found 3963 outliers among 319999 samples (1.2%) | |
2004 (0.6%) high severe | |
estimating cost of a clock call... | |
mean is 41.31914 ns (13 iterations) | |
found 1 outliers among 13 samples (7.7%) | |
1 (7.7%) high mild | |
benchmarking pairwise-random/extract | |
collecting 10 samples, 1 iterations each, in estimated 116.7755 s | |
mean: 11.84538 s, lb 11.71474 s, ub 12.27695 s, ci 0.950 | |
std dev: 365.3585 ms, lb 62.28236 ms, ub 607.4764 ms, ci 0.950 | |
found 1 outliers among 10 samples (10.0%) | |
1 (10.0%) high severe | |
variance introduced by outliers: 9.000% | |
variance is slightly inflated by outliers | |
benchmarking pairwise-random/slice | |
mean: 28.16506 ms, lb 28.01538 ms, ub 28.40334 ms, ci 0.950 | |
std dev: 314.9693 us, lb 173.8556 us, ub 482.0836 us, ci 0.950 | |
found 2 outliers among 10 samples (20.0%) | |
1 (10.0%) high mild | |
1 (10.0%) high severe | |
variance introduced by outliers: 9.000% | |
variance is slightly inflated by outliers |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment