x86/x64 最適化勉強会 #6 で聞いてきましたが、AVX-512 なるものがアナウンスされてました。名前から予想される通り、SIMD レジスタが 512bit になります。SIMD レジスタが 512bit というと Xeon Phi は最初からそうなっているのですが、これが普通の Xeon に降りてくるイメージです。
AVX が「単なる legacy SSE の 256bit 版」ではないのと同様、AVX-512 も「単なる AVX の 512bit 版」ではありません。
- SIMD レジスタが zmm という名前で 512bit になる。下位 256bit は ymm としてアクセスできる(xmm に対する ymm と同じ)
- 64bit モードの場合、SIMD レジスタが 32本使える。これは、zmm だけでなく ymm や xmm でも同様である。32bit モードでは8本のまま。
- 8本のマスクレジスタが追加される。マスクレジスタはライトマスクの指定に使われる。つまり、1命令ごとに merging(blend)/zeroing 操作が可能になる。
- 命令埋め込みで 2つ目のソースオペランドのブロードキャスト、丸め制御、例外無視 が可能(命令による)
- 以上を実現するために、VEX プレフィックスに続いて EVEX プレフィックスを導入する。VEX や MVEX とビットパターンは重ならないので同居可能。
- もちろん普通の意味での新命令も追加
新機能てんこ盛りです。歩留まり大丈夫なんでしょうか。
比較するとこんな感じになります。LNI と比較すると機能的には一長一短となります。
AVX | LNI (Larrabee New Instructions) |
AVX-512 | |
---|---|---|---|
実装プロセッサ | Sandy Bridge 以降 | Xeon Phi (Knights Corner) | まだ不明 |
使われるプレフィックス | VEX | MVEX | EVEX |
SIMDレジスタ長 | 128bit (xmm) 256bit (ymm) |
512bit (zmm) | 128bit (xmm) 256bit (ymm) 512bit (zmm) |
SIMDレジスタ数 | 8 (x86) 16 (x64) |
32 | 8 (x86) 32 (x64) |
マスクレジスタ | なし | あり | あり |
マスクによる zeroing | – | なし | あり |
ブロードキャスト | なし | あり | フルブロードキャストのみ |
swizzle | なし | あり | なし |
丸め制御/例外無視 | なし | あり | あり |
これがいつ出てくるかですが、まず次の Xeon Phi である Knights Landing に入ってくるのは確定で、その後普通の Xeon に来ることになっています。問題は Xeon Phi ではない普通のプロセッサの方なんですが、”and will also be supported by some future Xeon processors scheduled to be introduced after Knights Landing” となっており、Xeon 限定…つまり Core i シリーズには実装されないようにも読めます。だとすると個人的には非常にツマラナイことになりそうです。「さらに将来」に Core i シリーズにも降りてきてくれればいいのですが。
ともあれ、AVX2 が Sandy Bridge が出たころにアナウンスされて Haswell で実装されたことを考えると、Haswell が出たころにアナウンスされた AVX-512 は Skylake (の Xeon 版?)あたりで実装されてもよさそうなものです。AVX2 よりずっと大規模なので間に合うのか?とも思いますが、AVX-512 をパスした場合 Skylake の新機能は何になるのかという問題が発生します。SHA Extensions や ADCX, ADOX (AVX-512 のマニュアルの後ろの方にある)だけ追加して終わりだったりして…
秋の Intel Developers Forum (IDF) は9月10日から始まるので、そこで何か発表されるでしょう。されるといいな。 特にされなかったようです。ちぇ。
ところで、AVX-512 だけで feature flags を4つも持ってるのはやめてもらえませんかねぇ…
AVX-512 に関する疑念
AVX-512 のマニュアルを見てると、よく分からないことがいくつかあります。 64bit モードの場合 zmm だけでなく ymm や xmm も 32 本使えると書いてある (1.2.2 32 SIMD Register Support) 。32 本使うため…
AVX-512 の仕様が更新されていた
AVX-512 の仕様が7月中旬に更新されているのに今頃気づきました。また遅れてるな俺。 追加される拡張命令セットは以下のとおり。 AVX-512 Vector Length Extension (AVX512VL) AVX-512 命令で 128bit/256bit …