Dev & Code 2 h agoブックマークに追加

2024年の記事が、今日Hacker Newsのトップに戻ってきました。この記事では、よりよく考えられたメモリレイアウトが、バイナリサーチよりも40倍速い静的な構造を実現する方法を示しています。真の教訓は数字ではなく、その推論です。
具体例:100百万エントリのソート済み配列からキーを検索する必要があります。最初の反射は、学校で学んだバイナリサーチです - log₂(n) ≈ 27 比較。理論的に最適です。
しかし… 2026年、現代のCPU上では、バイナリサーチは災難です。なぜか? それぞれの比較は、前の結果に依存するアドレスのメモリを読み込みます。プロセッサは予測できず、事前読み込みできず、パイプライン化できません。各ステップで、キャッシュミスを待ちます(約100 CPUサイクル、DDR5最新では~30 ns)。
2024年の記事「Static search trees: 40x faster than binary search」(本日HNのトップに再掲載)は、この問題を深掘りしています。提案されたソリューションは静的Bツリー - データベースのマニュアルにある動的Bツリーではなく、CPU向けに最適化されたバージョンです:
__builtin_prefetch)。記事で測定された結果:100百万エントリで、検索は約150 nsから4 nsに低下。40倍速いです。
教訓は「バイナリサーチは死んだ」ではありません。古典的なアルゴリズム複雑度(O log n)はキャッシュメモリを無視しています。現代のCPUでは、キャッシュミスを最小化する構造は、ほとんどの場合、比較を最小化する構造よりも優れています。
私たちのプロジェクトで出会う他の例:
flat_hash_map) vs. 古典的な std::HashMap。slice::sort_unstableで使用) vs. 教科書のクイックスォート。static-search-treeクレートまたは、生産的な例の対応物。ホットループを最適化する際、最初に取り出すプロファイラはcachegrindではありません - Linuxのperf stat -e cache-misses,cache-references(またはmacOSのInstruments)です。2026年の真のパフォーマンスはここで決まります。複雑度理論は可能なことを教えてくれますが、キャッシュメモリは達成可能なことを教えてくれます。
本記事は人工知能により作成され、人間の編集管理のもとで校閲されています。