Sun Grid EngineとC言語プログラム
Sun Grid Engineとは、分散コンピューティング/
コンピュータ・クラスター環境におけるジョブ管理システム。
オープンソースだがサン・マイクロシステムズが援助しており、
サンから商用版の N1 Grid Engine が発売されている。
by Wikipedia先生
って言われてもわかりにくいですよね。
簡単に言うと大学等にある大型コンピューター群の使用率
を管理し、使用率の低いコンピューターに対しジョブ(プログラム)を
わりあてるソフトウェアのこと。
(私の説明もわかりにくいかも。。。(-_-#))
通常Sun Grid Engine(SGE)を通して投げられるプログラムは
スクリプト言語(コンパイルのいらない言語(perlやrubyなど)
によるものでなければならない。
なのでバイナリ(C, C++などのプログラムをコンパイルしたもの)
のプログラムをSGE経由で投げるには少し手間がかかる(-_-!)
方法として以下の二通りがある。
通常は2番目のシェルスクリプトが推奨されている。
私もC言語のプログラムをSGE経由で走らせようと思って
2番目の方法で試みてみた。
まずC言語のプログラム(temp.cpp)をSun Grid Engineで走らせる
ために、ファイルsamp.shに以下のようなシェルスクリプトを
記述した。
#$ -S /bin/sh
/home/my_name/temp
ここでtempはtemp.cppをg++でコンパイルしたもの。
qsubを使って実行してみると
machineB{my_name}220: qsub -cwd samp.sh
なぜかエラーが出てしまう。エラーファイルを見てみると
ld.so.1: temp : fatal: libstdc++.so.6: open failed: No such file or directory
Killed
んー、私は基本的にこういう記述は意味不明なのですが、
なんとなくlibstdc++.so.6が見つからないようだ
他の人に相談してみたところ、qsubで環境変数も設定できるようなので
それを利用してみることに。
まずlddを使ってlibstdc++.so.6のパスを検索
machineB{my_name}230: ldd temp
libstdc++.so.6 => /usr/local/lib/libstdc++.so.6
libm.so.1 => /usr/lib/libm.so.1
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1
/usr/platform/SUNW,Sun-Fire-15000/lib/libc_psr.so.1
libstdc++.so.6のパスは/usr/local/lib/なので
samp.shを以下のように編集し、
#$ -S /bin/sh
#$ -v LD_LIBRARY_PATH=/usr/local/lib/
/grid/share/my_name/temp
いざqsubを実行し、qstatでチェックすると
machineB{my_name}231: qsub -cwd samp.sh
machineB{my_name}232: qstat -u my_name
job-ID prior name user state submit/start at queue slots ja-task-ID
- -
4322619 0.50050 samp.sh my_name r XX/XX/XXXX 17:32:20 lab_share.q@machineA 1
うまくプログラムがSGE経由で走った(^o^)v