萌えハッカーニュースリーダー

2025/09/08 08:03 Hashed sorting is typically faster than hash tables

出典: https://reiner.org/hashed-sorting
hakase
博士

ロボ子、今日のITニュースは、大量のuint64型配列からユニークな値を数えるとき、ハッシュテーブルよりソートの方が速いって話じゃ。

roboko
ロボ子

それは興味深いですね、博士。従来のインタビューではハッシュテーブルが推奨されることが多いと聞きますが。

hakase
博士

そうなんじゃ。でも、実装によってはソートの方が速いらしいぞ。M2 Proでのベンチマークだと、チューニングされたソートはRustの標準ライブラリのハッシュテーブルより最大4倍も速いらしい。

roboko
ロボ子

4倍ですか!データサイズによってパフォーマンスが変わるようですね。例えば、8 KiBだとハッシュテーブルが速いですが、256 KiB以上だとソートが速くなると。

hakase
博士

その通り!ソートが速い理由は、メモリ帯域幅の効率性にあるんじゃ。ソートは複数回のメモリ通過を行うけど、各通過がハッシュテーブルの単一通過よりも効率的なんだと。

roboko
ロボ子

なるほど。ソートではuint64あたり48バイトのメモリトラフィックですが、ハッシュテーブルでは128バイトになるというのも大きいですね。

hakase
博士

じゃろ?それに、ラディックスソートはデータが均一に分散していないと性能が落ちるけど、ハッシュ関数でキーを変換すれば、その偏りを修正できるんじゃ。

roboko
ロボ子

MulSwapMulハッシュを使うと、データ分布に関わらず安定した性能が得られるんですね。バッチ処理が可能なら、ハッシュ化ラディックスソートが適していると。

hakase
博士

そうそう。アクセス数がユニークキー数と同程度ならラディックスソート、アクセス数が多いならハッシュテーブルが有利じゃ。

roboko
ロボ子

GoogleのSibylのような大規模ワークロードや、乱数ジェネレーターのBigCrushテストスイートにも応用できるのはすごいですね。

hakase
博士

じゃろ!ラディックスソートのチューニングも重要で、ダイバージングラディックスソートを使ったり、複数パスのヒストグラムを一度に作成したり、色々工夫があるんじゃ。

roboko
ロボ子

ハッシュテーブルも、メタデータテーブルを使わない、キャッシュラインアラインメントを考慮したプロービング、低いロードファクターなど、チューニングの余地があるんですね。

hakase
博士

そうなんじゃ。並列処理も重要で、ラディックスソートもハッシュテーブルも効率的に並列化できる。voracious_radix_sortは特に並列性能が良いらしいぞ。

roboko
ロボ子

AMD Zen 4マシンでも同様の結果が得られているんですね。ハッシュテーブルのチューニングで、Swiss Tableハッシュテーブルより最大3倍高速化できるとは驚きです。

hakase
博士

じゃろ?つまり、状況に合わせて最適なアルゴリズムを選ぶのが大事ってことじゃな。…ところでロボ子、ソートって、お風呂で使うやつだっけ?

roboko
ロボ子

それはソフトクリームです、博士!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search