2010年2月19日金曜日

グラフ理論用ライブラリの作成と SDPA ベンチマーク

今日は、昨日の思い付きのままに、グラフ理論用ライブラリを作り始めてみた。
まずは、最短路問題をダイクストラ法でプログラムを作成し、ライブラリにはどのようなファイルが必要かを特定することとした。

BLAS/LAPACK の場合には、出力の行列の規模が最初から解かっているので、ユーザがそれを確保すればOKだが、グラフ理論の場合、計算してみないと解からない。
例えば、最短路であれば、最短路を出力するためには、最短路の頂点数だけの配列が必要だが、その頂点数は計算しないと解からない。
これをどのようにクッションを入れるか、が難しいところだ。

あとは、関数ごとにディレクトリを別にすることで、他のディレクトリから独立してプログラムを組むことができる。
それぞれのディレクトリには、Makefile を配置し、make lib により全体としてのライブラリ(lib???.a) に ar で組み込む仕組を導入した。
これによって、一番上の Makefile は各ディレクトリに入って make lib を実行するように書くだけでOKとなる。
もちろん、サンプルプログラムや、マニュアル類もそれぞれのディレクトリごとに置く。
つまり、それぞれのディレクトリで、
$ make lib
$ make sample
$ make run_sample
が実行できるようにしている。
このようにすることで、関数ごとに違うプログラマが実装しても全体としての調和を維持することができる。



今日は、他に Ubuntu on vmplayer on Type P で SDPA をインストール。
ATLAS のコンパイルは、configure に失敗していて上手く行っていなかったので、GotoBLAS2 を使ってのインストール。
明日あたりに、ATLAS のコンパイルに再挑戦したい(ATLAS のコンパイルは6時間以上かかるため。)

実際に実行して、Type P(Atom Z550, 2.0GHz) と Xeon X5365(3.0GHz) で比較してみた。
control8 Atom 204.75 秒, Xeon 18.18 秒 (11.1倍)
arch0 Atom 8.32 秒, Xeon 1.12 秒(7.42倍)
とかなり違いが出た。
基本的には、Xeon のPCと比べると Type P は 10 倍程度遅い。
ちなみに、ユニティを使っていると、arch0 が 8.32 秒から 11.43秒に遅くなる。
やはり、ユニティは CPU 消費が大きいようだ。

ついでに、SDPARA もインストール。
なお、Ubuntu の場合は、/etc/hosts に不自然な点があるので、rsh を実行するときには注意が必要。
たとえば、hostname を mypc1 にすると、localhost は 127.0.0.1 であるが、mypc1 は 127.0.1.1 になってしまう。
したがって、xinetd で only_from をかけたときに 127.0.0.1 だけだと、挙動がおかしくなる。
この場合は、/etc/hosts で localhost も mypc1 も 127.0.0.1 に割り当てたほうがよい。
なお、xinetd の各設定は、Vine からコピーした。xinetd で rsh を動かすときには、rsh-server パッケージではなく、rsh-redone-server パッケージをインストールした。

あと、iptables でポートが閉じられているはずなのだが、よく解からないうちに動くようになってしまった。一度
$ sudo iptables -F
で全部開放したのが効いたのかもしれないが、たしか iptables は特別な設定をしないと Ubuntu を再起動したときに元に戻るはず。ただ、Ubuntu を再起動しても、なぜか SDPARA はきちんと動く。
不思議だ。

今日の作業内容: ライブラリづくり 4h + Ubuntu 3h (一部並行作業)
今日のBGM: スカイ OST[1-2], MADLAX OST [1-2], FF5 OST [1-2]
今日のランチ: シッダルータ ほうれんそうとチキンのカレー
明日の予測作業時間: 3h

0 件のコメント:

コメントを投稿