研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

最短路問題: 双方向探索(bidirectional search) - 1

2010-03-31 18:40:25 | Weblog

前回の記事で登場した双方向探索(bidirectional search)を説明していく。

まずは、通常のダイクストラ法から復習する。P2P最短路問題の終了条件は「終点が探索点となる」ことであり、それまでひたすら幅優先探索的に探索済み範囲を広げていく。

「両方向探索」では、通常のダイクストラ法を2つ同時に走らせるだけのように感じるかもしれないが、その終了条件が多少複雑かもしれない。もちろん単に forward, backward の両方で確定済みになったらではない。

forward, backward それぞれのポテンシャルの更新時に、求めるべきパスの長さの更新を行う。そのパスが更新できなくなれば終了となる。

Df(v)  : forward-search におけるポテンシャル(始点からの距離)
Db(v) : backward-search におけるポテンシャル(終点からの距離)
Qf(v) : forward-search における優先キュー
Qb(v) : backward-search における優先キュー
l(v,w) : 枝 v-w の重み
mu : 求めるパスの長さ
muid : forward-search と backward-search をつなぐ点

/* forward-search でのポテンシャル更新 */
if ( Df(v) + l(v,w) < Df(w) ) {
Df(w) = Df(v) + l(v,w);
if ( Df(v) + l(v,w) + Db(w) < mu ) {
mu = Df(v) + l(v,w) + Db(w);
muid = w;
}
}

/* backward-search でのポテンシャル更新 */
if ( Db(v) + l(v,w) < Db(w) ) {
Db(w) = Db(v) + l(v,w);
if ( Db(v) + l(v,w) + Df(w) < mu ) {
mu = Db(v) + l(v,w) + Df(w);
muid = w;
}
}

/* 終了条件 */
if ( Qf[root] + Qb[root] >= mu ) {
return (mu, muid);
}

また「両方向探索」では終点からも同様の探索を行う事になるため、グラフ表現や優先キューが forward 側だけではなくて backward 側分も必要となる。よって、これまでと同じレベルの探索速度を保ちたければ通常の倍のメモリが必要になるだろう。

最短路問題: ダイクストラ法の探索方向と探索範囲

2010-03-30 18:45:06 | Weblog


ダイクストラ法は始点から近い順に(幅優先探索的に)探索していくため、終点が遠いところにあるP2P最短路問題では、到達するまでにほとんどの枝を探索してしまうことになる。

図は左から、始点→終点(Forward-Search)、終点→始点(Backward-Search)、始点⇔終点(Bidirectional-Search)の探索範囲を表しているが、明らかに「始点⇔終点」の探索範囲が狭い事が分かるだろう。

探索範囲を狭めることができれば、ポテンシャルの更新や、優先キューの操作を削減できる。前処理により疎化したグラフを作成する理由もこういった考えからであろう。

しかしながら、そうでもないということをこれから説明を行っていく。

Alignment

2010-03-29 18:51:51 | Weblog
#define ALIGN(x, a)     (((x) + (a) - 1) & ~((a) - 1))
#define ALIGN_UP(x,a)   (((x) + (a)) & ~((a) - 1))
#define ALIGN_DOWN(x,a) ((x) & ~((a) - 1))

   x  |  ALIGN(x,4096)  ALIGN_UP(x,4096)  ALIGN_DOWN(x,4096)
------------------------------------------------------------
   0  |              0              4096                   0
   1  |           4096              4096                   0
4095  |           4096              4096                   0
4096  |           4096              8192                4096
4097  |           8192              8192                4096

日本数学会: 市民講演会

2010-03-28 18:55:31 | Weblog
日本数学会の市民講演会に参加してきた。

●調和級数から指数定理へ 森吉 仁志
●数理最適化への招待 小島 政和

・音楽をやっていることもあり、調和級数には興味があったのだが、途中で力尽き後半10分は置いてきぼりを食ってしまった。ここに集まっているのは本当に市民だとは信じがたかった。反省。

・小島先生のお話は、中学生も理解できるようにと要望されたらしく、かなり押さえて話されている印象でした。面白かったです。

SCOPE: 2010年度 第1回研究会

2010-03-27 18:58:20 | Weblog
研究室にも何度かいらっしゃっているお二人のご講演。実システム上における課題を最適化を用いて解決していくという、HPC と最適化のコラボレーション。

●大規模データ処理と最適化 佐藤仁
●性能を保証する分散実行環境のためのコアロケーション手法 竹房あつ子

メモリ階層ソフトウェアの高速化も、それ自体が最適化問題に見えてくるし、本当に HPC は最適化の宝庫のようだ。

libhugetlbfs - 2

2010-03-26 02:36:24 | Weblog
色々探してみたところ、malloc 自体をフックしているというよりも、morecore をフックしているようだ。morecore.c の hugetlbfs_setup_morecore() に実装されている。mallopt(M_MMAP_MAX, 0) で mmap() を使用しないようにしている。結局 __attribute__ ((constructor)) で呼び出し、main() の前に設定する事になる。



libhugetlbfs

2010-03-25 18:54:45 | Weblog
libhugetlbfs のソースコードを読んでみた。elflink.c の 1100 行目あたりに書かれている通り、HugeTLBfs 上の reallocate も可能なようである。以前やってみたときはうまく行かなかったのだが、何か勘違いしていたのかもしれない。ひとまず mremap ではうまくいかなそうだという事は分かった。それにしても、読んでいて非常に興味深い。


統数研。

2010-03-23 19:35:25 | Weblog
統数研での研究会に参加してきました。1件1件の発表が長めに設定されているので、せかせかしていなくて聴きやすいです。しかし、駅から3つ目の建物なのに徒歩約10分とはびっくり。ここいらで働いている方は食事どころに困りそう。

MOS BURGER CLASSIC

2010-03-21 19:34:35 | Weblog
元々モスバーガーは他のハンバーガーショップに比べておいしいが、ここは飛び抜けている。1000円~1600円という価格設定なので、比べてもしょうがないが。

ちなみにこの日、食したのは、神楽坂バーガーベーコンわさび double patty 1,580 円なり。刺さっている串を取り外さないように、フォークとナイフで頂くのが攻略の鍵です。間違っても、いつものハンバーガーのノリでいくと、口付近がぐちゃぐちゃになります。ご注意を。

Vine Linux 5.1

2010-03-19 10:56:30 | Weblog
4.2 → 5.0 では 64bit 化があったせいかかなり時間がかかったが、5.0 → 5.1 はなかなか素早い更新かと。これからもお世話になります。ちなみに Vine Seed は Fedora よりも package が新しかったりする。凄い。

CineBench R10

2010-03-18 14:21:29 | Weblog
CineBench R10 を試してみた。

CPU : Intel Core 2 Duo P8700 2.53 GHz (2cores)
OS  : OS X 10.6.3 (64bit)
GFX : NVIDIA GeForce 9400M OpenGL Engine

OpenGL : 5.92 fps (*reference match 99.4%)
2CPU   : 1.42 pts (x 1.94)
1CPU   : 0.75 pts

*グラフィックカードの描画が参照画像をどれくらい一致しているか



Sun VirtualBox

2010-03-17 10:57:04 | Weblog
MacOSX 用の VMware Player 的なソフトウェアはないので、Sun VirtualBox を install した。もちろん Guest は Vine Linux 5x。かなり軽く驚いた。大体 CF-W8 上の Ubuntu@wubi 位で動作している感覚である。もちろん CPU のクロック等の違いはあるが、十分に実用に耐えれるかと。