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

iPad Air 2 (Apple A8X) の GPU

一番大きな違いは ASTC のサポートです。

GL_VERSION: OpenGL ES 3.0 Apple A8X GPU - 50.6.10
GL_RENDERER: Apple A8X GPU
GL_VENDOR: Apple Inc.
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.00

Metal の時代に今更 OpenGL ES という気もしますが念のため。
A8X では A7 になかった ASTC 圧縮テクスチャ形式が追加されています。
ASTC について詳しくは下記を参照してください。

OpenGL 4.3/GLES 3.0 次の圧縮テクスチャ ASTC
OpenGL ES 3.0 / OpenGL 4.3 ASTC 圧縮テクスチャの比較

OpenGL ES は 3.0 のままですが、すでに Metal API があるので
無くてもあまり問題は無いと思われます。
Metal では ES 3.1 相当の機能を利用することができます。

Extension:
GL_OES_standard_derivatives
GL_KHR_texture_compression_astc_ldr
GL_EXT_color_buffer_half_float
GL_EXT_debug_label
GL_EXT_debug_marker
GL_EXT_pvrtc_sRGB
GL_EXT_read_format_bgra
GL_EXT_separate_shader_objects
GL_EXT_shader_framebuffer_fetch
GL_EXT_shader_texture_lod
GL_EXT_shadow_samplers
GL_EXT_texture_filter_anisotropic
GL_APPLE_clip_distance
GL_APPLE_color_buffer_packed_float
GL_APPLE_copy_texture_levels
GL_APPLE_rgb_422
GL_APPLE_texture_format_BGRA8888
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc

TextureFormat 42
00=8c00  GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
01=8c01  GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
02=8c02  GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
03=8c03  GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
04=9270  GL_COMPRESSED_R11_EAC
05=9271  GL_COMPRESSED_SIGNED_R11_EAC
06=9272  GL_COMPRESSED_RG11_EAC
07=9273  GL_COMPRESSED_SIGNED_RG11_EAC
08=9274  GL_COMPRESSED_RGB8_ETC2
09=9275  GL_COMPRESSED_SRGB8_ETC2
10=9278  GL_COMPRESSED_RGBA8_ETC2_EAC
11=9279  GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
12=9276  GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
13=9277  GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
14=93b0  GL_COMPRESSED_RGBA_ASTC_4x4_KHR
15=93b1  GL_COMPRESSED_RGBA_ASTC_5x4_KHR
16=93b2  GL_COMPRESSED_RGBA_ASTC_5x5_KHR
17=93b3  GL_COMPRESSED_RGBA_ASTC_6x5_KHR
18=93b4  GL_COMPRESSED_RGBA_ASTC_6x6_KHR
19=93b5  GL_COMPRESSED_RGBA_ASTC_8x5_KHR
20=93b6  GL_COMPRESSED_RGBA_ASTC_8x6_KHR
21=93b7  GL_COMPRESSED_RGBA_ASTC_8x8_KHR
22=93b8  GL_COMPRESSED_RGBA_ASTC_10x5_KHR
23=93b9  GL_COMPRESSED_RGBA_ASTC_10x6_KHR
24=93ba  GL_COMPRESSED_RGBA_ASTC_10x8_KHR
25=93bb  GL_COMPRESSED_RGBA_ASTC_10x10_KHR
26=93bc  GL_COMPRESSED_RGBA_ASTC_12x10_KHR
27=93bd  GL_COMPRESSED_RGBA_ASTC_12x12_KHR
28=93d0  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
29=93d1  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
30=93d2  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
31=93d3  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
32=93d4  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
33=93d5  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
34=93d6  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
35=93d7  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
36=93d8  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
37=93d9  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
38=93da  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
39=93db  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
40=93dc  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
41=93dd  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR

下記ページを更新しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

関連エントリ
iPhone 5s の Apple A7 GPU
OpenGL ES 3.0 / OpenGL 4.3 ASTC 圧縮テクスチャの比較
OpenGL 4.3/GLES 3.0 次の圧縮テクスチャ ASTC
OpenGL ES 3.0 / OpenGL 4.3 ETC2 テクスチャ圧縮の比較

