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

Pixel 9a Tensor G4 の浮動小数点演算能力と Linux ターミナル

Pixel 9a で vfpbench を走らせてみました。vfpbench は CPU の浮動小数点演算能力の理論的なピーク値に焦点を当てたベンチマークです。

以下の表は Pixel 8/8a との比較のための抜粋です。動作クロックが上がっている分だけシングル性能は高いはずですが、1コア減っているためマルチスレッドでは差がつきません。Pixel 8 比では全体的に低い値になっています。Pixel 8a の Single (Cortex-X3) の値が極端に低いですが、おそらく測定時に発熱で制限(サーマルスロットリング)がかかり、クロックが上がらなかったためと思われます。

fp32 SingleFP32 MULTIFP64 SINGLEFP64 MULTI
Pixel 869.7 GFLOPS281.9 GFLOPS28.0 GFLOPS139.6 GFLOPS
Pixel 8a37.7 GFLOPS245.1 GFLOPS18.8 GFLOPS122.2 GFLOPS
Pixel 9a67.9 GFLOPS256.5 GFLOPS33.8 GFLOPS127.4 GFLOPS
SINGLE = Single Thread、MULTI = Multi Thread

全部のデータはこちらで参照できます。

個々の命令の特性を見ると、クロックあたりのピークの浮動小数点演算能力はほぼ同等で特性もかなり似通ったものになっていることがわかります。

Tensor G4 自体は G3 と比べると CPU コアの世代が上がっています。以下は CPU コアの比較表です。

TENSOR G1TENSOR G2TENSOR G3TENSOR G4
PrimeX1 (x2)X1 (x2)X3 (x1)X4 (x1)
BigA76 (x2)A78 (x2)A715 (x4)A720 (x3)
LittleA55 (x4)A55 (x4)A510 (x4)A520 (x4)

Tensor G3 で唯一 32bit 命令2対応していた A510 が無くなり、Tensor G4 では完全に 64bit 命令のみ対応の CPU コアに置き換わりました。Tensor G4 では ARM の 32bit 命令のプログラムは動きません。ARM の各 CPU コアの 32bit 命令対応についてはこちらの記事を参照してください。

もっとも、OS としては Pixel 7 の Tensor G2 世代から 32bit アプリケーションには非対応となっており、すでに完全に 64bit に置き換わっています。そのため 32bit 対応コアがなくなっても影響はありませんのでご安心ください。

vfpbench の話しに戻ります。Tensor G4 の LITTLE コア A520 は 4個搭載されていますが、シングル時の浮動小数点演算性能に対して、4コアマルチスレッドでも 4倍ではなく 2倍にしかなっていません。 以下は LITTLE コアだけの比較になります。

FP32 SINGLEFP32 MULTIFP64 SINGLEFP64 MULTI
Pixel 7a (A55)14.0 GFLOPS54.7 GFLOPS7.0 GFLOPS27.8 GFLOPS
Pixel 8 (A510)27.1 GFLOPS61.3 GFLOPS13.5 GFLOPS29.1 GFLOPS
Pixel 8a (A510)27.0 GFLOPS56.6 GFLOPS13.5 GFLOPS28.0 GFLOPS
Pixel 9a (A520)30.9 GFLOPS62.7 GFLOPS15.4 GFLOPS31.7 GFLOPS
SINGLE = Single Thread、MULTI = Multi Thread

例えば Pixel 9a (A520) の FP32 SINGLE は 30.9 GFLOPS ですが、FP32 MULLTI でも約 2倍の 62.7 GFLOPS しかありません。これは A520 が A510 と同じように 2コアで浮動小数点演算ユニットを共有しているためだと考えられます。

A55 時代の Pixel 7a (Tensor G2) では Multi 時のスコアに対して Single の値が 1/4 になっています。つまり A510/A520 は A55 と比べて Single 時の性能が 2倍になっているわけです。

また LITTLE コアだけの比較では Pixel 8/8a の G3 よりも Pixel 9a の G4 の方が速度が上がっています。それぞれクロック差の影響がきちんとスコアに反映されています。同様に同じ G3 を搭載した Pixel 8 と 8a のパフォーマンスも同等です。LITTLE コアは電力効率が良いためにサーマルスロットリングの影響を受けなかったのだと思われます。

A510 におけるコアの共有についてはこちらで解説しています。

Linux 開発環境 (ターミナル) が 9a で使えないことについて

Pixel 9a を実際に使ってみて少々予想外だった点は、Linux 開発環境 (ターミナル) 機能が使えなかったことです。

「Linux 開発環境」は Pixel の OS に標準で含まれている Linux のコマンドラインの動作環境です。ChromeOS の同名の機能、もしくは Windows の WSL に相当します。Linux 開発環境 (ターミナル) 機能については以下の記事で解説しています。

おそらく使えないのは発売当初だけで、将来の OS 更新によって Pixel 9a でもサポートするのではないかと思われます。

幸いなことに、発売したばかりの Pixel 9a も Android 16 のベータプログラムに含まれていることがわかりました。Pixel 9a でも Android 16 Beta 4 をインストールすると、開発者向けオプショにから Linux 開発環境を有効にすることができました。

どうしても今すぐ Pixel 9a で Linux を使いたいという場合はベータプログラムを利用するのも一つの手かもしれません。もちろんメインのスマートフォンとして使用している場合はお勧めしません。

