2012年6月11日月曜日

インデックスづくり

SDPA-C のアルゴリズムは、おそらく extended sparsity pattern の行列を明示的に保持する必要がなくなるはずであって(ほとんどが cholmod_factor に集約されるため)、実装全体が簡素化できるはずである。
ただ、そのために clique で分解できるようにインデックス対応をつける必要があり、これが煩雑である。
インデックス対応は全体の効率化のために複数種類準備することとなり、そのあたりも複雑になっている。

論文のアルゴリズムでは単純に「行列の掛け算」となっているところも、実際の実装だと何種類もの掛け算があって、そのうちから適切に選択しなければならない。

今日の作業内容:SDPA-C インデックスづくり 3h
今日のランチ:サイゼリヤ きのこのスパゲッティ
明日の予測作業時間:5h


2012年6月8日金曜日

線形代数演算書き始め

データ構造体については、ある程度の主だったものは書いたので必要になった時点で追加することとし、線形代数演算を書き始めた。

今回は、入力行列と変数行列の内積計算である。
密行列であれば blas を呼んで終わりであるが、疎行列とクリーク分解した行列の内積となっていて、案外煩雑である。
このあたりも呼ばれる回数が多いので、できるだけ効率的に組んでおきたい。

今日の作業内容:SDPA-C 2h
今日のランチ:つかさ ネギトロ丼
明日の予測作業時間:3h


2012年6月7日木曜日

順列対応付け

今日は、普通の sparse matrix と clique で情報を持っている matrix の二つの間で内積を取れるようにするために、順列の対応付けをプログラムしておいた。
clique については、CHOLMOD のsupernode 情報から生成しているので、そのあたりの対応がうまく取れているかを、あとでデバッグする必要がありそうだ。

今日の作業内容:SDPA-C 2h
今日のランチ:シッダルータ ベジタブルカレー
明日の予測作業時間:4h


2012年6月6日水曜日

昨日のプログラムも一部書き直し

今日になって、昨日書いていたプログラムをそのままでは利用しづらいことが分かり、ある程度書き直しをしている。
問題となっているのは、ブロック対角構造に対してのところで、それぞれのブロックごとのクラスを作らなくてもいけるかと思ってコーディングしていたが、それだと煩雑になりすぎることが分かったので、クラスをもう一度書きなおしている。
今書いているのがデータ構造なので、こういったことが起こりがちであるが、ある程度進めば解消してくると期待している。

今日の作業内容:SDPA-C 3h
今日のランチ:味庵 バンバンジー
明日の予測作業時間:3h


2012年6月5日火曜日

SDPA-M on 64bit Windows がうまくできてない

32bit Windows と同じようにして 64bit Windows を mingw-64 で SDPA-M をコンパイルしてみたが、どうやらこれでは実行できないようだ。

考えられる点としては、
[1] 32bit Windows の mex は DLL が本体だが 64 bit Windows の mex は DLL ではないかもしれない。
[2] mingw-64 の DLL では Matlab が読み込めない
[3] Debian unstable では新しすぎて Matlab が対応できていない

[3]については、Debian unstable よりも遅れている Ubuntu 12.04 上でも Matlab が実行できないなど不具合が発生している。
最近の Matlab は、Linux への対応が遅れつつあるので、Ubuntu 12.04 などの新しい Linux ではなく少し古めの Linux があったほうがいいのかもしれない。(Debian unstable は、その名の通り不安定版なので、ここで実行できなくても特に問題はないが。)

ちなみに、SDPA-C のソースは

$ git diff | grep ^+ | wc -l
483
と483行程度進んでいる。
ただし、まだ実装中なので、コンパイルを試せる段階には程遠いが。


今日の作業内容:SDPA-C 4h
今日のランチ:らく 焼き魚定食
明日の予測作業時間:2h


2012年6月4日月曜日

200行ぐらいソースを書いて気がつく

データ構造から作っているが、200行程度書いてから、このままでは効率的にいかない部分があることが分かった。
問題は、入力行列が対角ブロックであり、ブロック数は多いながらも、そのほとんどが疎となりうる点にある。
これは、SDPA の場合は特に問題にならないが SDPA-C の場合は、検討すべき点の一つであった。
もうすこし再検討してみよう。

今日の作業内容:SDPA-C 3h
今日のランチ:角笛 焼きカレー
明日の予測作業時間:5h

2012年6月1日金曜日

SDPA-C の branch を作った

今日から SDPA-C のソースを実際に組み込んでいく、ということで、最初の作業として SDPA-C 用の branch を SDPA の git レポジトリに作成した。

もともと SDPA のソースは git で管理しているが、SDPA 7.3.8 のソースから branch で区切ったことになる。

だいたいのアルゴリズムは、これまでに飽きるほど確認してきたので、ここからは粛々と作業を進める段階である。

今日の作業内容:SDPA-C の branch 3h
今日のランチ: 味庵 鶏肉の黒胡椒炒め
明日の予測作業時間:4h