VFP Benchmark の Android 版も 64bit 対応になりました。
対応していれば arm64 (arm64-v8a), x86_64 (x64), mips64 で計測を行います。
なお iOS 版はすでに 64bit (arm64) に対応しています。
・VFP Benchmark v1.3
・VFP Benchmark (Google Play)
下記は Nexus 9 (Tegra K1 64) での結果の比較です。
NVIDIA Denver ST-SP ST-DP MT-SP MT-DP ---------------------------------------------------------------- AArch32 32bit armv7a 17.799 4.423 34.582 8.719 GFLOPS AArch64 64bit arm64 17.906 8.762 34.888 17.601 GFLOPS * ST=Single thread, MT=Multi thread * SP=Single precision fp, DP=Double precision fp * 単位は GFLOPS, 数値が大きい方が高速
AArch64 は倍精度 NEON 命令が使えるため DP の速度が 2倍になっています。
より詳しい結果は下記ページに載せています。
// Tegra K1 Denver arm64 時間(sec) MFLOPS --------------------------------------------------- FPU fmul (32bit x1) n8 : 2.049 1952.1 FPU fadd (32bit x1) n8 : 1.000 3998.3 FPU fmadd (32bit x1) n8 : 1.849 4326.0 NEON fmul.2s (32bit x2) n8 : 1.842 4343.8 NEON fadd.2s (32bit x2) n8 : 1.259 6356.0 NEON fmla.2s (32bit x2) n8 : 1.900 8420.3 NEON fmul.4s (32bit x4) n8 : 1.837 8711.7 NEON fadd.4s (32bit x4) n8 : 1.179 13570.5 NEON fmla.4s (32bit x4) n8 : 1.831 17475.0 FPU fmul (64bit x1) n8 : 1.930 2072.7 FPU fadd (64bit x1) n8 : 0.929 4306.0 FPU fmadd (64bit x1) n8 : 1.798 4450.2 NEON fmul.2d (64bit x2) n8 : 1.809 4422.6 NEON fadd.2d (64bit x2) n8 : 1.195 6695.8 NEON fmla.2d (64bit x2) n8 : 1.826 8762.0
fmul.2s, fmul.4s の速度差が無いため、Cortex-A15 と異なり NEON 命令の実行は
128bit 単位と思われます。
おそらく Nexus 9 の Denver は 2.2GHz 前後で動作しており、
1 cycle あたりスカラー乗算 で 1、加算が 2。
SIMD ではこの割合が 4 mul, 6 add, 4 mad となっています。
表にまとめると下記の通り。(数値が大きい方が cycle あたりの演算能力が高い)
Scalar SP Scalar DP mul add mad mul add mad ---------------------------------------------- Cortex-A9 32 1 1 2 0.5 1 1 Cortex-A15 32 1 1 2 1 1 1.4 Krait 400 32 1 1 2 1 1 2 (Qualcomm) Swift 32 1 1 1 1 1 1 (Apple A6) Denver 64 1 2 2 1 2 2 (NVIDIA Tegra) ← Cyclone 64 2 3 4 2 3 4 (Apple A7/A8) Silvermont 64 1 1 - 0.5 1 - (Intel BayTrail Atom) Jaguar 64 1 1 2 0.5 1 - (AMD Kabini)
SIMD2(32x2) SP SIMD4(32x4) SP SIMD2(64x2) DP mul add mad mul add mad mul add mad ------------------------------------------------------------------ Cortex-A9 32 2 2 4 2 2 4 - - - Cortex-A15 32 4 4 8 4 4 8 - - - Krait 400 32 2 2 4 4 4 8 - - - Swift 32 2 2 4 4 4 8 - - - Denver 64 2 3 4 4 6 8 2 3 4 ← Cyclone 64 4 6 8 8 12 16 4 6 8 Silvermont 64 - - - 2 4 6 0.5 1 1.5 Jaguar 64 - - - 4 4 8 2 2 4
↑この表は命令あたりの演算個数で、積和を 2とみなしています。
より詳しい表は下記ページに載せています。
Denver は CPU core と比べても比較的おとなしい結果となっています。
浮動小数点演算において特に突出した特徴は持っていないので、
core の数が少ない分だけ Multi-Thread 時のピーク値が低くなっています。
下の表は 32bit 版 Tegra K1 を搭載した SHILD Tablet との比較です。
Tegra K1 (数値はGFLOPS) ST-SP ST-DP MT-SP MT-DP --------------------------------------------------------------- Denver AArch32 32bit armv7a 17.799 4.423 34.582 8.719 Nexus 9 Denver AArch64 64bit arm64 17.906 8.762 34.888 17.601 Nexus 9 Cortex-A15 ARMv7A 32bit armv7a 17.136 3.431 70.174 14.036 SHIELD Tab
これだけ見ると Cortex-A15 版の方が優れているように見えますが、
あくまで浮動小数点演算命令だけの結果です。
実際には ARM の 64bit 命令セットが使えるメリットは大きく、
アプリケーションの動作速度ではこれらと大きく異なった結果になると思われます。
↓の表は WebGL (Emscripten) 物理エンジン ベンチマークの結果比較で、
Nexus 9 はかなり高速に実行できています。
Nexus 9 Tegra K1 Denver 64 Android 5.0 Firefox 33 13体 iPad Air 2 Apple A8X Cyclone 64 iOS 8.1 Safari 13体 MeMO Pad ME176 Z3740 Silvermont 32 Android 4.4 Firefox 33 9体 Tegra Note 7 Tegra 4 Cortex-A15 32 Android 4.4 Firefox 33 8体 Nexus 5 MSM8974 Krait 400 32 Android 4.4 Firefox 33 8体 Nexus 7 APQ8064 Krait 32 Android 5.0 Firefox 33 5体
詳しくは下記ページで。現在は Firefox でも正しく描画されるようになっています。
・iOS8 で WebGL & 物理エンジンのベンチマーク結果
● Android NDK のアセンブラ命令
clang と gcc4.9 の違いかもしれませんが、左側の省略記法が使えなかったので
右のようにレジスタ名への展開が必要でした。
orr.16b v1, v0, v0 → orr v1.16b, v0.16b, v0.16b fmla.4s v0, v8, v4 → fmla v0.4s, v8.4s, v4.4s
関連エントリ
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・Android x86 Binary Translator を試してみる
・Atom Bay Trail の浮動小数点演算能力
・VFP Benchmark v1.1 浮動小数点演算命令の速度 (NEON/SSE/AVX)
・ARM CPU の VFP Benchmark アプリ 浮動小数点演算速度の計測
・iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
・iPhone 5s A7 CPU の浮動小数点演算速度 (32bit)
・Nexus 10 CPU Cortex-A15 の速度
・Nexus 10 CPU Cortex-A15 の浮動小数点演算速度
・Qualcomm APQ8064 GPU Adreno 320 の速度
・Qualcomm APQ8064 Krait/A6 swift の浮動小数点演算能力
・ARM Cortex-A8 の NEON と浮動小数演算最適化
・benchmark 関連