ジョブ実行時に error while loading shared libraries が出力されて失敗する場合の対応方法

 ジョブ実行時に次のようなエラーメッセージが出力される場合があります.

./a.out: error while loading shared libraries: libcudart.so.7.0: cannot open shared object file: No such file or directory

原因はライブラリのパスが正しく設定されていないためです.
ライブラリパスが通っているかどうかは ldd コマンドで確認できます.not found となっているものは正しく設定されていないです.

$ ldd ./a.out
...
libcudart.so.7.0 => not found
...

対応としては,環境変数設定としてライブラリパスを通してください.次のコマンドで設定できます.バッチジョブとして投入する場合は,下記「t2sub でジョブ投入する場合」の通り,環境変数設定をしてください.

(bash 系の場合) $ export LD_LIBRARY_PATH=:${LD_LIBRARY_PATH}
(csh 系の場合) % setenv LD_LIBRARY_PATH :${LD_LIBRARY_PATH}

主要なコンパイラ,ライブラリについては /usr/apps.sp3/env 下に環境変数設定用スクリプトがあります.例えば CUDA 6.0 の環境設定を行う場合は,次のコマンドを実行します.

(bash 系の場合) $ source /usr/apps.sp3/env/set_cuda-7.5.sh
(csh 系の場合) % source /usr/apps.sp3/env/set_cuda-7.5.csh

その他のTSUBAME 上での主要な MPI, コンパイラの環境変数設定方法は手引きをご参照ください.
TSUBAME 利用の手引き
 

t2sub でジョブ投入する場合

t2sub コマンドでジョブ投入する場合は,バイナリを実行する前に環境変数の設定を行う必要があります.
ジョブスクリプト中で設定を行った場合,ノード内実行であれば問題は無いのですが,ノード間で実行した場合はジョブがアサインされた先頭ノード以外に環境変数が伝播しない場合があります.その場合の対応方法は,次の通りです.

.bashrc で環境変数設定を行う

ログインシェルに Bash を使用している場合,ホームディレクトリ直下の .bashrc ファイル中に環境変数設定を記述することで,
記述後の全てのログインプロセスに対して環境変数が有効となります.
ジョブによって環境変数を使い分けたい場合は,都度 .bashrc を書き変えたり,別の対処方法を考える必要があります.

mpirun の機能で子プロセスに環境変数を伝搬させる

MPI の実装ごとのプロセスへの環境変数の伝搬は次の FAQ の(3) ハイブリッド並列をご参照ください.
ハイブリット並列時の環境変数の引き渡し方法を教えてください(OpenMP,自動並列)(2014.10.17新規)