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クロックを余裕で超えます。便利命令なんですけど。

もっとも、これだけ複雑な処理をする命令がレイテンシ3スループット1で実行できるということの方がビックリである、という話はあります。どんな回路組んでるんだ…

Trackback

2 comments untill now

  1. バイキンマン @ 2020-11-07 01:13
  2. 梅澤 威志 @ 2020-11-07 18:18

    おおー

Add your comment now