※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Direct3D 12 GPU별 Descriptor Size, 문제점 등

(원문 : Direct3D 12 GPU 毎の Descriptor Size, 問題点等)

Direct3D 12에서는 리소스 바인드의 방법이 크게 바뀌었습니다. 셰이더의 종류도, 넘기는 리소스 수도 늘어났고, 바인드의 비용도 무시할 수 없게 되었기 때문입니다. 리소스는 디스크립터 힙 위에 확보한 일련의 디스크립터에 등록합니다. 이 힙 위의 앞 어드레스를 지정하는 것만으로 묘화 시의 바인드가 완료되는 구조입니다.

디스크립터는 GPU가 액세스하는 영역이므로, 하드웨어에 따라 사이즈가 다릅니다. 실제로 어느 정도나 차이가 나는지 조사해보았습니다. 수치의 단위는 바이트입니다.

GPUFeatureLevelCBV_SRV_UAVSAMPLERRTVDSV
RADEON GCN 1.011_1321632144
RADEON GCN 1.112_0321632144
GeForce Kepler11_03232328
GeForce Maxwell GM111_03232328
GeForce Maxwell GM212_13232328
Intel HD Graphics Gen7.511_132163296
Intel HD Graphcis Gen811_1641632128

이와 같이 GPU에 따라 사이즈가 다른 만큼, 디스크립터의 어드레스를 계산할 때에는 반드시 GetDescriptorHandleIncrementSize()를 참조해야 합니다. 디스크립터란 말하자면 리소스를 참조하기 위한 포인터같은 것인데, 뷰에 해당하는 액세스에 필요한 정보도 포함합니다. 사이즈를 보면 단순한 어드레스일 뿐이 아니라는 것을 알 수 있습니다.

전체적으로 DSV가 큰 것은 Depth 외에 Stencil Surface의 필요, 고속화를 위한 (PreZ 등의) 추가 리소스가 포함되어 있기 때문이라 생각됩니다. 그런 의미에서 DSV가 8바이트 밖에 없는 GeForce는 그야말로 어드레스 뿐. 나아가 다른 정보구조체를 간접적으로 참조하고 있는 것이 아닐까요.

Intel HD Graphcis의 경우에는 세대간에도 차이가 발생합니다. 외부에서는 그다지 차이를 알 수 없습니다만, 하드웨어의 차이는 생각보다 큰 것 같습니다.

이 표는 아래 페이지에도 게재했습니다.

알게 된 문제점 등

DirectX12는 현재에도 빈번히 드라이버가 갱신되고 있습니다. 아직 안정되지 않은 상태인 것 같습니다. 이하는 사용하면서 알게 된 것입니다. (2015/09/22현재)

GeForce Maxwell/Kepler (355.82)

  • Indirect Draw의 CommandSignature에서 RootDescriptor가 반영되지 않는 문제가 있었으나 드라이버 355.82에서 수정됨

RADEON GCN 1.0/1.1 (15.8Beta)

  • CommandSignature에서 Root 32bit Constant/Root Descriptor가 반영되지 않음
  • Bundle에서 RootSignature의 파라미터가 상속되지 않음

Intel HD Graphcis Gen7.5/8 (10.18.15.4256)

  • RootSignature에 Root 32bit Constant가 복수 존재하는 경우, CommandSignature에서 첫 32bit Constant 밖에 갱신할 수 없음

아래 페이지도 갱신했습니다.

그 외에도 문제점은 아니지만 API의 거동이 GPU에 따라 자잘한 차이가 꽤 있습니다.

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Android 5.x OpenGL ES 3.1과 대응 GPU

(원문 : Android 5.x OpenGL ES 3.1 と対応 GPU)

Android 5.0부터 OpenGL ES 3.1에 대응합니다. GPU의 대응상황을 조사해보았습니다. 현재까지 판명된 (직접 조사한) GPU는 다음과 같습니다.

