そしたらまさにそれらしき情報を発見(http://yunomu.hatenablog.jp/entry/2012/05/12/060238)したので,早速試してみる.
monad-parallelというパッケージを使うらしいのでまずはインストール.cabalを使えば楽勝.
$ cabal update
$ cabal list monad-parallel
* monad-parallel
Synopsis: Parallel execution of monadic computations
Default available version: 0.7.1.1
Installed versions: [ Not installed ]
Homepage: http://trac.haskell.org/SCC/wiki/monad-parallel
License: GPL
$ cabal install monad-parallel
おわり.Windows(Cygwin)でもUbuntuでも特に問題なし.
使える関数はここを参照→
http://hackage.haskell.org/packages/archive/monad-parallel/0.5.1/doc/html/Control-Monad-Parallel.html
使える関数はここを参照→
http://hackage.haskell.org/packages/archive/monad-parallel/0.5.1/doc/html/Control-Monad-Parallel.html
じゃあ次はテストをしてみる.
fibTest.hsという名前で以下を保存.
---------- ここから ----------
fib 0 = 1
fib 1 = 1
fib n = fib (n-2) + fib (n-1)
test n = print $ fib n
main = sequence [(test 40), (test 40), (test 40)]
---------- ここまで ----------
要は適当なフィボナッチ数を計算して表示するって計算を3回やるプログラム.
以下で時間を計ってみる.
$ ghc --make fibTest.hs -O
$ time ./fibTest
次にfibTestPar.hsという名前で以下を保存
---------- ここから ----------
import qualified Control.Monad.Parallel as P
fib 0 = 1
fib 1 = 1
fib n = fib (n-2) + fib (n-1)
test n = print $ fib n
main = P.sequence [(test 40), (test 40), (test 40)]
---------- ここまで ----------
コンパイル時および実行時にオプションが必要なので気を付ける.
$ ghc -threaded --make figTestPar.hs -O
$ time ./fibTestPar +RTS -N
パフォーマンスモニターで見れば並列計算が行われて時間が短くなったのが分かる.
実行時の +RTS -N オプションはOSが適当に使うコア数を決めるというオプション.
「2つのコアしか使いたくない」とかがあるなら +RTS -N2 でOK.
(よくわかんないけど,+RTS .... -RTS の間に並列計算のオプションを挟むってことか?)
他にもいろいろオプションがあるみたいだけど,それは必要になったときに調べます.
0 件のコメント:
コメントを投稿