研究日誌。

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

枝長による実行時間の変化。

2008-05-12 23:27:14 | Weblog
グラフの枝長を 2^n (n = [-10, 10]) 倍に変化させ、実験を行った。
 2^(-10), 2^(-9), 2^(-8), ... , 2^(0), 2^(1), 2^(2), ... , 2^(10)
の 21 通りについてである。


■実行環境
CPU : Xeon 2.33 GHz
OS : CentOS 4.1 64bit
GCC : gcc 4.1.2

graph : USA-road-d.NY.gr
query : p2p x 256 (random)



用いたデータ構造は以下の4つである。

・ヒープ
実行時間・メモリ要求量ともに安定している。

・1レベルバケット
枝長によって、実行時間・メモリ要求量が影響を受けてしまうが、条件によってはとても高速である。

・2レベルバケット
1レベルバケットをベースに、バケット配列と補助配列の2段階にすることで、枝長の影響を軽減している。

・マルチレベルバケット (by goldberg)
実験的に高速であるといわれているデータ構造。



ヒープの実行時間はグラフからも安定しているのがわかる。また、今回用いたデータ構造の中で最もメモリ要求量が少ない。図からはわかりづらいが、2^4 からは4つの中で最も実行時間が短い。

1レベルバケット法・2レベルバケット法では、ともに枝長に影響を受けていることが良く分かる。2レベルでは小さいながらも1レベルに比べ、その影響が抑えられている。2^5 あたりで、交差している。


マルチバケットではうまく適切なレベルを選択しているのだろうか、枝長が小さいときは実行時間も短くなり、枝長が大きくなっても実行時間が抑えられている。