Skylakeの改良点を予想する~AVX512編~
Skylake (-skl)
bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap
Skylake Xeon (-skx)
bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt avx512cd avx512bw avx512vl
Cannonlake (-cnl)
bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap avx512ifma clflushopt avx512cd sha avx512bw avx512vl
sde上でのcpuid命令の実行結果からは、AVX512はSkylake (SKL)では使えず、Skylake Xeon (SKX)からということになっている。一般向けCPUでAVX512が使えるようになるのはCannonlake (CNL)からだが、そんな先のことはどうなるのかわからない。
ここで、Xeon DはともかくXeon E3ではAVX512が使えるのだとすれば、同じダイのCore i7とXeon E3でAVX512が使えるものと使えないものが出てくる。そして、CannonlakeはSkylakeのシュリンク版であるが、Intelの最近の傾向ではTickのターンでは大きく変更を入れない。よってSkylakeはAVX512を実行可能なハードウェアは持っているが、有効化されないのではないかと考えられる。
であれば、Skylake~ Cannonlakeではダイサイズに大きく影響を与えない程度のコストでAVX512を実装する必要がある。SandyBridgeでAVX256bitを実装した方法に準じる可能性が高い。
第一にキャッシュの帯域はAVX2仕様のHaswellのままとなる。つまりL1 load 32B/cycle x2, store 32B/cycle、L2 64B/cycleのままとなる。
第二にハイサイド側の256bitデータパスはintクラスタのものを流用する。512bit化されるのは演算器のみとなる。AVX2でintも256bit化されている。
あるいはCore2以前のように演算器を2ループまわすことで512bit分の演算を行うことも考えられる。AVX512対応はKnights Landing以降のXeon Phiとの互換性をとることが主目的とすれば、スループットを増やせなくても問題ではない。そもそもAVX512はレジスタ数の増加など、512bit化以外にもメリットはないことはない。が、スループットが増えるほうに期待したい。そして、Xeon E3でもサポートされるといいな。