世の中uBLASやViennaCLなど(共有メモリ型並列)線形代数ライブラリは数あれど、多ノードなど分散メモリ型並列に対応する線形代数ライブラリはなかなかありません。
そんなな中 Tpetra というライブラリを見つけたので使ってみました。
私を個人的にご存知のかたはご存知の通り Visual Studio以外で開発したくない派 なので、そのための手順メモです。
環境
- OS
- Windows 7 Pro
- IDE
- Visual Studio 2012(Cygwinなどは使わない)
準備
Tpetraのビルド
- Tpetraは実際にはTrilinosというライブラリの中の1パッケージなので、まずはTrilinosをダウンロードします(公開gitレポジトリもあるので私はそっちを使いました・・・これならユーザー登録いらないし)。
- Cmake-guiを起動します
- "Where is the source code:"に先にダウンロード(&解凍)したフォルダを指定します。
- "Where to build the binaries:"に適当な場所(ダウンロードしたフォルダ以外)を指定します。私はダウンロードしたフォルダの直下にbuildというフォルダを作ってそこを指定しました。
- Configureします。
- Specify the generator for this projectでVisualStudioを指定します。
- 1回めは失敗します(たぶん)ので、以下の設定に変えてください。失敗しなくても再設定したほうがよいと思います。
他のパッケージも使いたければここで設定するとよいと思います(試してないので使い方は不明)-
TPL_ENABLE_MPI
をON -
Trilinos_ENABLE_ALL_OPTIONAL_PACKEGES
をオフ -
Trilinos_ENABLE_TEUCHOS_THE_MONITOR
をオフ -
Trilinos_ENABLE_Tpetra
を オン -
Trilinos_INSTALL_EXECUTABLES
を オン -
Trilinos_ASSERT_MISSING_PACKEGES
をオフ(gitレポジトリから持ってきた場合は必須 - おそらく通常は見えないのでAdvancedで設定)
-
- もう一度Configureします。赤い文字で警告っぽいのがずらーっと出てきますが、とりあえず最後の
Finished configuring Trilinos!
とかConfiguring done
が見えたら大丈夫っぽいです。 - Generateします。
- さっき指定したbuildフォルダにVisualStudio用のファイルができてます。
- VisualStudioを管理者権限で起動 します。あとでインストール時にProgram Filesの中を触るためです。
- 管理者権限で起動したVisualStudioから、
Trilinos.sln
を開きます。 -
ALL_BUILD
プロジェクトをリビルドします。割りに時間がかかるので、気長に待ちましょう。 - ビルドは成功するはず。
-
INSTALL
プロジェクトをビルド(リビルドじゃないよ!)します。そうすると、C:\Program Files (x86)\Trilinos
あたりにインクルード&ライブラリが一式入ります。 - ここまで、Hello worldぐらいは動くようになっているはずです。お試しプロジェクトを作って試してみましょう(プロジェクトのVC++ディレクトリや、リンカーの追加依存ファイルの設定を忘れずに)。
線形代数ライブラリを使う
実は↑までだと、BLASライブラリがないので実際に行列計算などしようとするとビルドできません。 Tpetra自身は別の(基礎となる)BLASライブラリ が必要です。
ので、今回はCLAPCKを入れます。既にMKLなど別のBLASライブラリを入れてる方はこの手順要らないと思います(たぶん)。
- CLAPACKを手に入れます。自力ビルドする方法もGoogle先生に聞けば一杯見つかるんですが、実はビルド済みバイナリがあるのでこれをそのまま使います。
- 先のビルド済みバイナリを解凍すると、INCLUDEとLIBが既にあるので、それを適当な場所(
C:\clapack\INCLUDE
とかC:\clapack\LIB
とか)にコピーします。 - VisualStudioで先にコピーしたINCLUDEとLIBを設定します。追加依存ファイルももちろん設定します。
- 基礎的な線形代数演算が動くようになったはずです!
- なんかリンカーの警告が出たりするかもしれませんが、とりあえず動くはずです。
- ほんとに複数プロセスで並列化できてるのか実感ないですが、とりあえず動くはずです!
まとめ
- Tpetraは手順通りやればビルドできる(どっちかというとCMakeの使い方が難しい)。
- 基礎的なBLASライブラリがないとTpetraは動かないので、ちょっとめんどい。
では、 良き並列化ライフを!
(なんか試したけどうまくいかないとか、こうした方がいいとかあれば是非コメントください)