研究日誌。

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

hugetlbfs と最短路ソルバー。

2008-03-25 15:46:13 | Weblog
前回の方法では、malloc で確保した領域が全て HugeTLB の上に乗ってしまうので、mmap を用いて自作のルーチンを作った方が良いかもしれない。正直、最短路ソルバーで malloc するものは、かなり大きな配列(構造体の配列も)であるのでこのままでもよいが、小さなグラフの場合ではかなり遅くなってしまうかもしれない。

やはり自作で作った方がいいとは思うのだが、ソースに手を加える前に実験を行ってみた。


実験環境は
CPU : Core2Duo E8200 3.2 GHz (2.66 GHz からクロックアップ)
OS : CentOS 5.1 64bit
gcc : gcc 4.3
HugeTLB : 1GB (2048 KB x 512)

クエリファイルはこれを用いている。

0. multi-bucket(by goldberg)
20.13[s]

1. bucket
14.55[s]

2. bucket with libhugetlbfs
12.07[s] (x 1.21)

3. heap
21.39[s]

4. heap with libhugetlbfs
18.20[s] (x 1.18)

と、1.2 倍ほどに高速化されている。ページサイズが 4KB → 2MB と大きくなり、TLB ミスが 1/512 となったためであろうか。こちらも OProfile を用いて測定してみようと思う。