バイナリサーチを6倍高速化:CPUの仕組みに寄り添う「メカニカル・シンパシー」入門
Faster binary search: from compiled code to mechanical sympathy

scikit-learnの勾配ヒストグラムブースティングで使われるバイナリサーチを、CPUの分岐予測や命令レベル並列性といった低レベルのハードウェア知識を活用して高速化した事例を紹介。分岐のない実装に切り替え、境界チェックを回避し、事前計算を行うことで、最終的に元の実装より6倍高速なコードを実現。RustとPythonのバインディングを用いた具体的なコード例と、パフォーマンス測定結果(分岐予測ミス率、IPCなど)を示しながら、機械的共感(メカニカル・シンパシー)の考え方を解説する。
分岐予測ミスはコードを遅くする。バイナリサーチは入力データによって左右どちらに進むか予測不能なため、CPUは頻繁に誤った推測をし、その結果、パイプラインを巻き戻して正しい分岐を実行し直すことになる。