GPU              OpenGL API           SoC
----------------------------------------------------
Tegra K1         OpenGL ES 3.1 AEP
Adreno 420       OpenGL ES 3.1 AEP    Snapdragon 805
Adreno 430       OpenGL ES 3.1 AEP    Snapdragon 810         
Mali-T604        OpenGL ES 3.1        Exynos 5
Mali-T760        OpenGL ES 3.1        Exynos 7
PowerVR G6200    OpenGL ES 3.1        MT8135
PowerVR G6430    OpenGL ES 3.1        Atom Z3580

Android 4.3부터 OpenGL ES 3.0을 지원합니다. 위의 결과를 보면 OpenGL ES 3.0 대응 GPU 태반이 그대로 OpenGL ES 3.1에도 대응된다는 것을 알 수 있습니다.

위의 표에는 없습니다만, Z37 계열의 Intel HD Graphcs (Gen7)도 Windows의 최신 드라이버에서 OpenGL ES 3.1에 대응합니다.(자세한 건 이쪽으로)

따라서 현재 예외가 되는 것은 Adreno 300 계열 뿐입니다. Adreno 300(305/306/320/330등)은 OpenGL ES 3.0 전용이라 생각해도 될 것 같습니다.

또 하나의 특수한 예외는 iOS입니다. 지원하는 OpenGL API는 ES 3.0까지 입니다만, Low Level API인 Metal을 사용함으로써 OpenGL ES 3.1에 해당하는 기능을 사용할 수 있습니다.

GPU              API                     SoC
--------------------------------------------------
PowerVR G6430    OpenGL ES 3.0 / Metal   A7
PowerVR GX6450   OpenGL ES 3.0 / Metal   A8
PowerVR GX6850   OpenGL ES 3.0 / Metal   A8X

OpenGL ES 3.1 대응상황에 대해서는 아래 페이지에 정리했습니다.

GPU 별 상세는 이쪽.

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

(Kindle) Fire HD 6는 OpenGL ES 3.0에 대응하는 비대칭 4 core CPU

(원문 : (Kindle) Fire HD 6 は OpenGL ES 3.0 対応で非対称 4 core CPU)

Amazon의 새 Tablet인 Fire HD 6는 Android 4.4 기반의 Fire OS 4.1을 탑재했습니다. Android 4.4, API Level 19이 됨으로써 GPU가 대응하면 OpenGL ES 3.0를 쓸 수 있게 되었습니다.

아래는 Fire HD 6의 결과입니다.

GL_VERSION: OpenGL ES 3.0 build 1.3@2876724
GL_RENDERER: PowerVR Rogue Han
GL_VENDOR: Imagination Technologies
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.00 build 1.3@2876724

SoC는 MediaTek MT8135으로, 비대칭의 4 core CPU에 PowerVR G6200를 탑재합니다. Extension과 대응하는 압축 텍스처는 다음과 같습니다.

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

TextureFormat 17
00=8c01  GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
01=8c03  GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
02=8c00  GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
03=8c02  GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
04=9137  GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG
05=9138  GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG
06=8d64  GL_ETC1_RGB8_OES
07=9274  GL_COMPRESSED_RGB8_ETC2
08=9275  GL_COMPRESSED_SRGB8_ETC2
09=9278  GL_COMPRESSED_RGBA8_ETC2_EAC
10=9279  GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
11=9276  GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
12=9277  GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
13=9271  GL_COMPRESSED_SIGNED_R11_EAC
14=9270  GL_COMPRESSED_R11_EAC
15=9273  GL_COMPRESSED_SIGNED_RG11_EAC
16=9272  GL_COMPRESSED_RG11_EAC

ETC2/EAC만이 아니라 PVRTC2(PVRTCv2)에도 대응하고 있음을 알 수 있습니다. 같은 Series 6이라도 iOS에서는 PVRTCv2에 대응하지 않았습니다. PVRTCv2는 ETC2와 마찬가지로, 상위호환성을 가지면서 모드 분기에 따른 화질향상을 이룬 2세대 압축 포맷입니다.

