2011年7月8日金曜日

OpenMPI と libtool

SDPARA を実験用にコンパイルし直しているが、まだうまくいっていない点がある。

まず、intel コンパイラと gcc コンパイラがあるときには intel コンパイラのほうが性能が出やすいので intel コンパイラでコンパイルするが、intel コンパイラだと動作が不安定になることがある。(データの転送に時間がかかったりする。)
このときには gcc で統一してコンパイルを行うのが安全策だが、intel コンパイラのライブラリが ldconfig で登録されていると、gcc と intel が混在してより不安定になる。
このことは、例えば
$ ldd sdpara
とするとわかる。
ldconfig に登録されているものは
$ /sbin/ldconfig -p
で出力される。

ldconfig はルート権限がないと修正できないので、LD_LIBRARY_PATH で対応することになる。
ただし、OpenMPI の中に含まれている libtool のスクリプトは ldconfig の情報を利用してしまうので、注意が必要である。

OpenMPI の場合の作業は、
1. configure を実行
2. grep で ldconfig から持ってきたパスの部分を削除 。libtool, config.h などの複数ファイル,ディレクトリにあるので注意。
$ grep -r -l (ldconfigのパスで不要なところ) *
として探す。
3. make
4. grep でもう一度確認してバイナリファイルに含まれていないかをみる
5. make install
6. LD_LIBRARY_PATH を設定
となる。

あと、OpenMPI で infiniband, Ethernet が両方ついているときには、
$ mpirun  --mca btl ^openib --mca btl_tcp_if_include eth0
とすると、Ethernet を明示的に設定できる。
また、
$ mpirun -np 2 ./cpi.exe
で gdb をかけるのであれば、
$ gdb mpirun --eval-command="run -np 2 ./cpi.exe"
とすれば可能であり、valgrind なら
$ mpirun -np 2 valgrind ./cpi.exe
である。


ここまでいろいろと調べてみたが、Sparse Cholesky factorization の解析のときに pthread がセグメンテーションフォルトを起こしてしまう。
valgrind で調べると、OpenMPI 1.5.3 はかなりメモリーリークを起こしているようなので、あとで OpenMPI 1.4 系列の stable 版に切り替えてみることとする。

今日の作業内容:SDPARAコンパイル 5h
今日のランチ:信華園 レバー野菜炒め
明日の予測作業時間:5h

0 件のコメント:

コメントを投稿