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 件のコメント:
コメントを投稿