これまで並行処理のためのデータ型として,第12回ではTVar型やMVar型,第14回ではChan型やTChan型などを取り上げてきました。一方,並列処理のためのデータ型はあまり説明してきませんでした。取り上げたのは,第10回第24回のコラムで説明したデータ並列Haskellの並列配列くらいです。

 たしかに,並列HaskellやParモナドを利用すれば,並列処理のための特別なデータ型を使わなくても並列処理は可能です。しかし,目的とする処理の並列化に特化したデータ型が用意されているのであれば,それを利用したほうが簡単かつ効率的に処理を行えます。

 そこで今回は,並列処理用のデータ型の一つとして提供されている「repa(REgular PArallel arrays)」の並列配列の基本を説明します。repaはデータ並列Haskellプロジェクトの一環として開発が進められているライブラリです。データ並列HaskellのDPHライブラリと同様に,複数のパッケージから構成されています。DPHの並列配列が汎用的な枠組みを目指して開発されているのに対し,repaの並列配列は行列演算に特化したものです。

repaを利用するための準備

 2012年6月現在の最新版であるrepa 3.1.x.xは,6月3日にリリースされた最新のHaskell Platform 2012.2.0.0で提供されているGHC 7.4.1に依存します。したがって、最新版のrepaを利用するには最新版のHaskell Platformを利用する必要があります。旧バージョンのHaskell Platform2011.4.0.0では、repa 2.1.1.3までしか利用できません。repa 2.1.1.3とrepa3.1.x.xではAPIが大きく異なるので,今回の説明では最新のHaskell Platform 2012.2.0.0とrepa 3.1.x.xを使います。

 repaは,本体であるrepaパッケージに加え,機能ごとに分かれた複数のパッケージから成るライブラリです。高速フーリエ変換などの行列演算を利用したアルゴリズムを提供するrepa-algorithmsパッケージ,repaで扱う行列をBMP形式の画像ファイルや文字列といった形式で読み書きするためのrepa-ioパッケージなどが含まれています。

 repaでは,repaの各パッケージを利用するサンプル・プログラムがrepa-examplesパッケージで提供されています。cabalコマンドを使ってrepa-examplesパッケージをインストールすることで,repaの各パッケージをまとめて一度にインストールできます。

$ cabal install repa-examples

 なお,使っている環境によっては,repa-examplesのインストールに失敗することがあります。

~ 略 ~
cabal: Error: some packages failed to install:
repa-examples-3.1.3.1 failed during the building phase. The exception was:
ExitFailure 1

 その場合には,ghc-pkgのlistコマンドを使って,repaの各パッケージがインストールされているかどうかを確認してください。

$ ghc-pkg list repa-*
/Library/Frameworks/GHC.framework/Versions/7.4.1-x86_64/usr/lib/ghc-7.4.1/package.conf.d
/Users/shelarcy/.ghc/x86_64-darwin-7.4.1/package.conf.d
    repa-3.1.4.2
    repa-algorithms-3.1.3.1
    repa-io-3.1.3.1

 repa-examplesのインストールが失敗しても,repaのライブラリとして提供される各パッケージがすべて入っていることを確認できれば,repa自体は利用できます。

 インストールに失敗するのは,コンピュータ環境にLLVMがインストールされていないのが原因です。repaのコードを最適化するにはLLVMが必要になるので,インストールしておいたほうがいいでしょう。OSなどのパッケージ・マネージャで提供されているLLVM本体のパッケージや,LLVMのサイトで提供されているLLVM本体のソースコード,バイナリなどを使ってインストールしておいてください。