Haskell による並列・並行プログラミング #2 担当:lotz さん
ThreadScope を用いた数独プログラムのイベントログ可視化から
amdahl law
並列実行可能な処理の量とプロセッサ数から、性能改善の最大値を求められる。
type Stragegy a = a -> Eval a という型シノニムを導入
ユーザーがストラテジーを合成することで並列化戦略を書きやすくする
Control.Parallel.Strategies にStrategyのコンビネータAPIが提供されており、うれしい
3.1 戦略の並列化
rparWith :: Strategy a -> Strategy a : 受け取った戦略をrparで包む
3.2 リストを並列に評価する戦略
evalList :: Strategy a -> Strategy [a] : 受け取った戦略をリストの各要素に適用する戦略にする、全部 rpar で包む parList もある
3.3 例: K平均法
頂点集合とクラスタ数 K を受け取って、 K 個のクラスタの重心を求めるアルゴリズム
必要パッケージ: parallel, vector
cabal exec --ghc-options="-O2 -threaded -rtsopts -eventlog" -- kmeans strat 64 +RTS -N4 -l
スパーク活動の可視化
threadscopeのHECって?: Haskell Execution Context
チャンクの粒度のトレードオフ
チャンクが少なすぎる→チャンク毎の計算次回のばらつきが大きく、最も遅いチャンクがボトルネックになる
チャンクが多すぎる→チャンク作成と計算結果の合成のオーバーヘッドが大きくなる
次回 3.4 から