vfpbench」カテゴリーアーカイブ

vfpbench

Ryzen Zen3 の vfpbench 結果

Zen4 と順序が逆になりましたが Zen3 の結果も手に入れることができました。モバイル向け APU、Ryzen 5 5560U です。

実行ユニットは Zen2 同様 256bit の乗算(積和) x2 + 加算 x2 の構成です。そのため単純な fma 換算ではピーク値が Zen2 と変わらない fma x2 となるのですが、Zen3 の場合少々結果が異なります。

AVX vmulps (32bit x8) n8          :    0.172    64245.3     8030.7  (  8.0 3.5)
AVX vaddps (32bit x8) n8          :    0.172    64267.0     8033.4  (  8.0 3.5)
AVX vmul+addps (32bit x8) n8      :    0.086   128217.7    16027.2  (  8.0 7.0)
FMA vfmaddps (32bit x8) n8        :    0.214   103087.1     6442.9  ( 16.0 2.8)
FMA vfmaddps (32bit x8) n12       :    0.275   120290.1     7518.1  ( 16.0 3.3)
FMA vfma+mlps (32bit x8) n12      :    0.258    96422.6     8035.2  ( 12.0 3.5)
FMA vfma+adps (32bit x8) n12      :    0.172   144552.0    12046.0  ( 12.0 5.2)
AVX vml+ad+adps (32bit x8) n9     :    0.244    50965.1     6370.6  (  8.0 2.8)

fma x2 よりも fma + add の方が値が高くなっており、fma x 2 に加えて add も十分なスループットで回っているように見えます。ピーク値も追加の add 命令の分だけ上昇しています。パイプライン構成自体は大きく変わらないものの、Zen2 より命令発行数と実行効率が向上し、演算性能が上がっている事がわかります。

Zen4 の場合はこれに加えてさらに AVX512 にも対応します。fma だけ見ると違いがないように見えるかもしれませんが、世代毎に演算能力は上がっています。

関連エントリ

Pixel 7a Google Tensor G2 の vfpbench の結果

Google の Pixel 7a は Pixel 7 や Fold と同じ Tensor G2 が搭載されています。Tensor G2 でも vfpbench を走らせてみました。

Tensor G2 には 3種類の CPU Core が搭載されています。

Cortex-A55x41.80 GHz
Cortex-A78x22.35 GHz
Cortex-X1x22.85 GHz

それぞれの結果を詳しく見ると、A55 はスカラーの add, mul, fma や 64bit 演算で 2命令走りますが 128bit 演算では 1命令です。よって 64bit 演算 x2 の構成であることがわかります。

A55
FPU fmul (32bit x1) n8            :    0.319     3389.7     3389.7  (  1.0 1.9)
FPU fadd (32bit x1) n8            :    0.334     3243.8     3243.8  (  1.0 1.8)
FPU fmadd (32bit x1) n8           :    0.319     6785.6     3392.8  (  2.0 1.9)
NEON fmul.4s (32bit x4) n12       :    0.924     7027.6     1756.9  (  4.0 1.0)
NEON fadd.4s (32bit x4) n12       :    0.928     6995.3     1748.8  (  4.0 1.0)
NEON fmla.4s (32bit x4) n12       :    0.924    14046.3     1755.8  (  8.0 1.0)

対して A78 はスカラーも 128bit 演算も変わらず 2命令で一定なので、128bit x2 になります。

A78
FPU fmul (32bit x1) n8            :    0.301     4676.9     4676.9  (  1.0 2.0)
FPU fadd (32bit x1) n8            :    0.301     4678.5     4678.5  (  1.0 2.0)
FPU fmadd (32bit x1) n8           :    0.301     9353.7     4676.9  (  2.0 2.0)
NEON fmul.4s (32bit x4) n12       :    0.452    18712.2     4678.1  (  4.0 2.0)
NEON fadd.4s (32bit x4) n12       :    0.452    18713.6     4678.4  (  4.0 2.0)
NEON fmla.4s (32bit x4) n12       :    0.452    37368.1     4671.0  (  8.0 2.0)

最上位の Cortex-X1 はスカラー・ベクター関係なく add/mul 演算で 4命令、fma で 2命令です。fma のピーク値だけ見るとあまり差がないように見えますが、128bit x4 と演算能力が大きく拡張されており高いスループットが期待できます。

X1
FPU fmul (32bit x1) n8            :    0.151    11337.4    11337.4  (  1.0 4.0)
FPU fadd (32bit x1) n8            :    0.150    11370.1    11370.1  (  1.0 4.0)
FPU fmadd (32bit x1) n8           :    0.301    11364.5     5682.3  (  2.0 2.0)
NEON fmul.4s (32bit x4) n12       :    0.226    45347.7    11336.9  (  4.0 4.0)
NEON fadd.4s (32bit x4) n12       :    0.226    45353.3    11338.3  (  4.0 4.0)
NEON fmla.4s (32bit x4) n12       :    0.448    45813.8     5726.7  (  8.0 2.0)

まとめると以下の通りです。