iPad Air 2 (Apple A8X) の浮動小数点演算能力

iPad Air 2 (A8X) の浮動小数点演算能力を調べてみました。
より詳細なログは下記ページに乗せています。

VFP Benchmark Log

// iPad 2 Air (Apple A8X)

ARCH: ARMv8A
VFP: AArch64 NEON
SingleT SP max:  23.568 GFLOPS
SingleT DP max:  11.751 GFLOPS
MultiT  SP max:  68.591 GFLOPS
MultiT  DP max:  33.968 GFLOPS
CPU core: 3
FMA: Yes
NEON: Yes

↑本当に CPU が 3 core でした。
モバイルデバイスではあまり見かけませんが Xbox360 や Wii U など
ゲーム機に多い印象です。

もともと Cyclone は Apple A7 でも浮動小数点演算能力が突出していた CPU
でしたが、A8X でもほぼ同様の傾向が出ています。
浮動小数点演算命令はスカラーベクター共に 2 命令同時に実行可能で、
NEON の 128bit 積和も並列に走ります。
動作クロックは低いものの、3 core になったことで他の ARM Core の
4 core に匹敵する数値となってます。(下記表の (*1) )

	      Apple A8X   Snapdragon 800   Tegra K1    Atom Z3745
               Cyclone      Krait 400     Cortex-A15   Silvermont
	      1.5GHz x3     2.2GHz x4     2.2GHz x4    1.83GHz x4
------------------------------------------------------------------
SingleT SP      23.568       17.128        17.136        8.946
SingleT DP      11.751        4.289         3.431        2.797
MultiT  SP(*1)  68.591       67.539        70.174       35.473
MultiT  DP      33.968       16.874        14.036       11.060

 * 数値は GFLOPS 、値が大きい方が速い
 * 倍精度 (DP) で大きく差が付いているのは ARMv7A (32bit) に NEON が無いため
 * ピーク値なので実際のアプリケーション動作速度とは異なります

さらに命令毎のログを詳しく見ていくと、A7 で何故か遅かった
倍精度演算のスカラー積和が改善されていることがわかります。

// iPhone 5s (Apple A7)
倍精度演算
                             実行時間 演算数   演算数
---------------------------------------------------------------
FPU fmul (64bit x1) n8      :  1.642   2436.1   2436.1
FPU fadd (64bit x1) n8      :  1.045   3827.0   3827.0
FPU fmadd (64bit x1) n8     :  3.915   2043.6   2043.6 --- (A-7)
NEON fmul.2d (64bit x2) n8  :  1.567   5105.1   5105.1
NEON fadd.2d (64bit x2) n8  :  1.034   7736.5   7736.5
NEON fmla.2d (64bit x2) n8  :  1.958   8172.1   8172.1 --- (B-7)

↑ Apple A7 では、FPU fmadd の積和 (A-7) だけ 3.915 と実行時間が
余計にかかっていました。
同じ積和でも NEON fmla はそこまでの落ち込みはなく、
(B-7) 見てわかるようにむしろスカラーよりも高速に実行できています。

// iPad Air 2 (Apple A8X)
倍精度演算
                             実行時間 演算数   演算数
---------------------------------------------------------------
VFP fmul (64bit x1) n8      :  1.442   2773.8   2773.8
VFP fadd (64bit x1) n8      :  0.926   4321.2   4321.2
VFP fmadd (64bit x1) n8     :  1.772   4513.6   4513.6 --- (A-8)
NEON fmul.2d (64bit x2) n8  :  1.408   5681.0   5681.0
NEON fadd.2d (64bit x2) n8  :  0.922   8680.2   8680.2
NEON fmla.2d (64bit x2) n8  :  1.744   9175.5   9175.5 --- (B-8)

↑ Apple A8X ではスカラーの倍精度積和 (A-8) も NEON (B-8) と変わらない
速度で実行できており、Apple A7 の弱点が克服されていることになります。

