ARMv8A NEON flop
Apple Cyclone 128bit mla 2 16
Apple Typhoon 128bit mla 2 16
Apple Twister 128bit mla 3 24
NVIDIA Denver 128bit mla 1 + add 1 12
ARM Cortex-A53 64bit mla 2 8
ARM Cortex-A57 64bit mla 2 8
ARM Cortex-A72 64bit mla 2 8
Qualcomm Kyro 64bit mla 1 + add 1 6
ARMv7A NEON flop
ARM Cortex-A8 64bit mla 1 4
ARM Cortex-A9 32bit mac 1 2
ARM Cortex-A9 NEON 64bit mla 1 4
ARM Cortex-A7 32bit fma 1 2
ARM Cortex-A15 64bit fma 2 8
Qualcomm Scorpion 128bit mla 1 8
Qualcomm Krait 128bit fma 1 8
Apple Swift 128bit fma 1 8

暫定のまとめ。上の表は単精度のみです。vfpbench の結果から推定した値になります。
倍精度 (ARMv8A のみ) は下記のとおりです。

ARMv8A NEON flop-dp
Apple Cyclone 128bit mla 2 8
Apple Typhoon 128bit mla 2 8
Apple Twister 128bit mla 2 8
NVIDIA Denver 128bit mla 1 + add 1 6?
ARM Cortex-A53 64bit mla 2 4
ARM Cortex-A57 64bit mla 2 4
ARM Cortex-A72 64bit mla 2 4
Qualcomm Kyro 64bit mla 1 + add 1 3


関連ページ
CPU の浮動小数点演算能力の詳細
64bit ARMv8A CPU Core
VFP Benchmark Log 計測結果まとめ


Snapdragon 820 は Qualcomm 独自の 64bit CPU core Kyro を搭載しています。vfpbench で浮動小数点演算速度を計測してみました。

Qualcomm はもともと自社製 CPU core の Scorpion や Krait シリーズを採用していました。早い時期から 1GHz を超える高クロック化、また multi-core 化を実現しており主にハイエンド SoC での差別化を図っています。

ところが 64bit 時代に入ると一転し、フラグシップの Snapdragon 810 も ARM の一般的な Cortex-A57/A53 の big.LITTLE 構成となっていました。Kyro は久々に登場した Qualcomm の独自 CPU でかつ初の 64bit core になります。

2 + 2 の非対称 Multi core なので vfpbench では正しく計測することができませんでした。そのため Single-Thread 時の結果を中心に見ています。

Snapdragon 820 Kyro (2.2GHz x2 + 1.6GHz x2)

ARCH: ARMv8A
CPU core: 4
VFP: AArch64 NEON
FMA: Yes
NEON: Yes
Result
  SingleT SP max: 10.517 GFLOPS
  SingleT DP max:  5.216 GFLOPS

上の値は 1 core あたりの性能です。思ったよりも低い数値が出ています。より詳細なログは下記の通り。

* VFP/NEON (単精度 fp) single-thread
                                   sec       MFLOPS
---------------------------------------------------
FPU fmul (32bit x1) n8        :    0.469     2559.9
FPU fadd (32bit x1) n8        :    0.251     4777.4
FPU fmadd (32bit x1) n8       :    0.571     4205.1
NEON fmul.2s (32bit x2) n8    :    0.456     5257.7
NEON fadd.2s (32bit x2) n8    :    0.252     9510.8
NEON fmla.2s (32bit x2) n8    :    0.456    10516.8
NEON fmul.4s (32bit x4) n8    :    0.913     5258.8
NEON fadd.4s (32bit x4) n8    :    0.489     9825.7
NEON fmla.4s (32bit x4) n8    :    0.924    10387.4
FPU fmul (32bit x1) ns4       :    1.141     1051.6
FPU fadd (32bit x1) ns4       :    0.685     1752.7
FPU fmadd (32bit x1) ns4      :    0.913     2630.1
NEON fmul.2s (32bit x2) ns4   :    1.141     2103.5
NEON fadd.2s (32bit x2) ns4   :    0.685     3504.8
NEON fmla.2s (32bit x2) ns4   :    1.146     4187.6
NEON fmul.4s (32bit x4) ns4   :    1.144     4194.1
NEON fadd.4s (32bit x4) ns4   :    0.728     6595.9
NEON fmla.4s (32bit x4) ns4   :    1.142     8403.3
FPU fmul (32bit x1) n1        :    0.459     2614.5
FPU fadd (32bit x1) n1        :    0.274     4380.9
FPU fmadd (32bit x1) n1       :    4.568      525.5
NEON fmul.2s (32bit x2) n1    :    0.458     5245.7
NEON fadd.2s (32bit x2) n1    :    0.251     9562.2
NEON fmla.2s (32bit x2) n1    :    3.651     1314.6
NEON fmul.4s (32bit x4) n1    :    0.913     5257.8
NEON fadd.4s (32bit x4) n1    :    0.488     9828.5
NEON fmla.4s (32bit x4) n1    :    3.651     2629.5
NEON fmul.4s (32bit x4) n12   :    1.376     5234.2
NEON fadd.4s (32bit x4) n12   :    0.720    10001.3
NEON fmla.4s (32bit x4) n12   :    1.381    10429.9