s-adds-muls-fmav-addv-mulv-fma
Cortex-A5522211164bit x2
Cortex-A78222222128bit x2
Cortex-X1442442128bit x4

関連エントリ

Meta Quest3 の CPU (Snapdragon XR2 Gen2)

Meta Quest 3 は今年 (2023年) の 10月に発売されたばかりの最新の VR ヘッドセットです。Inside Out のセルフトラッキングのみで 6.6DoF を実現する Quest シリーズの 3世代目であり、カラーパススルーに対応したことで MR ゲームもプレイできるようになりました。

シースルー型の HoloLens と違い、ディスプレイ部が視界の一部のみに限られていることもありません。HoloLens に期待していた世界が Quest3 でようやく現実になったといえます。

MR 機能だけでなく、世代が上がりプロセッサもトラッキングも強化されています。特にコントローラーはトラッキング用の LED リングが無くだいぶ小さくなりました。VR というより Switch のような左右分離型のただのゲームコントローラーに見えます。

その Quest3 で以前 Termux が動くことを確認したので同時に vfpbench も走らせてみました。ただし実行中も画面の描画やトラッキングは行われていたため、結果の値には注意が必要です。プロセッサ自体のピーク性能ではなく、GPU やトラッキングにリソースが奪われている状態での結果と思ってください。

スペックによると Quest 3 のプロセッサは Qualcomm Snapdragon XR2 Gen2 が採用されていることがわかります。

https://www.meta.com/jp/quest/quest-3/#specs

計測結果は以下の通り

vfpench MetaQuest3

アプリケーションから見えるプロセッサは 6 Core で 2+4 の 2グループでした。

CPU Thread:  6
CPU Core  :  6
CPU Group :  2
  Group 0: Thread= 2  Clock=2.054400 GHz  (mask:3)
  Group 1: Thread= 4  Clock=2.361600 GHz  (mask:3c)

この両グループの結果を比べてみると、各命令の IPC には明確な差がなくクロック以外はほぼ同等となっています。そのため同じ CPU core が使われている可能性があります。なおこの情報だけではプロセッサの種類まで特定することはできませんでした。

NEON fmul.2d (64bit x2) n12       :    0.819     5189.4     2594.7  (  2.0 1.1)
NEON fadd.2d (64bit x2) n12       :    0.816     5209.8     2604.9  (  2.0 1.1)
NEON fmla.2d (64bit x2) n12       :    0.819    10376.6     2594.1  (  4.0 1.1)

64bit と 128bit に差がないのでリトルコアではなく、また fma と mul/add の差もないため、X1~X3 のようなハイエンドコアでも無さそうです。ただし計測結果はミドルコアのクロックにしてはあまり高くないので、バックグラウンドでパフォーマンスが奪われていたのかもしくは動作中に想定よりクロックが落ちていた可能性があります。この結果はあくまで参考程度でお願いします。

Total:
SingleThread HP max:   42.163 GFLOPS
SingleThread SP max:   21.240 GFLOPS
SingleThread DP max:   10.445 GFLOPS
MultiThread  HP max:  263.868 GFLOPS
MultiThread  SP max:  134.370 GFLOPS
MultiThread  DP max:   63.517 GFLOPS

関連エントリ

SteamDeck CPU の浮動小数点演算能力を調べる vfpbench の結果

SteamDeck で vfpbench を走らせてみました。
SteamDeck はポータブルゲーム専用機で、PC 向けのゲームを走らせることができます。

CPU/GPU は Ryzen + RADEON という一般的な PC と同じものですが、Zen2 Core に RDNA2 という組み合わせの APU は PC 向けとして市販されていません。Zen2 + RDNA2 の組み合わせは PS5 / XboxSX|SS / SteamDeck のみ使われており、ゲーム機専用のカスタムだと思われます。

ただしゲーム機向けと言っても SteamDeck の場合はバッテリー駆動のポータブル機なので、消費電力重視のバランス取りが行われています。Zen2 世代の APU と比べると GPU やメモリは強化されていますが、RDNA2 世代として見た場合は決して突出した性能ではなくなっています。

今回の計測は LCD の旧型 SteamDeck で、かつ SteamOS (Linux) ではなく Windows 11 での値となっています。SteamOS (Linux) 上ではまた違った結果になる可能性があります。

SingleThread SP max:  107.328 GFLOPS
SingleThread DP max:   51.903 GFLOPS
MultiThread  SP max:  448.238 GFLOPS
MultiThread  DP max:  203.651 GFLOPS

結果を見る限り、専用のカスタム CPU と言っても通常の Zen2 とほぼ同等だと思われます。浮動小数点演算の実行パイプライン本数が減らされていることもなく、256bit で fma x2 命令が同時に走っていることがわかります。

AVX vmul+addps (32bit x8) n8      :    0.380   283223.9     4425.4  ( 64.0 1.6)
FMA vfmaddps (32bit x8) n8        :    0.534   402439.6     3144.1  (128.0 1.1)
FMA vfmaddps (32bit x8) n12       :    0.803   401825.8     3139.3  (128.0 1.1)
FMA vfma+mlps (32bit x8) n12      :    0.795   304483.4     3171.7  ( 96.0 1.1)
FMA vfma+adps (32bit x8) n12      :    0.540   448238.2     4669.1  ( 96.0 1.7)
AVX vml+ad+adps (32bit x8) n9     :    0.410   295300.2     4614.1  ( 64.0 1.6)

