5章Repaを用いたデータ並列プログラミング
これまでの章で説明してきた技術は、リストやMap
のような通常のデータ構造を用いるコードの並列化でした。しかし、これらの技術は、巨大な配列に対するデータ並列アルゴリズムに対してはうまく働きません。大規模な配列に対する計算では、高い直列実行性能が要求されますが、これは非ボックス化配列を用いてのみ達成されます†1。戦略を使うためには遅延データ構造が必要なので、非ボックス化配列の操作を並列化するために戦略は使えません(非ボックス化配列ではなく、ボックス化配列が必要です)。同じようにPar
もうまくいきません。Par
ではIVar
でデータが渡されるからです。
[†1] 訳注:Haskellでは特殊な指定をしない限り、すべてのデータ型はポインタを用いて間接参照されています。例えばInt
やFloat
も例外ではありません。このようなデータ型をボックス化されていると言います。そのため、例えばInt
やFloat
の配列は実際にはポインタの配列です。用途によっては、これは非効率です。ボックス化されたデータに対し、即値を非ボックス化データと呼びます。つまり、非ボックス化配列とは、即値の配列のことです。
この章では、Haskellで効率のよい数値配列計算を書く方法と、それを並列に実行する方法を説明します。この章で使うライブラリはRepaという名前で、これは "REgular PArallel arrays" の略語です†2。このライブラリは、効率的に配列を作成する操作、および配列への並列操作をたくさん提供しています。
[†2] 本書ではRepa3.2を利用します。3.0では少しAPIが異なります。
RepaパッケージはHackageから利用できます。これまでの章で、サンプルコードをインストールする手順にしたがっていれば、すでにインストールされているはずですが、もしインストールされていなければ、 ...
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.