乗算、加算ともに 64bit 単位で、1 cycle あたり 乗算1, 加算2 の構成になっているように見えます。よって 32bit 単精度の場合は 6 flop/cycle となり、Atom 系 (Silvermont, Airmont) に近い値になると思われます。同時に積和命令だけではピークにならないので、実際の理論値はおそらく 6 flop x 2.2GHz = 13.2 GFLOPS くらいでしょうか。2+2 の 4 core で 45.6 GFLOSP 前後。

上の vfpbench の結果は 4 flop/cycle 時のピーク値なので、4 x 2.2GHz = 8.8 GFLOPS。それよりも数値が伸びているので、2.2GHz よりも高い clock に boost されている可能性があります。もしくは、パイプラインが深いために vfpbench でピーク性能を捉えきれていないだけかもしれません。

どちらにせよ、浮動小数点演算だけに注目すると若干控えめな結果といえます。世代が上がる毎に浮動小数点演算をひたすら強化してきた Apple Aシリーズとは大きく特性が異なります。なにせ Apple A9 Twister に至っては 24 flop/clock で初期の AVX を超えています。

* VFP/NEON (倍精度 fp) single-thread
                                   sec       MFLOPS
---------------------------------------------------
FPU fmul (64bit x1) n8        :    0.465     2578.8
FPU fadd (64bit x1) n8        :    0.251     4781.4
FPU fmadd (64bit x1) n8       :    0.685     3506.0
NEON fmul.2d (64bit x2) n8    :    0.913     2627.7
NEON fadd.2d (64bit x2) n8    :    0.489     4912.0
NEON fmla.2d (64bit x2) n8    :    0.924     5194.1
FPU fmul (64bit x1) ns4       :    1.369      876.4
FPU fadd (64bit x1) ns4       :    0.685     1752.6
FPU fmadd (64bit x1) ns4      :    0.913     2629.6
NEON fmul.2d (64bit x2) ns4   :    1.369     1752.7
NEON fadd.2d (64bit x2) ns4   :    0.727     3303.5
NEON fmla.2d (64bit x2) ns4   :    1.369     3505.0
FPU fmul (64bit x1) n1        :    0.456     2629.0
FPU fadd (64bit x1) n1        :    0.274     4379.8
FPU fmadd (64bit x1) n1       :    5.477      438.2
NEON fmul.2d (64bit x2) n1    :    0.913     2629.1
NEON fadd.2d (64bit x2) n1    :    0.489     4911.5
NEON fmla.2d (64bit x2) n1    :    3.651     1314.6
NEON fmul.2d (64bit x2) n12   :    1.369     2629.6
NEON fadd.2d (64bit x2) n12   :    0.721     4992.3
NEON fmla.2d (64bit x2) n12   :    1.380     5215.8

倍精度の結果からも 64bit 単位のパイプラインになっているようです。余裕があれば、Multi-Thread 時を含めてもう少し詳しく調べてみたいと思っています。


関連エントリ
iPhone SE, Apple A9 の浮動小数点演算速度
Raspberry Pi 3 の速度比較, Cortex-A53 の速度
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
iPad Air 2 (Apple A8X) の浮動小数点演算能力


Snapdragon 820 (Adreno 530) の OpenGL ES の extension 結果です。Snapdragon 820 は Qualcomm 独自の 64bit CPU Kyro を搭載し、GPU も Adreno 530 に強化されています。

HTC 10 Snapdragon 820 Android 6.0 
CPU Kyro 2+2 core
GPU Adreno 530

Android 6 なので ES 3.1 AEP 止まりですが、Android N 以降では ES 3.2 と Vulkan に対応するものと思われます。この中では ASTC HDR 対応が目を引きます。今までサポートしていたのは Mali だけでした。

