月別アーカイブ: 2015年10月

ARM Cortex-A72 の浮動小数点演算速度 (Amazon Fire TV)

Amazon Fire TV (2015) で vfpbench を走らせてみました。下記表の MT8173C (上 2つ) が Fire TV です。

SoC CPU clock AArch fop SP DP SP-MT DP-MT
MT8173C Cortex-A72 2.0GHz x2 64 16 15.875 7.946 31.756 15.882
MT8173C Cortex-A72 2.0GHz x2 32 16 15.864 7.934 31.771 15.885
Tegra4 Cortex-A15 1.8GHz x4 32 32 13.371 2.655 51.345 9.860
AppleA7 Cyclone 1.3GHz x2 64 32 20.621 10.313 40.871 20.480
AppleA7 Cyclone 1.3GHz x2 32 32 20.608 4.038 40.924 8.021
TegraK1 Denver 2.3GHz x2 64 24 17.906 8.762 34.888 17.601
TegraK1 Denver 2.3GHz x2 32 24 18.043 4.297 34.177 8.702

(SP/DP/SP-MT/DP-MT の単位は MFLOPS GFLOPS,数値が大きい方が高速)

詳細な結果は下記に追加しています。(big core のみ計測しています)

VFP Benchmark Log

Cortex-A72 はピーク性能に突出したところはなく core あたり 8 fop (単精度 SIMD4 FMA) と標準的。SIMD2 の結果から Cortex-A15 同様 64bit 2pipe の構成であることもわかります。

ただしスカラー命令にはかなり違いがあるようです。Cortex-A72 では NEON だけでなくスカラー命令も 2 pipe 並列に実行できるらしく、加算で Cortex-A15 のおよそ 2倍。これは AArch32 mode でも有効なので、ARMv7A でビルドしたバイナリでも 64bit CPU の方が高速に演算できることになります。

倍精度でも少々面白い結果になっています。AArch64 には倍精度浮動小数点演算の NEON 命令があるものの SIMD でも 2並列です。Cortex-A72 は 64bit x 2pipe なので、ピーク性能において NEON とスカラーの差がなくなっています。

AArch32 でも同じなので、倍精度 NEON 命令が使えない ARMv7A もピーク速度が落ちておらず AArch64 の NEON 相当の速度を維持しています。

下記は倍精度のみの抜粋です。AppleA7/TegraK1 は AArch32 と AArch64 で差が開いていますが Cortex-A72 はスコア差がありません。A7/K1 比でピーク速度で負けているものの AArch32 では逆転していることがわかります。

SoC CPU clock AArch DP DP-MT
MT8173C Cortex-A72 2.0GHz x2 AArch64 7.946 15.882
MT8173C Cortex-A72 2.0GHz x2 AArch32 7.934 15.885
SoC CPU clock AArch DP DP-MT
AppleA7 Cyclone 1.3GHz x2 AArch64 10.313 20.480
AppleA7 Cyclone 1.3GHz x2 AArch32 4.038 8.021
SoC CPU clock AArch DP DP-MT
TegraK1 Denver 2.3GHz x2 AArch64 8.762 17.601
TegraK1 Denver 2.3GHz x2 AArch32 4.297 8.702

CPU の浮動小数点演算能力の詳細

関連エントリ
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
iPad Air 2 (Apple A8X) の浮動小数点演算能力
Android x86 Binary Translator を試してみる
iPhone 5s A7 CPU の浮動小数点演算速度 (2) (arm64/AArch64/64bit)
VFP Benchmark 関連

Amazon Fire TV と OpenGL ES 3.1, TV Stick の OS

Amazon Fire TV (2015) と Fire TV Stick (2015) が発売されました。

Fire TV は MT8173C を搭載しており Fire (Kindle) 初の 64bit 機となっています。CPU core は Cortex-A72 で ARM のハイエンド系 64bit Core の 2世代目です。ただし 2+2 の big.LITTLE なのでハイパフォーマンス Core の担当は実質 Dual core になります。