この辺りの演算能力の違いをまとめたのが下記ページの表です。

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

関連エントリ
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 関連

iOS8 で WebGL & 物理エンジンのベンチマーク結果

iOS 8 から WebGL が使えるようになりました。

平山さんが移植した物理エンジンのデモをさまざまな環境で走らせてみました。
(コメントで教えていただきました)

3Dやわらか物理エンジンをemscriptenでJavaScript+WebGLに移植してみた

                                         60fps で何体出せたか
---------------------------------------------------------------
iPad mini retina  iOS8  Apple A7 Cyclone     Safari     11体
iPad 4            iOS8  Apple A6 Swift       Safari      2体
MeMO Pad7 ME176   A4.4  Z3740    Atom        Chrome      1体
MeMO Pad7 ME176   A4.4  Z3740    Atom        Firefox    10体 *1
Tegra Note 7      A4.4  Tegra 4  Cortex-A15  Chrome      4体
Tegra Note 7      A4.4  Tegra 4  Cortex-A15  Firefox     8体 *1
Nexus 5           A4.4  MSM8974  Krait 400   Chrome      4体
Nexus 5           A4.4  MSM8974  Krait 400   Firefox     8体 *1

*1 Firefox ではテクスチャが表示されない問題あり

一応全部異なる CPU core です。(5種類)
iOS 端末でもきちんと動いています。
特に Apple A7 世代の端末なら非常に高速に動作することがわかります。

JavaScript + WebGL を使えば、Windows, Android, iOS, OSX, Linux と
どこでも動作可能な 3D アプリケーションを作れることになります。
ブラウザや端末によってまだ速度に差がありますが、
世代が進む毎に今後解消していくでしょう。

関連エントリ
Emscripten C++ のアプリをブラウザで動かす (8) iOS でも動く

ASUS MeMO Pad 7 ME176 で OpenGL ES 3.0 が復活

ASUS MeMO Pad 7 ME176 の最新ファームウエアで
再び OpenGL ES 3.0 が使えるようになっています。

Android 4.4.2  JP-3.2.23.182

GL_VERSION: OpenGL ES 3.0 - Build CL-260519-CI-15.33-24169
GL_RENDERER: Intel(R) HD Graphics for BayTrail
GL_VENDOR: Intel
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.0 - Build CL-260519-CI-15.33-24169

以前の記事はこちら。

Android BayTrail ME176 で OpenGL ES 3.0 が使えない

下記ページに追加しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)

関連エントリ
Android BayTrail ME176 で OpenGL ES 3.0 が使えない
Android の新しい GPU BayTrail-T Intel HD Graphics

NVIDIA SHIELD Tablet Tegra K1 は OpenGL ES 3.1 で Extension Pack 対応

Tegra K1 を搭載した SHILED Tablet が発売されました。
SHIELD Tablet の CPU Core は Tegra 4 同様 32bit Cortex-A15 Quad ですが、
GPU の本気度がこれまでと違います。

ブランドイメージに反して GPU が非力だった Tegra シリーズも、
K1 でようやく NVIDIA らしいスペックになったと言えるでしょう。

NVIDIA SHIELD

GL_VENDOR:   NVIDIA Corporation
GL_RENDERER: NVIDIA Tegra
GL_VERSION:  OpenGL ES 3.1 340.00