GL_VENDOR:   Qualcomm
GL_RENDERER: Adreno (TM) 530
GL_VERSION:  OpenGL ES 3.1 V@145.0 (GIT@I7b6ba47bd6)

GL_EXTENSIONS:
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_vertex_half_float
GL_OES_framebuffer_object
GL_OES_rgb8_rgba8
GL_OES_compressed_ETC1_RGB8_texture
GL_AMD_compressed_ATC_texture
GL_KHR_texture_compression_astc_ldr
GL_KHR_texture_compression_astc_hdr
GL_OES_texture_compression_astc
GL_OES_texture_npot
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_OES_texture_3D
GL_EXT_color_buffer_float
GL_EXT_color_buffer_half_float
GL_QCOM_alpha_test
GL_OES_depth24
GL_OES_packed_depth_stencil
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_EXT_sRGB
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_EXT_texture_type_2_10_10_10_REV
GL_EXT_texture_sRGB_decode
GL_OES_element_index_uint
GL_EXT_copy_image
GL_EXT_geometry_shader
GL_EXT_tessellation_shader
GL_OES_texture_stencil8
GL_EXT_shader_io_blocks
GL_OES_shader_image_atomic
GL_OES_sample_variables
GL_EXT_texture_border_clamp
GL_EXT_multisampled_render_to_texture
GL_OES_shader_multisample_interpolation
GL_EXT_texture_cube_map_array
GL_EXT_draw_buffers_indexed
GL_EXT_gpu_shader5
GL_EXT_robustness
GL_EXT_texture_buffer
GL_EXT_shader_framebuffer_fetch
GL_ARM_shader_framebuffer_fetch_depth_stencil
GL_OES_texture_storage_multisample_2d_array
GL_OES_sample_shading
GL_OES_get_program_binary
GL_EXT_debug_label
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent
GL_QCOM_tiled_rendering
GL_ANDROID_extension_pack_es31a
GL_EXT_primitive_bounding_box
GL_OES_standard_derivatives
GL_OES_vertex_array_object
GL_EXT_disjoint_timer_query
GL_KHR_debug
GL_EXT_YUV_target
GL_EXT_sRGB_write_control
GL_EXT_texture_norm16
GL_EXT_discard_framebuffer
GL_OES_surfaceless_context
GL_OVR_multiview
GL_OVR_multiview2
GL_EXT_texture_sRGB_R8
GL_KHR_no_error
GL_EXT_debug_marker
GL_OVR_multiview_multisampled_render_to_texture
GL_EXT_buffer_storage
GL_EXT_blit_framebuffer_paramsDisabled

Adreno 400 等、他の GPU のデータは下記からどうぞ。

CPU/GPU OpenGL ES Extension (Mobile GPU)


家の Vive Controller 置き場

vive_controller_stand.jpg

RADEON RX 480 が発表されたので、VR 対応 GPU のおおよその値段を比べてみました。いずれも登場時のもので、その後の値下げ等は考慮していないものです。
VR 対応 GPU の Spec については こちら(wiki) を参照してください。

GeForce GTX1080 $599
GeForce GTX1070 $379
GeForce GTX TITAN X $999
GeForce GTX980 Ti $649
GeForce GTX980 $549
GeForce GTX970 $329
RADEON RX 480 $199
RADEON R9 Fury X $649
RADEON R9 Nano $649
RADEON R9 Fury $549
RADEON R9 390X $429
RADEON R9 390 $329
RADEON R9 290X $549
RADEON R9 290 $399

↓ Wiki もたまに更新しています。

HMD VR Device spec 一覧


関連エントリ
HTC Vive のセットアップと PC スペック、遅い PC で動くかどうか
HTC Vive (VR ヘッドマウントディスプレイ) の接続


HTC Vive のソフトウエアセットアップは、下記サイトのツールを起動して画面に従っていくだけで完了します。

Vive Setup (www.htcvive.com/jp/setup)

各デバイスの認識状態の確認には StemVR アプリを使います。Base Station 同士がお互い遮蔽物がなく見える位置にあること、ヘッドセット及びコントローラーが両方の Base Station から見える位置にあることが重要になってきます。うまく認識されていない場合は StemVR のメニューから 「Viveヘッドセットを再起動」 すると良いようです。

SteamVR

上の Vive Setup のページには推奨 PC も書かれています。Oculus Rift との比較は下記のとおりです。

Oculus Rift CV1 HTC Vive
GPU GTX 970 / R9 290 以上 GTX 970 / R9 290 以上
CPU Core i5-4590 以上 Core i5-4590 / FX 8350 以上
RAM 8GB 以上 4GB 以上
HDMI / DP HDMI 1.3 以上 HDMI 1.4 / DP 1.2 以上
USB USB 3.0 x3 + USB 2.0 x1 USB 2.0 x1