GPU も PowerVR GX6250 と、Fire HD 6/7 に使われている Rogue G6200 (Series6) よりも一つ新しい Series6XT になりました。Apple でいえば A8/A8X と同じ世代ですが、Shader core 数は A8/A8X の 1/2~1/4 と少なくなっています。

どちらも世代は新しいものの Core の数は決して多くなく、コストとのバランスを保っている印象です。

Device SoC RAM CPU 64 GPU API
Fire TV 2014 APQ8064T 2GB Krait 300 4 N Adreno 320 ES3.0
Fire TV 2015 MT8173C 2GB Cortex-A72/A53 2+2 Y PowerVR GX6250 ES3.1
Fire TV Stick Broadcom 28155 1GB Cortex-A9 2 N VideoCore IV ES2.0
Apple TV Apple A8 2GB Cyclone 2 Y PowerVR GX6450 Metal
Nexus Player Atom Z3560 1GB Silvermont 4 N PowerVR G6430 ES3.1

Fire TV (2015) で気になっていたのは Developer サイトの公式の Spec 表で OpenGL ES 3.1 AEP に対応しているかのように書かれていたことです。AEP に対応しているのは Series7 以降のはずなので、実機で確認してみました。

下記の通り AEP には非対応でした。

// Amazon Fire TV 2015

GL_VERSION: OpenGL ES 3.1 build 1.4@3443629
GL_RENDERER: PowerVR Rogue GX6250
GL_VENDOR: Imagination Technologies
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.10 build 1.4@3443629

Extension:
GL_EXT_blend_minmax
GL_EXT_color_buffer_float
GL_EXT_discard_framebuffer
GL_EXT_draw_buffers
GL_EXT_multi_draw_arrays
GL_EXT_multisampled_render_to_texture
GL_EXT_occlusion_query_boolean
GL_EXT_read_format_bgra
GL_EXT_robustness
GL_EXT_separate_shader_objects
GL_EXT_shader_framebuffer_fetch
GL_EXT_shader_texture_lod
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_rg
GL_EXT_texture_sRGB_decode
GL_IMG_multisampled_render_to_texture
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_compression_pvrtc2
GL_IMG_texture_format_BGRA8888
GL_IMG_texture_npot
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent
GL_KHR_debug
GL_KHR_texture_compression_astc_ldr
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_depth24
GL_OES_depth_texture
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_element_index_uint
GL_OES_fragment_precision_high
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_required_internalformat
GL_OES_rgb8_rgba8
GL_OES_shader_image_atomic
GL_OES_standard_derivatives
GL_OES_surfaceless_context
GL_OES_texture_float
GL_OES_texture_half_float
GL_OES_texture_npot
GL_OES_texture_stencil8
GL_OES_texture_storage_multisample_2d_array
GL_OES_vertex_array_object
GL_OES_vertex_half_float

より詳細なデータは下記に掲載しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

Fire TV Stick (2015) はスティック状のストリームプレイヤーで Chromecast に似ています。ただし Chromecast と違い普通に Fire OS (Android) が動作しており Native なアプリがローカルで走ります。

ハードウエアの仕様自体は最初に発表された Fire TV Stick 2014 から特に変わっていないようです。Developer サイトの Spec 表でも 2014 モデル時のまま Fire OS 3.0 (API Level 17) と記載されています。

ところが実際に実機を調べたところ、低スペックながら Fire TV 同様 Fire OS 5.0 が動作しており API Level 22 (Android 5.1 相当) であることがわかりました。

GL_VERSION: OpenGL ES 2.0
GL_RENDERER: VideoCore IV HW
GL_VENDOR: Broadcom
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00

Extension:
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_compressed_paletted_texture
GL_OES_texture_npot
GL_OES_depth24
GL_OES_vertex_half_float
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_EXT_discard_framebuffer
GL_OES_rgb8_rgba8
GL_OES_depth32
GL_OES_packed_depth_stencil
GL_EXT_texture_format_BGRA8888
GL_EXT_debug_marker

GPU は Raspberry Pi と同じ VideoCore IV です。
こちらも詳細は下記のページに追加しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

関連エントリ
Android 5.0 Nexus Player x86 と対応 ABI
(Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU
Amazon Fire TV の性能