2010年3月3日水曜日

SDP ソルバー実行シェルスクリプト

数値実験用に SDP ソルバーを複数 (SDPA, CSDP, SeDuMi, SDPT3) 動かすが、これを毎回手作業でやっていては面倒になってきたため、シェルスクリプトと matlab コードを作った。

exeSDPsolver.sh

#!/bin/sh

for problem in *.dat-s
do
# SDPT3
matlab -nodisplay -r "exeSDPsolver('$problem','SDPT3')" 2>&1 | tee $problem.SDPT3.log
#SeDuMi
matlab -nodisplay -r "exeSDPsolver('$problem','SeDuMi')" 2>&1 | tee $problem.SeDuMi.log
#CSDP
OMP_NUM_THREADS=1 /usr/bin/time ./csdp $problem $problem.CSDP.result 2>&1 | tee $problem.CSDP.log
#SDPA
OMP_NUM_THREADS=8 /usr/bin/time ./sdpa $problem $problem.SDPA.result -numThreads 8 2>&1 | tee $problem.SDPA.log
done

rm -f time-table.txt
grep -H ^computing *.SeDuMi.log >> time-table.txt
grep -H ^computing *.SDPT3.log >> time-table.txt
grep -H ^Total *.CSDP.log >> time-table.txt
grep -H ^ALL *.SDPA.log >> time-table.txt

sort time-table.txt > result-problem.txt
cp time-table.txt result-solver.txt

exeSDPsolver.m

function exeSDPsolver(filename,solver)


fprintf('%s - %s - START @ %s\n',solver,filename,datestr(now));
if strcmpi(solver,'SeDuMi') == 1
addpath(genpath('PATH_TO_SEDUMI/SeDuMi_1_21'));
[At,b,c,K] = fromsdpa(filename);
tic;
[x,y,info] = sedumi(At,b,c,K);
endtime=toc;
elseif strcmpi(solver,'SDPT3') == 1
addpath(genpath('PATH_TO_SDPT3/SDPT3-4.0-beta'));
[blk,At,C,b] = read_sdpa(filename);
tic;
[obj,X,y,Z] = sqlp(blk,At,C,b);
endtime=toc;
end
fprintf('computing time = %.2f for %s\n',endtime,filename);
fprintf('solver - %s - end @ %s\n',filename,datestr(now));
exit;

なお、SeDuMi と SDPT3 は choltmpsize という関数名が衝突するので、addpath でどちらを使うのかを明示するようにしている。(上の matlab ファイルでは、PATH_TO_SEDUMI, PATH_TO_SDPT3 を適宜修正する必要がある。)

また、CSDP は OpenMP の機能が使えるようにコンパイルしたのだが、なぜか OpenMP を利用するとCSDP が極端に遅くなるので、OMP_NUM_THREADS=1 と設定してある。SDPA では、この現象は起こらない。

これで、csdp, sdpa の実行ファイルと param.sdpa をカレントディレクトリにコピーしてきて
$ ./exeSDPsolver.sh
を実行すると、カレントディレクトリにある dat-s を一通り解いて、計算時間をまとめてくれる。
あとは、result-problem.txt で計算時間を確認すればよい。


今日は、昨日までの論文チェックをした。
2度目で読むと、やはり理解が深まる。

あとは原稿作り。上のスクリプトの計算が今夜にはできるはずなので、明日のうちに原稿に計算結果を反映させる

あと、SDPARA の原稿が今日は進まなかったので、そちらも進めるようにする。

今日の作業内容:論文読み 2h + 数値実験関係 2h + 学会発表用アブストラクト 2h
今日のBGM: マクロスF OST [1-2], FF7 OST [1,2,4]
今日のランチ: 鳥こまち 鳥せいろ丼
明日の予測作業時間: 6h

0 件のコメント:

コメントを投稿