1세대     2세대
-------------------
ETC1      ETC2/EAC
PVRTCv1   PVRTCv2
                          PVRTCv1  PVRTCv2  ETC1  ETC2/EAC
----------------------------------------------------------
Android PowerVR Series 5    Y        -       Y       -
Android PowerVR Series 6    Y        Y       Y       Y
iOS PowerVR Series 5        Y        -       -       -
iOS PowerVR Series 6        Y        -       Y*1     Y

 *1 ETC2 は ETC1 の上位互換性があるため ETC1 の読み込みも可能

CPU는 Cortex-A15 x2와 Cortex-A7 x2의 big.LITTLE 구성입니다. 실제로 테스트해보니 HMP가 유효화된듯 앱에서 4 core로 인식됨을 알 수 있습니다. 부하를 건 상태는 다음과 같습니다. 4 core 모두 활성화되어있습니다.

$ cat /sys/devices/system/cpu/online
0-3

$ cat /proc/cpuinfo
Processor	: ARMv7 Processor rev 3 (v7l)
processor	: 0
BogoMIPS	: 31.81
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 3

Processor	: ARMv7 Processor rev 3 (v7l)
processor	: 1
BogoMIPS	: 31.81
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 3

Processor	: ARMv7 Processor rev 2 (v7l)
processor	: 2
BogoMIPS	: 35.06
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc0f
CPU revision	: 2

Processor	: ARMv7 Processor rev 2 (v7l)
processor	: 3
BogoMIPS	: 26.00
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc0f
CPU revision	: 2

Hardware	: MT8135
Revision	: 000f 000a
Serial		: 0000000000000000

미들클래스에서도 Cortex-A7 Quad의 구성이 늘어나고 있는 가운데, 1만엔 전후의 가격대이면서 Cortex-A15를 탑재하고 있다는 점이 커다란 특징이라 할 수 있겠습니다. Cortex-A15와 Cortex-A7는 수배의 성능차가 있는만큼 HMP(GTS)에서 스케줄러가 어떻게 작업을 분배하는지가 흥미로운 부분입니다.

다음 페이지를 갱신했습니다.

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

iPad Air 2(Apple A8X)의 GPU

