Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level - Red Hat Developer
オリジナルのx86-64(AMD64, Intel64)が登場したのは2000年(命令セット仕様ドキュメント)あるいは2003年(AMD K8製品)のことであるが、それから約20年もの歳月が経過したことになる。Intelの拡張命令セットでいうとSSE(1999年)・SSE2(2000年)はx86-64(-v1)の仕様に汲み込まれたが、それ以降の拡張命令セット群はx86-64の拡張命令セットという扱いになる。
x86-64-v2・x86-64-v3・x86-64-v4というものがAMD・Intel・Red Hat・SUSEによって2020年夏に策定されたという。これは新しい命令セットのことではなく、これまでの拡張命令セット群を纏めたものである。LLVM Mailing Listの投稿ではLevel A~Level Dと4段階になっているが、GCCなどではv2~v4の3段階となっている。
ISA | Instructions | |
---|---|---|
x86-64-v2 | Level A | x86-64, CMPXCHG16B, LAHF/SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3 |
x86-64-v3 | Level B | x86-64-v2, AVX |
Level C | Level B, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE | |
x86-64-v4 | Level D | x86-64-v3, AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL |
筆者がこれらの存在を知ったのはRed Hatが次期Red Hat Enterprise Linux 9ではx86-64-v2が要求されることに言及したBlogポストを見たからであるが、これは非常に興味深い判断である。
そもそものRHEL 9の登場時期であるが、現在最新のRHEL 8がリリースされたのは2019年5月=約1.5年ほど前のことで、Red Hatはおよそ5年毎に最新メジャーバージョンをリリースしているため、RHEL 9は恐らく2024年頃のリリースと予想される。
広範囲で使われるであろう2024年頃にリリース予定のRHELで、Nehalem(Intel 2011年)、Bulldozer(AMD 2011年)以前のアーキテクチャーが切り捨てられるというのは早いのか遅いのか判断に困るところであるが、ちなみに2016年10月に登場したIntel純正Linuxディストリビューション=Clear Linuxではx86-64-v2以上となるSSE4.1, SSE4.2, SSSE3, AES, PCLMULを要求しており、こちらはSandy Bridge以前は非対応となっているのが面白いところである(とはいえRHELの影響はClear Linuxとは比較にならないが)。
RHEL 9がx86-64-v3を要求しない理由であるが、Red HatのBlogポストによると2020年にリリースされたAtom P5900シリーズCPUがAVX2をサポートしないためとある。
そもそもAtom系コア(Silvermont~Tremont)はAVX系拡張命令群をサポートしていないためAtom P5900シリーズに限らずXeon Cシリーズ含め全て非対応となるから妥当な判断と言えそうだ(製品レベルではCore系コアでもPentium/CeleronブランドではAVX系拡張命令群が無効化されているが…RHELでクライアント向けCPUを考慮する必要性は無いかもしれない)。
言い換えれば、2020年にIntelが策定に関与したx86-64-v3でAVX/AVX2が謳われているということは将来のAtom系コアではAVX系命令もサポートされると考えられ、これは次世代GramemontでAVX/AVX2がサポートされることと合致している。そもそも、当初はスマートフォンやネットブック(死語)がターゲットに含まれていたAtom系コアも、Intelのスマートフォン市場撤退によりサーバー向けAtom P5900シリーズ/Xeon Cシリーズや、Alder Lake以降のIntel Hybrid Technologyの高効率コアとして採用されていることを考えればAVX/AVX2サポートというのも妥当そうに思える(Hybrid TechnologyはIntel版のbig.LITTLE相当の実装であるが、現行のbig.LITTLEのインプリメンテーションではOSのスケジューラーが負荷に応じてコアを切り替えるため、bigコアとLITTLEコアとで命令セットが共通である必要がある。もちろん、IntelがHybrid Technology向けにスケジューラーを別途作るのであれば話は別であるが)。
そう考えると悩ましいのはx86-64-v4で要求されるというAVX-512の取り扱いだろう。
そもそもAVX-512では512-bitにアクセスが必要なシャッフル命令がある都合でSSE/AVX/AVX2とは違い論理ベクター長=512-bit以下での物理実装が想定されていないため実装コストが非常に高い(論理128-bitのSSEは物理64-bit・論理256-bitのAVX/AVX2は物理128-bitでの実装例が多々ある)。
x86-64-v4で要求されるのは「AVX-512」ではなく「AVX512F, AVX512BW ...」とされているが、恐らく実装コストの問題もありAVX-512は最初のXeon Phi "Knights Landing"から今日のXeon Scalable "Ice Lake-SP"に至るまで全命令をサポートしたCPUコアは存在しておらず、x86-64-v4で要求されるのはSkylake-SPで実装されたものである。以後のXeon Scalable(Cascade Lake、Ice Lake-SP、Cooper Lake)のほかVIA/Centaur CNS(!)も対応しているが、当然ながらAMD Epycは未対応である。
恐らくAMDはZen 4かZen 5でAVX-512に対応することになるのだろうが、x86-64-v4が要求されるOSが登場するのは10年以上先のことになるのかもしれない。
Sandy Bridgeはx86-64-v2なので、この記述おかしいと思います。