Intel CPU Core i7-13700 (RaptorLake) の vfpbench 結果

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 add128 mul128 fma256 最大256 add256 mul256 fma256 最大
P-Core22232223
E-Core22221111

関連エントリ