4章データフロー並列: Parモナド

前の2つの章では、遅延評価と共に並列性を表現するEvalモナドと戦略を説明してきました。戦略は遅延データ構造を受け取って、そのパーツを並列に評価します。このモデルにはいくつかの長所があります。アルゴリズムを並列性から分離できることと、並列評価戦略を組織的に構築できることです。しかし戦略とEvalモナドは、いつでも並列性を表現するための最も便利で効率的方法というわけではありません。例えば、遅延データ構造を作りたくないような場合です。遅延評価には、戦略と共に使うと、優れたモジュラリティがありますが、その一方で遅延評価はその挙動を理解して、性能を調査するのがややこしくなる側面もあります。

この章では、Parモナドという違ったトレードオフを持つ別の並列プログラミングモデルを説明します。Parモナドの目標は、並列プログラミングにとって大切な決定性を損なうことなしに、より明示的に粒度とデータの依存関係を記述して、遅延評価への依存をなくすことです。このプログラミングモデルでは、プログラマはより詳細な記述を求められますが、その代わりにより細かく制御できるようになります。Parモナドには、さらに別の利点もあります。例えば、完全にHaskellのライブラリとして実装されているので、別のスケジュール戦略を採用するように実装を簡単に書き換えられます。

Parモナドのインタフェースは(当然ながら)Parと呼ばれるモナドを基にしています。

newtype Par a
instance Applicative Par
instance Monad Par

runPar :: Par a -> a

Parモナドの計算はrunParを用いて実行できます。その結果として純粋な結果が生成されます。 ...

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.