Oculus Rift : Recommended PC Specification
HTC Vive : Recommended System Requirements

どちらも 1080x1200 x2 (2160x1200) 90fps とスペックが似通っているためか推奨 GPU は同一でした。最も異なっているのは USB Port の数で、Oculus Rift は USB 3.0 を含む合計 4個の USB Port を使っています。一方 HTC Vive は USB 2.0 が 1個だけで済んでおり、トラッキング方法の違いが表れています。

GAME Watch: Gamescomで存在感を増してきたSteamVR初号機「HTC Vive」
GAME Watch: Valve「Lighthouse」とOculus CV1のトラッキングはどっちが凄い?

上の記事の解説によると HTC Vive はヘッドセット/コントローラー側に受光器があり、BaseStation はレーザー光のパルスを発光しているだけとなっているようです。Base Station は PC と直接繋ぐ必要がなく、またコントローラーもワイヤレスなのでセンサーの通信量もそれほど多くないのでしょう。Oculus の方はおそらく高フレームレートで Camera 画像を読み取っており、それなりの帯域が必要になっているのだと思われます。

発光だけとはいえ、HTC Vive の Base Station は決して簡単な構造ではないようです。電源を入れると僅かな振動が感じられ、中でモーターが高速に回転していることがわかります。それなりに重量もあり、ずれないように安定した設置場所の確保が必要です。


推奨 spec 以下の PC では本当に動かないのか試してみました。HTC Vive では動的に性能の監視をしており、90fps に満たない場合はアプリケーションの描画が行われないようになっています。起動してみてアプリの画面が表示されなければスペックが足りていません。必要な描画性能はアプリケーションに依存しますが、目安となる測定ソフトが提供されています。

下記は SteamVR Performance Test の結果です。

CPU AMD A10-7870K 評価 Frame 遅延 結果
GeForce GTX 960 Maxwell 3.4 (中程度) 9352 0% VR可能
GeForce GTX 760 Kepler 0 (低い) 7466 94.1% VR使用不可
RADEON R7 (7870K 内蔵) 0 (低い) 1849 100% VR使用不可
CPU Core i7-4790K 評価 Frame 遅延 結果
GeForce GTX 960 Maxwell 3 (中程度) 9571 0% VR可能
GeForce GTX 980Ti Maxwell 9.7 (非常に高い) 10292 0% VRレディ

「VR 可能」判定は描画が 90fps を下回らないかどうかでデジタルに決まります。そのため GPU 性能に比例した数値は、評価 よりも Frame (実際に描画した Frame 数) の方が近くなっています。例えば GTX 960 と GTX 760 を比べると、Frame の値はそこまで差が開いていませんが 760 はぎりぎり 90fps に達していないのだと思われます。そのため結果としては「VR使用不可」となっています。

GTX 960 は 100% 90fps を超えているため「VR可能」ですが、性能上余裕が無いためか評価は「中程度」に収まっています。おそらくソフトによっては処理落ちが生じ、全く表示されないアプリが出てくるものと思われます。i7-4790K でも結果はほぼ同じだったので、純粋に描画性能が問題となってるようです。

A10-7870K 内蔵 GPU RADEON R7 の場合 Frame の数値がかなり落ちています。↓ CPU のスコアもかなり落ちているので、バス帯域が間に合っていないのだと思われます。

↓A10-7870K 内蔵 RADEON R7
vive_ptest_7870k_r7.png

↓A10-7870K + GeForce GTX760
vive_ptest_7870k_gtx760.png

↓A10-7870K + GeForce GTX960
vive_ptest_7870k_gtx960.png

A10-7870K + GTX 960 の組み合わせなら一応「VR可能」なので実際に幾つかのアプリを試してみました。Fantastic ContraptionTilt Brush ではほぼ問題なく動きました。が、どうやら GPU よりも CPU が追いつかないらしく The Lab などの重いソフトではトラッキングが処理落ちし、ぶれて安定しなくなります。描画落ちではないのでシステムで検出されないようです。

SteamVR Performance Test は GPU/CPU の描画だけの評価を返しますが、トラッキングなど VR では描画意外でも CPU 能力を要求しています。影響が出るのできちんと推奨スペックを守った方が良さそうです。


関連エントリ
HTC Vive (VR ヘッドマウントディスプレイ) の接続
VR Device spec 一覧


| 次のページ(日付が古い方向)>>