(원문 : 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 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

다음 페이지를 갱신했습니다.

관련 글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

Android의 새 BayTrail-T Intel HD Graphics

(원문 : Android の新しい GPU BayTrail-T Intel HD Graphics)

Bay Trail-T 탑재 Android 단말이 발매되었기에 간단하게 조사해보았습니다. Android 단말에 사용되는 GPU 종류에 Intel HD Graphics가 새롭게 추가되었습니다.

Qualcomm     Adreno
Imagination  PowerVR
NVIDIA       Tegra
ARM          Mali
Vivante      GC
Intel        HD Graphics   ← NEW

Adreno 320/330, Mali-T604, PowerVR G6430 (iOS) 다음으로 입수가능한 OpenGL ES 3.0 대응단말이 되었습니다.

대응하는 Extension은 다음과 같습니다.

// ASUS MeMO Pad 7 ME176 Android 4.4
// Atom Z3745 x86 RAM 1GB

GL_VENDOR: Intel
GL_RENDERER: Intel(R) HD Graphics for BayTrail
GL_VERSION: OpenGL ES 3.0 - Build eng.yunweiz.20140425.225700

GL_EXT_blend_minmax
GL_EXT_multi_draw_arrys
GL_SUN_multi_draw_arrys
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_compression_s3tc
GL_EXT_texture_lod_bias
GL_EXT_color_buffer_float
GL_EXT_packed_float
GL_EXT_texture_rg
GL_INTEL_performance_queries
GL_EXT_texture_storage
GL_OES_EGL_image
GL_OES_framebuffer_object
GL_OES_depth24
GL_OES_stencil8
GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8
GL_ARM_rgba8
GL_OES_depth_texture
GL_EXT_color_buffer_half_float
GL_OES_vertex_half_float
GL_EXT_shadow_samplers
GL_OES_point_sprite
GL_OES_blend_subtract
GL_OES_blend_func_separate
GL_OES_blend_qeuation_separate
GL_OES_standard_derivatives
GL_OES_read_format
GL_OES_mapbuffer
GL_EXT_discard_framebuffer
GL_EXT_texture_format_BGRA8888
GL_OES_compressed_paletted_texture
GL_OES_ELG_image_external
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_fixed_point
GL_OES_vertex_array_object
GL_OES_get_program_binary
GL_OES_texture_3D
GL_OES_texture_cube_map
GL_OES_fbo_render_mipmap
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float
GL_OES_texture_half_float_linear
GL_OES_stencil_wrap
GL_OES_element_index_uint
GL_OES_texture_npot
GL_OES_texture_mirrored_repeat
GL_EXT_sRGB
GL_EXT_frag_depth
GL_APPLE_texture_max_level
GL_EXT_occlusion_query_boolean
GL_INTEL_timer_query
GL_ANGLE_texture_compression_dxt1
GL_ANGLE_texture_compression_dxt3
GL_ANGLE_texture_compression_dxt5
GL_EXT_texture_compression_dxt1
GL_OES_required_internalformat
GL_EXT_separate_shader_objects
GL_OES_surfaceless_context
GL_OES_EGL_sync
GL_EXT_robustness
GL_EXT_shader_texture_lod
GL_EXT_unpack_subimage
GL_EXT_read_format_bgra
GL_EXT_debug_marker
GL_KHR_blend_equation_advanced
GL_EXT_shader_integer_mix

대응하는 압축 텍스처 포맷은 ETC2/EAC, ETC1, DXT(S3TC). DirectX11 세대의 GPU라 기능쪽으로 걱정할 필요는 없을 것 같습니다.

Android 용으로는 BayTrail 외에도 새로운 Atom(Silvermont core) SoC로 Z3400/Z3500(Moorefield)가 발표되었습니다. 탑재 GPU는 Intel HD Graphics가 아닌 PowerVR G6400입니다.

실제로 2014/5/8에 au에서 Z3580를 탑재한 MeMO Pad 8이 발표되었습니다. 발매자체는 8월로 좀 더 있어야합니다.

Tablet            SoC   core clock   display    GPU
---------------------------------------------------------------------
MeMO Pad 7 ME176  Z3745  4  1.86GHz  1280x800   Intel HD Graphics 4EU
MeMO Pad 8 ME181  Z3745  4  1.86GHz  1280x800   Intel HD Graphics 4EU
MeMO Pad 8 (au)   Z3580  4  2.33GHz  1920x1200  PowerVR G6430

PowerVR G6430은 Full HD 모델에 사용됩니다. ME176/ME181의 화면사이즈는 대다수의 Windows Tablet과 마찬가지로 1280x800 이므로, 순수한 GPU 성능으로는 Intel HD Graphics (4EU)보다 PowerVR G6430 쪽이 높지 않을까 싶습니다.

SoC core CPU-clock  GPU                   GPU-clock  fop   GFLOPS
-----------------------------------------------------------------
Z3745  4  1.86GHz   Intel HD Graphics 4EU   778MHz    64     49.8
Z3580  4  2.33GHz   PowerVR G6430           533MHz   256    136.4

Android에서도 x86 단말이 드물지 않게 되었습니다. CPU 자체는 x64에도 대응합니다.

앞으로는 Android도 64bit에 대응하리라 생각됩니다만, 기존의 단말에 대해서 64bit 판이 제공될지는 알 수 없습니다. 당분간은 구입할 타이밍을 잡기 힘든 상태가 될 것 같습니다.

관련글

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

OpenGL ES 2.0 Adreno 330, Tegra 4의 GPU 속도

(원문 : OpenGL ES 2.0 Adreno 330, Tegra 4 の GPU 速度)

벤치마크 결과를 갱신했습니다.

Android 4.1 이후 및 대응하는 디바이스에서는 SwapInterval을 0으로 변경해서 60fps 이상 나옵니다. (관련글)

GPU            SoC   CPU clock OS    Screen     fps       pix/sec
---------------------------------------------------------------------
Adreno 330     MSM8974 2.2GHz  A4.2  1920x1200  71.98fps   165.8M
Adreno 320(64) APQ8064 1.5GHz  A4.4  1920x1104  40.97fps    86.8M
Mali-T604     Exynos5D 1.7GHz  A4.4  2560x1504  20.73fps    79.8M
ULP GeForce(72) Tegra4 1.8GHz  A4.3   1126x800  44.58fps    43.4M
ULP GeForce(12) Tegra3 1.2GHz  A4.4   1280x752  15.70fps    15.0M (*1)

*1: Shadow Map 없음, 16bit depth

Adreno 330은 예상 이상으로 빨라서, Adreno 320과 비교해도 약 2배 정도의 속도를 냅니다. 드디어 가장 부하가 높은 설정에서도 Full HD(1920x1200)에서 60fps를 넘게 되었습니다.

그에 비해 Tegra 4는 그다지 속도가 늘지 않았습니다. 부하를 낮춰도 속도가 올라가지 않으므로, SwapInterval 설정이 효과가 없던지 뭔가 문제가 발생했을 가능성이 있습니다.

그 대신 Tegra 3에서 생략되었던 여러 extension을 지원하여 렌더링 결과가 다른 GPU와 거의 일치하게 되었습니다.

특히 GL_EXT_shadow_samplers는 그냥 Hardware ShadowMap이 아니라 PCF에 제대로 Bi-linear Filter도 걸립니다. GL_EXT_shadow_samplers는 OpenGL ES 3.0 이후의 디바이스는 전부 대응하고 있지만, 반드시 Filter가 걸리는 것은 아닌 듯 합니다. 아래는 몇가지 테스트한 결과입니다.

                               depth-tex sh-samplers PCF Filter
----------------------------------------------------------------
8064 Adreno 320 OpenGL ES 3.0      ◎        ◎      ◎   --
8064 Adreno 320 OpenGL ES 2.0      ◎        --      --   --
Mali-T604       OpenGL ES 3.0      ◎        ◎      ◎   ◎
Tegra 4         OpenGL ES 2.0      ◎        ◎      ◎   ◎
Tegra 3         OpenGL ES 2.0      --        --      --   --
iOS PVR 543MP3  OpenGL ES 2.0      ◎        ◎      ◎   ◎
Vivante GC4000  OpenGL ES 2.0      ◎        --      --   --
Mali-400MP4     OpenGL ES 2.0      ◎        --      --   --
PowerVR SGX540  OpenGL ES 2.0      ◎        --      --   --

이쪽에 관해서는 조금 더 자세하게 조사할 생각입니다. 또 Tegra4의 Extension 상세사항은 다음 페이지에 추가했습니다.

관련 페이지

※ 이 글은 오가사와라 히로유키(小笠原博之) 씨가 블로그에 적은 글을 번역한 것입니다. 사정에 따라 예고없이 삭제될 수 있으므로 양해부탁드립니다.

(원문 :モバイルデバイスは Game Console を超えたかどうか)

모바일 기기는 게임 컨솔을 넘었을까

모바일 기기는 요 몇년간 상당한 속도로 향상되어 왔으며, 기세도 줄어들지 않고 있습니다. 지금까지 테스트해온 대로, GPU, CPU 모두 PC나 전용기기에 필적하는 능력을 갖게 되었습니다.

개성이 치우쳐진 모바일 프로세서

PC와 마찬가지로 단말의 성능에는 큰 격차가 있습니다.

현시점에서 입수할 수 있는 가장 빠른 CPU는 Snapdragon APQ8064 (Krait Quad core) 일 것입니다. 내일 2013/04/04은 1.7GHz의 옵티머스G Pro L-04E가 발매예정입니다.

지금 당장 구할 수 있는 단말의 GPU 로는 틀림없이 iPad4의 A6X가 가장 빠릅니다.

PowerVR SGX500~의 형번호를 가진 GPU는 여럿 존재하지만, 크게 나누어 2종류가 있습니다.

PowerVR Series 5        SGX530, SGX535, SGX540
PowerVR Series 5XT      SGX543MP, SGX544MP, SGX554MP

형번호가 비슷해서 헷갈리지만, 양쪽에는 PVRTC2, 섀도우 샘플러, 연산정밀도, 멀티코어 등 기능적인 차이가 있습니다. 그중에서도 최상위인 SGX554MP4 를 탑재하고 있는 것은 iPad4의 A6X뿐 입니다.

이와 같이 하이엔드 단말 중에서도 각자 무엇을 중시하는가에 따라 평가가 달라집니다. Apple은 GPU를 최우선하고 있는 반면, CPU가 쿼드코어인 단말은 아직 존재하지 않습니다.

방향성으로 정반대인 것이 NVIDIA Tegra입니다. 솔선해서 듀얼코어, 쿼드코어인 Tegra2/3를 전개해왔지만, 트레이드 오프로서 GPU 기능이 약하고, 묘화성능도 좋지 않습니다.

따라서, 성능차만이 아니라 성격에 있어서도 특성이 제각기였던 것이 지금까지의 모바일 기기의 특징이었습니다.

  • 트레이드 오프가 있으므로 일부분만 우수하다
  • 메이커 별로 강화하고 있는 분야가 다르다

하지만 다음 세대에서는 이러한 언밸런스함이 상당부분 해소될 것이라 생각됩니다.

세대교체

다른 회사에 앞서서 GPU/CPU 모두 세대교체를 달성한 Qualcomm에서는, 아주 특출난 점은 없지만 평균적인 전체 성능이 높아졌습니다.

또, 이후 등장 예정인 Tegra4는 CPU 코어가 쇄신될 뿐 아니라, 겨우 NVIDIA다운 GPU로 강화될 듯 합니다.

Tegra2/3의 GPU인 ULP GeForce는 셰이더 유닛이 discrete였기에 GeForce6800/7800 세대라고 불리고 있었지만, 성능적으로는 대폭으로 깎인 물건이었습니다.

예를 들어 GeForce의 특징적 기능이었던 NVIDIA 섀도우 맵(PCF)이 Tegra2/3에는 탑재되어 있지 않습니다. 그뿐 아니라 지금까지 테스트한 GPU 중에서는 Tegra2/3만이 24비트 깊이나 깊이 텍스처에 대응하지 않았습니다. 다른 회사의 GPU인 Adreno, PowerVR, Mali, Vivante 는 모두 이러한 확장기능에 대응하고 있었는데 말입니다.

위 사이트의 슬라이드 사진을 보면 Tegra4에서 드디어 기능차가 해소되었으며, 또한 하드웨어 PCF가 탑재되는 등, 기대했던 GeForce 6800/7800 클래스의 GPU가 된 것 같습니다.

대충 4 픽셀 파이프니 성능적으로는 아마도 아무 표시없는 GeForce 6800 정도가 아닐까 합니다. 픽셀 레이트는 PS3/Xbox360 세대의 절반이지만, 메모리 대역으로 봐도 납득할 수 있는 수치입니다.

Xbox360  22.4GB/s (+32.0GB/s)
PS3      22.4GB/s (+25.6GB/s)
Tegra4   14.9GB/s

물론 예상에 지나지 않으므로 실제로 입수할 때까지는 진짜 성능은 알 수 없습니다.

CPU/GPU 양쪽의 세대교체를 통해, 일점집중형에서 평균적인 성능향상으로 이동하고 있다고 생각할 수 있습니다. 아마도 극단적인 개성연출은 줄어들어가지 않을까 싶습니다.

컨솔과의 비교

Xbox1/GC 시대의 컨솔은 확실히 넘어섰습니다. 우선 CPU의 속도에서 단위가 다르고, GPU 성능도 셰이더 등은 훨씬 고성능입니다. 단, 필레이트에 특화된 PS2의 특수한 하드웨어는 올바르게 비교할 수 없습니다.

또 모바일 기기에 요구되는 해상도는 컨솔보다도 높으므로, 그 점도 고려할 필요가 있습니다.

          mem B/W                CPU          RAM    screen
---------------------------------------------------------------
GC        2.6GB/s (+?)           0.5GHz x1    24MB   SD 480
PS2       3.2GB/s (+48.0GB/s)    0.3GHz x1    32MB   SD 480
Xbox1     6.4GB/s                0.8GHz x1    64MB   SD 480
Xbox360  22.4GB/s (+32.0GB/s)    3.2GHz x3   512MB   HD 720
PS3      22.4GB/s (+25.6GB/s)    3.2GHz x7   512MB   HD 720
PS4     176.0GB/s                ?.?GHz x8     8GB   HD 1080

Tegra3    6.0GB/s                1.7GHz x4  1~2GB
APQ8064   8.5GB/s                1.7GHz x4           HD 1080
A5X      12.8GB/s                1.0GHz x2     1GB   HD 1536
Tegra4   14.9GB/s                1.9GHz x4
A6X      17.0GB/s                1.?GHz x2     1GB   HD 1536

누가 봐도 확실하게 다른 점이라면 RAM 용량이 있습니다. 스마트폰도 태블릿도 RAM 용량 1GB~2GB는 당연하게 되었으며, 이 점에서는 현행 컨솔보다도 여유가 있습니다.

실 기기에서의 CPU 속도

실재 기기에서의 성능 비교
(실측이 아니라 스펙을 통한 연산치이므로 주의)

                             CPU           Clock  DMIPS/clock  DMIPS*core
-------------------------------------------------------------------------
Nexus 10            Exynos 5 Cortex-A15 x2  1.7GHz   3.5          11.90
ARROWS X F-02E      Tegra3   Cortex-A9  x4  1.7GHz   2.5          17.00
Optimus G Pro L-04E APQ8064  Krait      x4  1.7GHz   3.3          22.44

Xbox360             Xenon    PPC core   x3  3.2GHz   2.0~(3.2)   19.20~(30.72)
  • DMIPS*core 가 통합성능(참고치)으로 수치가 높은 쪽이 빠름

CPU의 코어수가 다르면 비교가 어려워지므로 어디까지나 참고치로만 봐주시기 바랍니다. DMIPS/clock는 동일 클럭에서 비교한 코어 1개의 능력으로, 이것을 클럭*코어수로 곱한 것이 DMIPS*core가 됩니다.

Xbox360의 DMIPS/clock은 Wikipedia Instructions per second를 참조했습니다. 단 동일 성능이어야 할 PS3 PPE가 3.2이므로 Xbox360의 실제 점수는 더 높을 가능성이 있습니다. (괄호 안의 수치는 3.2를 기준으로 한 경우) PS3의 Cell은 특수하여 간단히 비교할 수 없습니다.

앞으로 등장하게 될 Exynos 5 Octa (Cortex-A15 x4)나 Tegra4 (Cortex-A15 x4)의 점수를 예상하면 다음과 같습니다.

                             CPU           Clock  DMIPS/clock  DMIPS*core
-------------------------------------------------------------------------
Exynos 5 Octa                Cortex-A15 x4  1.6GHz   3.5          22.40
Tegra4                       Cortex-A15 x4  1.9GHz   3.5          26.60

그다지 엄밀한 비교는 아닐지도 모르지만, CPU 능력으로 현행 컨솔에 필적하는 레벨에 달했다는 것은 사실입니다.

단, 단정밀도의 부동소수점 연산능력으로는 당해내지 못합니다.

          CPU                fp-op/core   core   clock    GFLOPS
----------------------------------------------------------------
Xbox360   Xenon PPC            12         3      3.2GHz   115.2
PS3       Cell BE              12+8       1+7    3.2GHz   217.6
          Tegra3 Cortex-A9     4          4      1.7GHz    27.2
          APQ8064 Krait        8          4      1.7GHz    54.4
          Tegra4 Cortex-A15    8          4      1.9GHz    60.8
  • GFLOPS가 높은 쪽이 빠름
  • 이론치이므로 이대로의 성능이 나오지는 않습니다.

특히 Cell이 압도적으로, 필레이트 괴물이었던 PS2와 마찬가지로 일부분(부동소수점 연산능력)에 있어서 특출난 능력을 갖고 있습니다.

예상으로는 아마 PS4에서도 CPU 하나의 부동소수점 연산능력에 있어서는 Cell에 미치지 못하지 않을까 싶습니다. 그 대신 GPU에 스트림 처리를 맡길 수 있으므로, GPU를 보조하던 Cell과는 반대 입장이 됩니다.

GPU의 속도

  • Mobile Device는 해상도가 매우 높음
  • GPU의 구조가 다름
  • Tegra는 연산정밀도가 다름
  • 성능면에서는 동등

스마트폰에서는 Full HD, 태블릿에서는 2048x1536나 2560x1600 등 상당한 고해상도화가 이루어지고 있습니다. 메모리 대역도 셰이더 사이클도 대부분 픽셀에 소비됩니다. 그 때문에 설령 GPU 성능이 높아져도 상대적으로는 파워 부족에 빠지게 됩니다.

태반의 GPU가 타일 기반이며, 데스크탑 GPU와 구조가 다릅니다. 특히 PowerVR은 아무 것도 하지 않아도 하드웨어가 지연 렌더링을 하므로, 소프트웨어에서 너무 복잡한 일을 하면 역효과가 될 가능성이 있습니다.

예를 들어 Early Z Culling을 효과적으로 사용하려면 앞쪽에서부터 묘화를 해야하지만, 픽셀 단위로 프래그먼트가 제거되는 TBDR(Tile-Based Deferred Rendering. 타일 기반 지연 렌더링)에서는 불필요합니다. 또 포스트 이펙트같이 프레임 버퍼를 재이용하면 추가 비용이 발생할 가능성이 있습니다. 이런 것들을 의식하면서 만들지 않았을 경우, 단순히 이식하는 것만으로는 모바일 GPU에서는 성능이 그다지 나오지 않을지도 모릅니다.

그 점에서 Tegra는 Immediate Mode이므로 데스크탑 GPU와 같은 사고방식이 통용됩니다. 실제로 테스트한 것은 아니므로 억측이지만, 위에 적은대로 Tegra4에서 대충 현행 컨솔의 절반 정도가 아닐까 생각됩니다.

다만 Tegra 시리즈의 픽셀 셰이더는 연산정밀도가 mediump입니다. 정밀도가 필요한 셰이더는 동작하지 않을 가능성이 있고, 하드웨어 섀도우 샘플러의 대응은 필연이었을지도 모릅니다. 또 mediump를 기준으로 하면 PowerVR 역시 퍼포먼스가 올라가므로, fp32인 GPU와의 단순 FLOPS 비교는 무리가 있다고 생각합니다.

참고로, Qualcomm의 Adreno는 픽셀 셰이더의 연산정밀도도 GPU 선능도 컨솔과 비교하여 손색이 없습니다.

  • 셰이더나 확장기능 등, GPU 성능은 현행 컨솔과 완전히 동등
  • 묘화속도에서는 근거가 될 데이터가 부족(하지만 아마도 뒤떨어질듯)

정리

결론을 내자면, 내부구조를 숙지하고 있는 것도 실측해본 것도 아니므로 근거가 없지만, GPU 성능이나 게임에서 중요한 단정밀도의 부동소수점 연산성능에서도 Xbox360/PS3 쪽이 위일 것입니다. 더욱이 고해상도라는 것이나 버스 대역의 한계도 있어, 실제 애플리케이션에서는 GPU 성능 이상으로 간격이 생기는 것이 현실이 아닐까 싶습니다. 다만 급격한 성능의 향상으로, 따라잡는 것도 시간의 문제라는 것은 확실합니다. 특히 램 용량에서 앞서고 있으며, CPU 의 실행성능도 차이가 없어지고 있으니까요.


+ Recent posts