LoginSignup
5
5

More than 1 year has passed since last update.

分散メモリ型並列(MPI)にも対応するC++用並列線形代数ライブラリTpetraをWindowsで使う

Last updated at Posted at 2014-11-03

世の中uBLASやViennaCLなど(共有メモリ型並列)線形代数ライブラリは数あれど、多ノードなど分散メモリ型並列に対応する線形代数ライブラリはなかなかありません。

そんなな中 Tpetra というライブラリを見つけたので使ってみました。

私を個人的にご存知のかたはご存知の通り Visual Studio以外で開発したくない派 なので、そのための手順メモです。

環境

OS
Windows 7 Pro
IDE
Visual Studio 2012(Cygwinなどは使わない)

準備

  1. MS-MPIが使用できる状態にします(以前の投稿も参照)
  2. CMakeをインストールします

Tpetraのビルド

  1. Tpetraは実際にはTrilinosというライブラリの中の1パッケージなので、まずはTrilinosをダウンロードします(公開gitレポジトリもあるので私はそっちを使いました・・・これならユーザー登録いらないし)。
  2. Cmake-guiを起動します
  3. "Where is the source code:"に先にダウンロード(&解凍)したフォルダを指定します。
  4. "Where to build the binaries:"に適当な場所(ダウンロードしたフォルダ以外)を指定します。私はダウンロードしたフォルダの直下にbuildというフォルダを作ってそこを指定しました。
  5. Configureします。
  6. Specify the generator for this projectでVisualStudioを指定します。
  7. 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で設定)
  8. もう一度Configureします。赤い文字で警告っぽいのがずらーっと出てきますが、とりあえず最後のFinished configuring Trilinos!とかConfiguring doneが見えたら大丈夫っぽいです。
  9. Generateします。
  10. さっき指定したbuildフォルダにVisualStudio用のファイルができてます。
  11. VisualStudioを管理者権限で起動 します。あとでインストール時にProgram Filesの中を触るためです。
  12. 管理者権限で起動したVisualStudioから、Trilinos.slnを開きます。
  13. ALL_BUILDプロジェクトをリビルドします。割りに時間がかかるので、気長に待ちましょう。
  14. ビルドは成功するはず。
  15. INSTALLプロジェクトをビルド(リビルドじゃないよ!)します。そうすると、C:\Program Files (x86)\Trilinosあたりにインクルード&ライブラリが一式入ります。
  16. ここまで、Hello worldぐらいは動くようになっているはずです。お試しプロジェクトを作って試してみましょう(プロジェクトのVC++ディレクトリや、リンカーの追加依存ファイルの設定を忘れずに)。

線形代数ライブラリを使う

実は↑までだと、BLASライブラリがないので実際に行列計算などしようとするとビルドできません。 Tpetra自身は別の(基礎となる)BLASライブラリ が必要です。

ので、今回はCLAPCKを入れます。既にMKLなど別のBLASライブラリを入れてる方はこの手順要らないと思います(たぶん)。

  1. CLAPACKを手に入れます。自力ビルドする方法もGoogle先生に聞けば一杯見つかるんですが、実はビルド済みバイナリがあるのでこれをそのまま使います。
  2. 先のビルド済みバイナリを解凍すると、INCLUDEとLIBが既にあるので、それを適当な場所(C:\clapack\INCLUDEとかC:\clapack\LIBとか)にコピーします。
  3. VisualStudioで先にコピーしたINCLUDEとLIBを設定します。追加依存ファイルももちろん設定します。
  4. 基礎的な線形代数演算が動くようになったはずです!
  5. なんかリンカーの警告が出たりするかもしれませんが、とりあえず動くはずです。
  6. ほんとに複数プロセスで並列化できてるのか実感ないですが、とりあえず動くはずです!

まとめ

  • Tpetraは手順通りやればビルドできる(どっちかというとCMakeの使い方が難しい)。
  • 基礎的なBLASライブラリがないとTpetraは動かないので、ちょっとめんどい。

では、 良き並列化ライフを!
(なんか試したけどうまくいかないとか、こうした方がいいとかあれば是非コメントください)

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5