研究日誌。

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

1レベルバケット or ヒープ。

2008-02-12 23:23:01 | Weblog
今まで、dimacs graph data をそのまま用いて実験を行っていたが、枝長についてはあまり考慮しなかった。しかし、バケット法での枝長はかなりクリティカルなものであるため、枝長に影響を受けないヒープも見直していこうと思う。

まずは、pthread で書き直したヒープの実行時間である。やはり通常の道路ネットワークではバケット法に勝ち目はないようだ。ただ goldberg 氏の2レベルバケットと比べてもあまり大差はなく、最適化次第では逆転も十分考えられそうである。

[ヒープ]
1スレッド 38.54 [sec]
2スレッド 21.05 [sec]
4スレッド 12.53 [sec]
8スレッド  9.58 [sec]

[1レベルバケット]
1スレッド 24.19 [sec]
2スレッド 13.80 [sec]
4スレッド  8.36 [sec]
8スレッド  6.92 [sec]

[2レベルバケット]
1スレッド 36.08 [sec]



次にグラフの枝長を10倍、100倍にしたものに対して、上記の「1レベルバケット法」、「ヒープ」について、実験を行った。

[ヒープ]
  1倍 38.54 [sec]
 10倍 40.23 [sec]
100倍 42.37 [sec]


[1レベルバケット]
  1倍 24.19 [sec]
 10倍 50.85 [sec]
100倍 222.84 [sec]

予想よりもヒープは枝長に影響を受ける結果となったが、それでもほとんど実行時間は変わらず、安定していた。バケット法は距離分だけ、バケット配列をインクリメントするため、グラフの枝長の範囲が大きいとき、無駄な処理が大きくなってしまう。できれば、グラフの特性を選んでデータ構造を自動的に、データ構造を選ぶのが望ましいだろう。