3月
26
BMI2 (Bit Manipulation Instructions 2) には PEXT/PDEP という命令があって、32/64 ビット値の中から指定したビット群を取ってきて下に詰めて取得する、という処理(とその逆)が1命令でできます。Intel だと Haswell 以降で使えます。
さて、AMD の Zen マイクロアーキテクチャ(Zen+, Zen2 も含む)は AVX2 の他に BMI1/2 も使えるようになったわけですが、この PEXT/PDEP 命令はマイクロコード実装となっており、しかもものすごく実行が遅いです。 Intel だとレイテンシ3スループット1ですが、Zen だと第2オペランドで立っているビットの数(=取ってくるビットの数)に依存して遅くなり、64bit 版で全部ゼロでも18クロック、64bit 全部立ってると200クロックを余裕で超えます。便利命令なんですけど。
Achilles heel of #AMD Zens: data dependency of PDEP/PEXT instructions. For every BMI2-capable #Intel all values are 1. pic.twitter.com/mtdIXByoj2
— InstLatX64 (@InstLatX64) December 23, 2019
もっとも、これだけ複雑な処理をする命令がレイテンシ3スループット1で実行できるということの方がビックリである、という話はあります。どんな回路組んでるんだ…
改善されたようですね
https://twitter.com/InstLatX64/status/1324355353660825601
おおー