研究日誌。

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

ソートあれこれ - その5。

2008-09-27 01:36:45 | Weblog
Bucket-Sort を in-place ではなくしたところ、予想通りの性能が出てくれてほっとしている。

なぜ in-place では性能が出なかったのかを考えてみると、やはり配列の要素を使って辿るという操作が良くないということになるだろう。要素データがメインメモリから来なければ、次の要素を参照する事ができないため、完全にメインメモリのバンド幅に依存する。にしてもあまりにも遅いが。

それでは in-place ではなぜ性能が出るのか。
まず移動元は連続に並んでおり、データは塊(64byte)でロードされるためキャッシュヒット率は高いと思われる。移動先に関してはかなり不連続だが、1度書き出されればその後はその要素にアクセスしないため、書き込みに対しての待ちもない。
data: USA-road-d.USA.gr (n=24M, m=58M)
Quick-Sort   6.7 [sec]
Bucket-Sort   17 [sec](in-place)
Bucket-Sort  1.5 [sec]