3章評価戦略
評価戦略、あるいは単に戦略とは、並列性からアルゴリズムを分離して並列コードをモジュール化する手法のことです。ときにはアルゴリズムを書き換える必要がありますが、一度書き換えてしまえば、新しい戦略に置き換えるだけで別の並列化が可能になります。
具体的には、Strategy
はEval
モナド内の関数で、引数として型a
の値を取り、同じ値を返します†1。
[†1] 訳注:出力のEval
モナドが保持する値は、入力の値と同じであることに注意して下さい。
type Strategy a = a -> Eval a
Strategy
のアイディアは、入力としてあるデータ構造の値を取り、rpar
およびrseq
を使って並列性を生成しながらこれを走査し、結果として元と同じ値を返すことです。
以下に簡単な例を示します。組の2つの要素を並列に評価するStrategy
を作ってみましょう。目標は、次の型を持つ関数parPair
です。
parPair :: Strategy (a,b)
先に示したStrategy
型の定義によれば、この型は(a,b) -> Eval (a,b)
と同じだとわかります。parPair
は組を取り、Eval
モナド内で何らかの計算をし、その組を返します。以下がその定義です。
parPair :: Strategy (a,b) parPair (a,b) = do a' <- rpar a b' <- rpar b return (a',b')
これは「2.2 Evalモナド、rpar、rseq」で説明したrpar
/rpar
パターンに似ています。違いは、1つのStrategy
に梱包したところです。データ構造(この場合は組)を取り、rpar
を使って何らかの並列性を生成してから、同じデータ構造を返します。 ...
Get Haskellによる並列・並行プログラミング now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.