Skip to content

Commit 5fb5561

Browse files
author
Tomasz Tylec
committed
initial commit
1 parent 17fe783 commit 5fb5561

11 files changed

+1445
-0
lines changed

README.md

Whitespace-only changes.

examples/benchmark.hs

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
module Main where
2+
3+
import Criterion.Main
4+
5+
import Control.Monad
6+
import Data.IORef
7+
import Data.Random
8+
import Data.Random.Distribution.Uniform
9+
import Data.Vector (Vector, fromList)
10+
import System.Random.MWC (GenIO, uniformVector, createSystemRandom, create)
11+
import qualified System.Random.MWC as MWC
12+
import Statistics.Sample (mean)
13+
14+
import Data.Random.Source.PureMT (newPureMT)
15+
import Data.Random.Source.DevRandom
16+
17+
18+
19+
k = 10000
20+
21+
randomListFu :: RVar (Vector Double)
22+
randomListFu = fromList <$> replicateM k stdUniform
23+
24+
randomListMWC :: GenIO -> IO (Vector Double)
25+
randomListMWC gen = fromList <$> replicateM k (MWC.uniform gen)
26+
27+
main :: IO ()
28+
main = do
29+
mwc <- createSystemRandom
30+
puremt <- newPureMT >>= newIORef
31+
32+
defaultMain
33+
[ bgroup "MWC vs randomu-fu abstraction"
34+
[ bench "random-fu"
35+
$ nfIO (mean <$> sampleFrom mwc randomListFu)
36+
, bench "mw'"
37+
$ nfIO (mean <$> randomListMWC mwc)
38+
]
39+
, bgroup "Different sources"
40+
[ bench "pureMT"
41+
$ nfIO (mean <$> sampleFrom puremt randomListFu)
42+
, bench "std"
43+
$ nfIO (mean <$> sample randomListFu)
44+
, bench "urandom"
45+
$ nfIO (mean <$> sampleFrom DevURandom randomListFu)
46+
]
47+
]

examples/memory.hs

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module Main where
2+
3+
import System.Environment
4+
import Control.Monad
5+
import Data.Random
6+
7+
inCircle :: Double -> Double -> Double
8+
inCircle x y | x^2 + y^2 <= 1 = 1
9+
| otherwise = 0
10+
11+
point = inCircle <$> stdUniform <*> stdUniform
12+
13+
areaMC :: [Bool] -> Double
14+
areaMC ps = let l = fromIntegral . length
15+
in l (filter id ps) / l ps
16+
17+
areaMC' :: [Double] -> Double
18+
areaMC' ps = sum ps
19+
20+
-- piMC :: Int -> IO Double
21+
-- piMC n = (*4) . areaMC' <$> sample (replicateM n point)
22+
23+
piMC :: Int -> IO Double
24+
piMC n = (*4) . areaMC' <$> sample (replicateM n point)
25+
26+
piMC' :: Int -> RVar Double
27+
piMC' n = (*4) . areaMC' <$> replicateM n point
28+
29+
main = do
30+
(ns:_) <- getArgs
31+
let n = read ns :: Int
32+
p <- piMC n
33+
-- p <- sample $ piMC' n
34+
print p

haskellr.nix

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{pkgs ? import <nixpkgs> { }, ghc ? pkgs.haskell.compiler.ghc822}:
2+
3+
with pkgs;
4+
5+
let
6+
# Uncomment the line below to build HaskellR against a version of R with
7+
# the --enable-strict-barrier configure flag enabled for better memory
8+
# diagnostics.
9+
10+
# R = pkgs.R.override { enableStrictBarrier = true; };
11+
12+
# XXX Workaround https://ghc.haskell.org/trac/ghc/ticket/11042.
13+
libHack = if stdenv.isDarwin then {
14+
DYLD_LIBRARY_PATH = ["${R}/lib/R/lib"];
15+
} else {
16+
LD_LIBRARY_PATH = ["${R}/lib/R"];
17+
};
18+
in
19+
20+
haskell.lib.buildStackProject ({
21+
name = "HaskellR";
22+
inherit ghc;
23+
src = pkgs.fetchFromGitHub {
24+
owner = "tweag";
25+
repo = "HaskellR";
26+
rev = "59e8540f6fd6c84acba1655d758bab637b675219";
27+
sha256 = "0v9yxj4dsnl3c7qyjiwsj367z0ksy936fks9db5z3gcb5339fwrm";
28+
};
29+
buildInputs =
30+
[ python36Packages.ipython
31+
python36Packages.jupyter_client
32+
python36Packages.notebook
33+
R
34+
zeromq
35+
zlib
36+
];
37+
LANG = "en_US.UTF-8";
38+
LD_LIBRARY_PATH = ["${R}/lib/R/"];
39+
} // libHack)

nixpkgs.nix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import (fetchTarball "https://github.com/nixos/nixpkgs/archive/1354099daf98b7a1f79e6c41ce6bfda5c40177ae.tar.gz")

package.yaml

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: ft14-random
2+
version: 0.1.0.0
3+
license: AllRightsReserved
4+
author: "Tomasz Tylec"
5+
maintainer: "[email protected]"
6+
copyright: "2018 Tomasz Tylec"
7+
8+
extra-source-files:
9+
- README.md
10+
11+
description: Please see the README
12+
13+
dependencies:
14+
- base >= 4.7 && < 5
15+
- mtl
16+
- containers
17+
- extra
18+
- random-fu
19+
- random-source
20+
- vector
21+
- criterion
22+
- mwc-random
23+
- statistics
24+
- ihaskell
25+
- ihaskell-inline-r
26+
27+
28+
executables:
29+
benchmark:
30+
main: examples/benchmark.hs
31+
ghc-options: -O1
32+
33+
memory:
34+
main: examples/memory.hs
35+
ghc-options: -O1

presentation/Monty_open_door.svg.png

16.8 KB
Loading

0 commit comments

Comments
 (0)