Extension:
GL_EXT_debug_marker
GL_EXT_blend_minmax
GL_EXT_color_buffer_float
GL_EXT_color_buffer_half_float
GL_EXT_copy_image
GL_EXT_debug_label
GL_EXT_draw_buffers_indexed
GL_EXT_frag_depth
GL_EXT_geometry_point_size
GL_EXT_geometry_shader
GL_EXT_gpu_shader5
GL_EXT_map_buffer_range
GL_EXT_occlusion_query_boolean
GL_EXT_primitive_bounding_box
GL_EXT_robustness
GL_EXT_separate_shader_objects
GL_EXT_shader_implicit_conversions
GL_EXT_shader_integer_mix
GL_EXT_shader_io_blocks
GL_EXT_shadow_samplers
GL_EXT_sRGB
GL_EXT_sRGB_write_control
GL_EXT_tessellation_point_size
GL_EXT_tessellation_shader
GL_EXT_texture_border_clamp
GL_EXT_texture_buffer
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_s3tc
GL_EXT_texture_cube_map_array
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_rg
GL_EXT_texture_sRGB_decode
GL_EXT_texture_storage
GL_EXT_texture_view
GL_EXT_unpack_subimage
GL_KHR_debug
GL_KHR_texture_compression_astc_ldr
GL_NV_bgr
GL_NV_bindless_texture
GL_NV_blend_equation_advanced
GL_NV_blend_equation_advanced_coherent
GL_NV_copy_buffer
GL_NV_copy_image
GL_NV_draw_buffers
GL_NV_draw_instanced
GL_NV_draw_texture
GL_NV_EGL_stream_consumer_external
GL_NV_explicit_attrib_location
GL_NV_fbo_color_attachments
GL_NV_framebuffer_blit
GL_NV_framebuffer_multisample
GL_NV_generate_mipmap_sRGB
GL_NV_instanced_arrays
GL_NV_occlusion_query_samples
GL_NV_non_square_matrices
GL_NV_pack_subimage
GL_NV_packed_float
GL_NV_packed_float_linear
GL_NV_pixel_buffer_object
GL_NV_read_buffer
GL_NV_read_depth
GL_NV_read_depth_stencil
GL_NV_read_stencil
GL_NV_secure_context
GL_NV_shadow_samplers_array
GL_NV_shadow_samplers_cube
GL_NV_sRGB_formats
GL_NV_texture_array
GL_NV_texture_border_clamp
GL_NV_texture_compression_latc
GL_NV_texture_compression_s3tc
GL_NV_texture_compression_s3tc_update
GL_NV_timer_query
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_depth24
GL_OES_depth32
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_sync
GL_OES_element_index_uint
GL_OES_fbo_render_mipmap
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_OES_sample_shading
GL_OES_sample_variables
GL_OES_shader_image_atomic
GL_OES_shader_multisample_interpolation
GL_OES_standard_derivatives
GL_OES_surfaceless_context
GL_OES_texture_npot
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_OES_texture_stencil8
GL_OES_texture_storage_multisample_2d_array
GL_OES_vertex_array_object
GL_OES_vertex_half_float
GL_ANDROID_extension_pack_es31a

OpenGL ES 3.1 に対応しており、OpenGL 4.x 相当の AEP
「 GL_ANDROID_extension_pack_es31a 」が付いています。

Tegra 2   Cortex-A9 x2   ULP GeForce(8)      OpenGL ES 2.0
Tegra 3   Cortex-A9 x4   ULP GeForce(12)     OpenGL ES 2.0
Tegra 4   Cortex-A15 x4  ULP GeForce(72)     OpenGL ES 2.0
Tegra K1  Cortex-A15 x4  GeForce Kepler(192) OpenGL ES 3.1 AEP/OpenGL 4.4

Tegra 2/3 の ULP GeForce は Direct3D 9 世代の GPU から
GLES 2.0 仕様ぎりぎりまで機能を削減したものでした。
Tegra 4 の ULP GeForce は同じ Direct3D 9 世代の GPU core のまま
本来のあるべき機能を復活させたもの。

Tegra K1 は Direct3D 11 世代の GPU core を搭載しています。
Shader Core 数が少ないだけで、対応 API など機能的には desktop GPU との差が
なくなっています。

CPU の VFP Benchmark の結果はこちら。

  SingleT SP max: 17.136 GFLOPS
  SingleT DP max:  3.431 GFLOPS
  MultiT  SP max: 70.174 GFLOPS
  MultiT  DP max: 14.036 GFLOPS

下記ページにも追加しました。

CPU/GPU OpenGL ES Extension (Mobile GPU)
VFP Benchmark Log