浮動小数点演算でCLZとCTZをベクトル化する
Vectorized CLZ and CTZ
clzとctzは現代のCPUでネイティブにサポートされているが、常に高速とは限らない。FPUエミュレータを開発中に、浮動小数点のトリックでctzを回避する方法を思いつき、それがベクトル化可能なctzポリフィルに一般化できることを発見した。clzも同様に実装。Haswellではclzが0.45 ns/反復、ctzが0.49 ns/反復と、スカラー版より高速。さらにde Bruijn列を使った別のベクトル化アプローチも紹介し、64ビット版では最適なアルゴリズムを提案。
この関数がコンパイルされると…(中略)…一体どれだけの時間をこの配置に費やしたか想像できるだろうか?