Core i 12世代 (Alder Lake) 以降の Intel CPU は P-Core と E-Core、2種類の異なる CPU Core を搭載しています。ARM 系 CPU と同じように必要な負荷に応じてこれらのコアが使い分けられます。
vfpbench では種類によって計測するコアを区別する必要があるのですが、AlderLake 以降の Intel の非対称コアを今まで正しく認識できていませんでした。今回 Core i7-13700 を入手し、ようやく対応できたので結果を載せてみます。なお Linux では非対称コアを識別しますが、WSL1 上では区別できていないのでご注意ください。
以下は Linux で実行した Core i7-13700 の結果です。
結果からわかるように P-Core のピーク値は AVX 256bit の fma x 2 になっています。ここまでは従来の Skylake/IceLake 系と同じですが、mul + add の組み合わせの場合に 3命令実行できていることがわかります。
Ryzen Zen3/4 のように fma + add の組み合わせにならないためピーク値には影響がありませんが、おそらく AlderLake 以降は最大で 256bit x 3 命令が実行できるように拡張されているものと思われます。
P-Core AVX vmul+addps (32bit x8) n8 : 0.197 124487.7 15561.0 ( 8.0 3.1) FMA vfmaddps (32bit x8) n8 : 0.371 132011.8 8250.7 ( 16.0 1.6) FMA vfmaddps (32bit x8) n12 : 0.442 165987.5 10374.2 ( 16.0 2.0) FMA vfma+mlps (32bit x8) n12 : 0.442 124495.1 10374.6 ( 12.0 2.0) FMA vfma+adps (32bit x8) n12 : 0.381 144625.0 12052.1 ( 12.0 2.4)
また AVX512 が使用できません。そのため本来は対応していたと思われる fp16 演算や bf16 命令などもなくなっています。VNNI はあります。
E-Core の場合はピークが AVX 256bit fma x1 となっており、サイクルあたりの演算能力は P-Core の半分となっています。128bit 以下の場合は 2命令走っているので、実行パイプラインそのものは 128bit が 2本になっていると思われます。
E-Core SSE addps (32bit x4) n8 : 0.305 32258.5 8064.6 ( 4.0 2.0) FMA vfmaddss (32bit x1) n12 : 0.525 14067.6 7033.8 ( 2.0 1.7) FMA vfmaddps (32bit x4) n12 : 0.521 56609.3 7076.2 ( 8.0 1.7) FMA vfmaddps (32bit x8) n8 : 0.602 65431.3 4089.5 ( 16.0 1.0) FMA vfmaddps (32bit x8) n12 : 0.902 65432.2 4089.5 ( 16.0 1.0) FMA vfma+mlps (32bit x8) n12 : 0.914 48433.6 4036.1 ( 12.0 1.0) FMA vfma+adps (32bit x8) n12 : 0.914 48434.4 4036.2 ( 12.0 1.0)
128 add | 128 mul | 128 fma | 256 最大 | 256 add | 256 mul | 256 fma | 256 最大 | |
---|---|---|---|---|---|---|---|---|
P-Core | 2 | 2 | 2 | 3 | 2 | 2 | 2 | 3 |
E-Core | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 |