Ryzen Zen5 一般向け CPU で過去最高の浮動小数点能力

AMD Ryzen Zen5 世代の Desktop CPU で vfpbench を走らせてみました。使用したのは Ryzen 7 9700X で TDP はデフォルト (65W) 設定です。

Zen5 は AVX512 の 512bit FMA 積和命令を同時に 2命令実行可能で、この場合 32bit の浮動小数点演算をサイクルあたり 64 回。これまでの CPU の倍の演算能力になります。

以下は 9700X のシングルスレッド単精度からの抜粋です。512bit の AVX512 命令がスカラーや 128bit など他の命令と同じ IPC になっていることがわかります。512bit の FMA (vfmaddps) も同じ IPC で 2命令走っています。

 9700X Zen5                      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddss (32bit x1) n12       0.450    22301.1    11150.5  (  2.0 2.0)   スカラー fma
FMA vfmaddps (32bit x4) n12       0.451    89189.2    11148.6  (  8.0 2.0)   128bit fma
FMA vfmaddps (32bit x8) n12       0.450   178399.7    11150.0  ( 16.0 2.0)   256bit fma
AVX512 vmulps (32bit x16) n12     0.450   178398.1    11149.9  ( 16.0 2.0)   512bit mul
AVX512 vaddps (32bit x16) n12     0.451   178338.0    11146.1  ( 16.0 2.0)   512bit add
AVX512 vfmaddps (32bit x16) n12   0.451   356760.6    11148.8  ( 32.0 2.0)   512bit fma

さらに FMA ではなく乗算命令+加算命令の場合は以下のようになります。

 9700X Zen5                      TIME(s)   MFLOPS      MOPS     FOP   IPC
AVX512 vml+adps (32bit x16) n12   0.225   356510.6    22281.9  ( 16.0 4.0)   512bit mul + add

512bit 加算 x2 と 512bit 乗算 x2 が同時に走っており IPC は 4。ピーク FLOPS 値は FMA x2 と同等で、加算+乗算命令の組み合わせの場合は AVX512 512bit 命令を同時に 4命令実行できることになります。

Zen4 では 512bit AVX512 命令はクロックあたり 1命令相当だったので、Zen5 の浮動小数点演算能力は Zen4 比で 2倍です。以下は Ryzen 7 7840HS (Zen4) の結果からの抜粋です。こちらは Zen5 の結果とは違い、256bit 命令に対して 512bit 命令の IPC が半減していることがわかります。

 7840HS Zen4                     TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       0.337   162355.4    10147.2  ( 16.0 2.7)   FMA3   256bit fma
AVX512 vfmaddps (32bit x8) n12    0.342   160130.1    10008.1  ( 16.0 2.6)   AVX512 256bit fma
AVX512 vfmaddps (32bit x16) n12   0.680   160984.2     5030.8  ( 32.0 1.3)   AVX512 512bit fma

↑ 7840HS の IPC が割り切れない値 (1.3 や 2.6) になっているのは、数値がベースクロックの 3.8GHz 換算になっているためです。実測時は Boost 5.1GHz で動作していたため 5.1/3.8 = およそ 1.3 となります。

また現在の一般向け Intel CPU は AVX512 に対応しておらず、AVX2 (256bit) までとなります。少々世代が古いですが以下は RaptorLake Core i7-13700 の結果で、P-Core で 256bit fma が 2、E-Core で 1 命令です。

 i7-13700 RaptorLake P-Core      TIME(s)   MFLOPS      MOPS     FOP   IPC
FMA vfmaddps (32bit x8) n12       0.442   165987.5    10374.2  ( 16.0 2.0)   P-Core 256bit fma
FMA vfmaddps (32bit x8) n12       0.902    65432.2     4089.5  ( 16.0 1.0)   E-Core 256bit fma

よって、Zen5 は 一般向けとしてはこれまでで最も浮動小数点演算能力が高い CPU と言えるのではないでしょうか。

256 add256 mul256 fma256 ml+ad512 add512 mul512 fma512 ML+AD
Zen522242224
Zen422241112
RaptorLake P-Core2223
RaptorLake E-Core1111

なお Zen4 (Ryzen 7 7840HS) の結果もこちらに追加しました。

関連エントリ

ARM CPU の 64bit/32bit 命令対応

最近の ARM CPU Core は 32bit 命令への対応が徐々に無くなりつつあり 64bit 命令のみ動作するようになっています。

Apple はすでに iOS11 の段階で 64bit に完全移行しており 32bit のアプリが動作しません。同時にプロセッサも 32bit 命令が廃止されており、Apple A11 (iPhone8/X) 以降は AArch32(ARMv7) 命令非対応となっています。

同じように ARM の CPU Core も完全な 64bit 化が進んでいます。ARM Core の世代と 32bit/64bit への対応状況をまとめてみました。

ARMv8 世代の CPU までは 32bit/64bit 両方の命令に対応していますが、ARMv9 世代になってからは段階的に 32bit 命令が廃止されてきていることがわかります。

Apple の watchOS のように、ILP32 で 32bit OS ながら対応命令が 64bit (AArch64) のみとなっているものもあります。(詳しくはこちら「Apple Watch Series 6 と CPU 性能の測定」)

関連エントリ