vfpbench 結果のベースクロックは 2.8GHz 計算になっていますが、fma の IPC が 1.1 なので 8 Thread 実行時におよそ 3.1GHz 前後で動作していたと考えられます。本来 IPC は 2 ですが、SMT (Hyper Threading) なのでマルチスレッド実行時は半分の計算です。

関連エントリ

ROG Ally Zen4 vfpbench の結果

ROG Ally で Z1 Extreme (Zen4) に触ることができたため vfpbench の結果を調べました。ポータブル機でも 8 core あるため基本性能が高く、CPU だけでも単精度で 1 TFLOPS を超えています。

SingleThread SP max: 137.726 GFLOPS
SingleThread DP max: 68.841 GFLOPS
MultiThread SP max: 1120.448 GFLOPS
MultiThread DP max: 603.461 GFLOPS

また Zen4 は AVX512 に対応しています。AVX512 は bit 幅だけでなくレジスタ本数も倍増しており、AVX(256bit) と比べるとレジスタだけで 4倍のデータ量を扱うことができます。

Zen4 は 256bit の積和と 256bit 加算パイプラインをそれぞれ 2本の合計 4本備えています。そのため FMA だけなら同時に 2命令実行可能なので、理論上のピーク性能値は

8(avx) x 2(fma) x 2(pipe) x 8(core) x 3.3(clock) = 844.8 GFLOPS

となります。
vfpbench の結果を見ても単コアで fma の IPC が 2 です。(A)

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       :    0.459   103632.4     6477.0  ( 16.0 2.0) -- (A)

ただしこれだけでは 844.8 GFLOPS であり 1 TFLOPS に届きません。

Zen 4 は積和の他に加算パイプも 2本あるため、積和命令と並行して加算命令も実行させられる可能性があります。

実際に mul + add の組み合わせ (B) では 3.9、ほぼ 4命令同時に走っておりピーク FLOPS 値が fma x2 とほぼ同等になっています。

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX vmul+addps (32bit x8) n8      :    0.152   104158.5    13019.8  (  8.0 3.9) -- (B)
FMA vfma+adps (32bit x8) n12      :    0.322   110800.7     9233.4  ( 12.0 2.8) -- (C)
FMA vfma+mlps (32bit x8) n12      :    0.458    77839.3     6486.6  ( 12.0 2.0) -- (D)

同じように fma + add の (C) も IPC が 2を超えるのですが、2.8 とおよそ 3命令、1.4 倍にしかなりませんでした。それでも FOP が 3/4 で IPC が 1.4 倍なので、FLOPS 値も fma x 2 の (A) より (C) の方が上がっています。これで 844.8 GFLOPS を超えられます。

なお乗算命令は積和と同じ実行パイプを使用するため、fma + mul の組み合わせ (D) では IPC が 2のまま変わりません。

まとめると、256bit の場合 乗算+加算の場合は最大 4、積和が含まれる場合は最大 3命令同時に実行できる可能性があります。

この結果は Zen2 とは異なっています。Zen2 でも 256bit 積和 + 加算 がそれぞれ 2本の合計 4本で構成は同じですが、mul + add のケースでも最大 3命令、fma + add では 2命令までしか実行できませんでした。

AVX512 の結果を見ると、やはり 512bit では fma (E) は同時に 1命令になっています。よって fma だけのピーク FLOPS は 256bit fma x2 と変わりません。

                                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX512 vfmaddps (32bit x16) n12   :    0.916   103842.0     3245.1  ( 32.0 1.0) -- (E)
AVX512 vfma+aps (32bit x16) n12   :    0.518   137726.3     5738.6  ( 24.0 1.7) -- (F)

ですが、fma + add の場合 (F) は約 1.8命令 (0.916/0.518 = 1.768) あり、256bit AVX の 3命令時よりも並列度が上がっていることがわかります。仮に同時に発行できる命令数が 3 op に制限されていても、AVX512 ならその影響を受けづらいということでしょうか。

現在の vfpbench には 512bit の add + mul の計測値が含まれていないので実際は不明ですが、Zen4 の場合 AVX512 の 512bit 命令でも 乗算+加算 の組み合わせは同時に 2命令実行できる可能性があります。

今回の計測値で最も高い数値が出ていたのは AVX512 512bit の fma + add の場合です。24/32 * 1.768 * 844.8 GFLOPS = 1120 GFLOPS

まとめると、

  • Zen4 は Zen2 よりも同時に実行できる fp 演算命令数が多い
  • Zen4 では 256bit 命令よりも AVX512 512bit 命令の方がピークの演算能力が高い

もちろん実際のアプリケーションで理論上の性能が出るわけではありませんのでご了承ください。

なお Intel IceLake の場合は 256bit 積和 x 2 の実行パイプなので、256bit 未満で最大 2命令、AVX512 の 512bit では同時 1命令になります。
詳しくはこちら