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

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 별 상세는 이쪽.

관련글

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

3DMark Android 판의 결과로부터

(원문 : 3DMark Android 版の結果から)

Android판 3DMark 앱의 DEVICE CHANNEL에서 각 기종의 결과를 볼 수 있습니다. 매우 흥미진진하고, 보고 있으면 재미있는 데이터이기에 정리해봤습니다.

SoC      CPU       core  GPU              Score        CPU vs GPU
-----------------------------------------------------------------
APQ8064  Krait      x4   Adreno 320       8000-11000   CPU <= GPU*
Exynos5D Cortex-A15 x2   Mali-T604        7800        *CPU >  GPU
MSM8960  Krait      x2   Adreno 225       5000-6500    CPU <= GPU*
MSM8x60  Scorpion   x2   Adreno 220       3700-5000    CPU <= GPU*
Tegra3   Cortex-A9  x4   ULP GeForce(12)  3000-4000   *CPU >> GPU
K3V2     Cortex-A9  x4   Vivante GC4000   3400-3700   *CPU >> GPU
OMAP4470 Cortex-A9  x2   PowerVR SGX544   3600        *CPU >> GPU
Exynos4Q Cortex-A9  x4   Mali-400MP4      2500-3400   *CPU >> GPU
Z2460    Atom       x1   PowerVR SGX540   2400        *CPU >> GPU
Exynos4D Cortex-A9  x2   Mali-400MP4      1600-2100   *CPU >> GPU
OMAP44x0 Cortex-A9  x2   PowerVR SGX540   1300-3400   *CPU >> GPU
MSM8x55  Scorpion   x1   Adreno 205       1750         CPU <  GPU*
RK3066   Cortex-A9  x2   Mali-400MP4      1200-2800   *CPU >> GPU
Tegra2   Cortex-A9  x2   ULP GeForce(8)   1400-2100   *CPU >> GPU

・Score 값이 높을수록 빠름
・수치는 항상 변동하므로 현시점에서의 참고치로 봐주시길.

가장 오른쪽 열은 CPU와 GPU 중에 어느 쪽의 수치가 더 높은지를 나타냅니다.

전체적으로는 Adreno22x/320의 수치가 높은 경향이 있습니다. 오른쪽 열을 보면 알 수 있듯, CPU 보다도 GPU의 점수가 높은 것은 Qualcomm (Adreno)의 프로세서뿐입니다.

Exynos/OMAP/Tegra 등, Quallcom 이외에는 모두 CPU 쪽이 높게 나타나고 있고, 그 차이도 2배 정도까지 넓혀져 있습니다.

어째서 이런 결과가 되었는지 생각해보겠습니다.

CPU

CPU는 두 그룹으로 나뉘어집니다.

(A) Cortex-A9, Scorpion
(B) Cortex-A15, Krait

(B)는 새로운 세대의 CPU 코어로, 동작 클럭 차이도 있지만 실행효율 자체도 향상되어 있습니다. 예를 들어 (A)가 2 명령 디코드(역자 주: 원문에는 deocde라고 되어있으나 decode의 오타라고 생각되어 수정)의 Out-of-Order 실행인 것에 대해, (B)그룹은 3 명령으로 끌어올려져 있습니다. 동일 클럭, 동 코어수라도 Krait, Cortex-A15 쪽이 고속입니다.

Adreno

각 회사의 SoC/GPU는 다종다양하며 특기분야가 확실합니다. Adreno는 ATI 의 흐름을 이은 모바일용 GPU로, 가장 데스크탑용 GPU에 가까운 기능을 갖고 있습니다. 이것은 다른 GPU에는 없는 커다란 특징입니다.

예를 들자면 정점 텍스처나 볼륨 텍스처(3D 텍스처) 등, 모바일 용도로는 별로 필요치 않은 기능에도 확실히 대응하고 있습니다. 다음 링크에 실제로 각종 GPU 기능을 비교한 표가 있습니다.

프래그먼트 셰이더(픽셀 셰이더)의 연산정밀도도 fp32의 highp 고정으로, 묘화 품질 역시 데스크탑 GPU와 동등합니다. 퍼포먼스를 높이기 위해 눈에 보이는 것을 희생할 필요가 업습니다.

그 대신 초기의 Adreno 20x/AMD Z430에서는 정점 캐시가 없었고, 데스크탑 GPU와 동등한 묘화기능을 가진 반면, 퍼포먼스는 생각했던 것만큼 나오지 않는 경향이 있었습니다. 이 점은 Adreno 22x 이후 개량되어, 묘화 프리미티브에 의존하지 않으며 스루풋이 크게 올라가 있습니다.

복잡한 셰이더도 상당히 잘 돌아가지만, 애플리케이션에 따라서는 그다지 속도가 나오지 않는 것도 있습니다. 어디까지나 상상에 지나지 않지만, Adreno는 OpenGL ES 1.1의 고정 파이프를 시뮬레이션하는 부분이 그다지 좋지 않은 것일지도 모릅니다. (미확인입니다)

셰이더를 사용하여 묘화할 경우, Adreno는 극단적으로 모바일에 특화된 최적화할 필요가 없으며, 셰이더를 그대로 이식해도 속도가 잘 떨어지지 않는 경향이 있습니다. 이 점이 벤치마크에서 유리하게 작용하는 것이 아닐까 합니다. 정리하자면,

  • highp 고정이라 연산정밀도를 떨어트리지 않아도 속도가 변하지 않음
  • 모바일용으로 mediump/lowp화하는 등 특별한 최적화를 할 필요가 없음
  • PC의 묘화 품질에서 떨어트릴 필요가 없음
  • Uniform 수, Sampler 수도 많고 Extension도 풍부하여 호환성을 유지하기 쉬움
  • 통합 셰이더이므로, 정점 부하, 픽셀 부하 어느쪽에든 대응하기 쉬움

또 Adreno 320는 OpenGL ES 3.0에 대응하는 새로운 설계의 GPU 코어이므로, 세대적으로도 상당한 고성능입니다. 사용되는 API 가 ES 2.0이므로, 아직 잠들어있는 하드웨어 기능도 있습니다. 앞으로도 더욱 점수가 늘어날 것이라고 생각됩니다.

Mali-400MP4

GPU의「코어 수」는 GPU에 따라 세는 방법이 다르며 단위도 제각각입니다. 단말의 스펙에 GPU의 코어 수가 적혀있는 경우도 있지만, 성능의 지표가 될 수 있는 건 어디까지나 동일 GPU끼리 비교했을 때 뿐입니다.

PowerVR SGX의 MP1~4은 CPU와 거의 같은 개념으로, GPU 그 자체가 복수 존재하여 병렬로 동작합니다.

Tegra의 코어 수는 GPU 내의 연산 유닛 수를 나타냅니다. G80 이후의 데스크탑 GPU에 맞춘 것으로, 통합 셰이더의 스트림 프로세서에 해당하는 것이 몇개분인지를 나타냅니다. Discrete 이지만 정점, 프래그먼트 둘다 카운트됩니다.

Mali-400은 다음 페이지의 그림(Mali-400 MP Image)에 나와있듯 프래그먼트 프로세서의 유닛 수를 선택할 수 있으며, MP1~MP4라고 불립니다. 이 숫자에는 정점 프로세서가 포함되어 있지 않습니다.

Tegra2/3에서도 8→12로 코어 수는 늘어났지만 정점 유닛 수는 동일합니다. 만약 Mali-400MP와 마찬가지로 프래그먼트 프로세서만을 센다면 Tegra2의 ULP GeForce(8)는 정점 4 + 프래그먼트 4로 MP1, Tegra3의 ULP GeForce(12)는 Vertex 4 + Fragment 8로 MP2가 될 것입니다.

다시 말해 Discrete Shader의 GPU에서는 스펙 표기상의 코어 수가 늘어나도, 정점 성능이 향상된다고는 할 수 없습니다.

Galaxy S2에서 Mali-400MP4가 등장했을 때에는 픽셀 퍼포먼스가 굉장히 높아, 다른 GPU와 비교해도 좋은 성능이었습니다. 하지만 그 후 복잡한 3D 장면에서는 정점 성능이 병목이 되었다는 것을 알고 계실겁니다.

위에서 보신 대로 MP4에서도 정점 성능은 늘어나지 않았고, 10~20만 정도의 비교적 낮은 레벨에서 한계에 부딪히고 있는 듯 합니다.

3DMark Ice Storm의 폴리곤 수는 상당한 하이폴리곤인 듯 한데, Mali-400MP4의 퍼포먼스가 나타나지 못하는 것은 그 때문이라고 생각됩니다.

픽셀 셰이더는 mediump이라 엄밀히는 데스크탑 GPU보다 연산정밀도가 떨어집니다. 다만 Tegra나 PowerVR SGX처럼 최적화를 위해 정밀도를 깎아야할 정도로 빡빡하지는 않습니다. 정점이 병목일 뿐 픽셀측은 mediump 고정이므로 그다지 손을 댈 필요는 없을 듯 합니다.

Mali-T604 이후는 통합 셰이더이므로 특성이 또 달라질 것입니다.

Tegra2/3

Mali-400MP와 같은 Discrete Shader지만, 특성은 정반대입니다. 정점에 여유가 있는 대신에 픽셀이 부족해져서, 비교적 하이폴리곤에 심플한 머티리얼일 때 퍼포먼스가 좋아지는 듯 합니다.

Mali-400MP와 마찬가지로 픽셀 정밀도는 mediump까지이지만, 복잡한 셰이더 코드에서는 lowp를 병용하여 질보다 속도를 우선해야할 경우가 생깁니다. 깊이의 해상도도 다른 GPU보다 떨어집니다.

다른 GPU보다도 대응 확장기능이 떨어지며, 하드웨어 기능도 대담하게 삭제되었습니다. 예를 들자면 깊이 텍스처를 사용할 수 없어 섀도우 맵을 컬러 맵에 써넣어야 합니다. 깊이를 압축해야하기에, 셰이더에도 추가 연산 코드가 필요합니다. OpenGL ES 2.0의 사양 상 깊이 텍스처 대응이 필수는 아니지만, 대응하지 않는 GPU는 Tegra2/3 뿐입니다.

3DMark에서는 비교적 하이폴리곤이지만 Mali-400MP 정도로 점수가 떨어지지는 않으며, GPU의 능력으로서 타당한 결과라 생각됩니다.

NVIDIA답지 않은 성능의 GPU도 아마도 이것이 마지막이 아닐까 합니다. Tegra4에서는 기능면에서도 속도면에서도 크게 손을 대어 점수가 상당히 늘어날 것이라 생각됩니다.

PowerVR SGX

이전의 기사에서도 적었듯, PowerVR SGX 5xx는 2종류가 있습니다. Android 단말에서는 낡은 Series 5(SGX540)가 많아, GPU의 성능면에서 벤치마크의 점수가 그다지 좋지 않은 듯합니다. 그 외에도 생각할 수 있는 원인이 있습니다.

PowerVR SGX는 어떤 묘화든 낭비없이 해내는 경향이 있습니다. 정점이 많은 장면이든 픽셀이 많은 장면이든 유연하게 따라갑니다.

사용 방법의 자유도도 높아 화질 우선으로 써도 되고, 속도 중시도 할 수 있고, 용도에 따라 마음대로 쓸 수 있습니다. 그 반면, 정해진 해법이 없이 상황에 맞는 판단이 요구됩니다.

예를 들자면 Uniform 수는 퍼포먼스를 생각한다면 128개 이내, 이식성이나 사용성을 위해서는 256개를 사용한다던가 하는 것입니다. (과거 기사의 comment를 참조)

또 픽셀에 highp fp32를 쓸 수 있어, 데스크탑 GPU와 동일한 정밀도로 묘화할 수 있습니다. 이 경우 퍼포먼스가 떨어지므로, 속도를 생각한다면 겉보기를 희생해서 mediump, lowp로 바꿀 수 있습니다.

다른 GPU와 달리 TBDR(타일 기반 지연 렌더링)이므로, ALU의 이용효율이 전체 퍼포먼스에 주는 영향이 큽니다.

통상의 GPU는 래스터라이저에서 픽셀 셰이더(프래그먼트 셰이더)가 호출되므로, 파이프라인 대기 사이클이 존재합니다. 래스터라이저나 깊이 테스트 등, 다른 스테이지가 막혀있을 때는 셰이더를 줄여도 속도가 크게 변화하지 않습니다.

PowerVR SGX는 지연 렌더링이므로, 픽셀 셰이더가 호출될 때에는 래스터라이저 등 다른 스테이지가 완료되어 있는 상태입니다. 셰이더의 명령을 줄이면 줄일수록 직접 퍼포먼스에 영향을 주므로 최적화가 힘들어지기 쉽습니다.

여기가 가장 Adreno와 다른 포인트로, 퍼포먼스를 우선한다면 상당히 손을 많이 써야할 필요가 있습니다. 고속화를 할 여지가 남아있다고도 할 수 있겠습니다.

첨언하자면 품질이 변할 경우 벤치마크 비교로는 올바르다 할 수 없기에, 3DMark는 비교적 높은 연산정밀도로 렌더링하고 있지 않나 생각됩니다. 만약 그렇다면 Tegra/Mali와는 달리 PowerVR의 점수는 더욱 오를 여지가 남아있게 됩니다.

iOS 판이 나오면, 어느 정도나 PowerVR SGX에 최적화되었는지 알 수 있게 될 것입니다.

결론

  • 아마도 각 GPU 별 셰이더 최적화가 그다지 강하지 않으므로, 속도가 잘 떨어지지 않는 Adreno가 유리
  • OpenGL ES 3.0 대응 최신 GPU + 신 CPU와, 한발 앞서 세대교체한 Qualcomm (Krait quad + Adreno 320)가 역시 빠름
원문

니시카와 젠지의 3D 게임 팬을 위한 차세대 PSP - GPU 강좌

"타일 기반 지연 렌더링(Tile Based Deferred Rendering"이란 무엇인가?

소니 컴퓨터 엔터테인먼트의 차세대 휴대 게임기가 될 것으로 예상되는……본 기사에서는 가칭「PSP2」라고 해두지만, 해외 사이트 등에서는 한때 「PSP2의 GPU로 SGX543MP4이 쓰인다!」고 소란스러웠던 적이 있었다.

그것이 사실인지 아닌지 확인할 방법은 없지만, 「PowerVR」이라고 하면 iPhone 3GS도「PowerVR」이니 설마?……하는 꿈이 퍼지는 것도 당연할 것이다.

GPU라고 하면 「NVIDIA인가 ATI(AMD)인가」하는 것이 요즘에, 분야는 다르다고 하지만 최근 들어 대두되고 있는 「PowerVR」에 관해서 알아보는 것도 나쁘지 않다고 생각하여, GDC 기간 중에 출전했던 「PowerVR」 개발원 Imagination Technologies Group의 부스에 찾아가 보았다. 그랬더니 다행히도 최신 「PowerVR」에 관한 기본자료를 받을 수 있었기에, 이것을 읽어보면서 「PowerVR」이 어떤 물건인지 이해해보도록 하겠다.

「PowerVR」이라고 하면, 게임 팬에게 있어 친숙한 것은 드림캐스트에 채용되었던 「PowerVR2」일 것이다. 그 시대에는 아직 텍스처를 붙이는 것과 극히 기본적인 조명처리만을 할 수 있었던 GPU로, 현재의 GPU의 모습과 비교하면 아직 많이 원시적인 모습이었다.

그럼, 최신의 「PowerVR」시리즈는 어떤 모습으로 진화해왔을까.

「PSP2」에 탑재된다는 소문이 있는 SGX543MP4의 시리즈인 「PowerVR SGX5」 시리즈를 주제로 그 속을 탐구해볼까 한다.

소문 속의 GPU는 어떤 물건?

본 기사의 대상은 주로 「PSP2(가칭)」에 탑재된다는 소문이 있는 SGX543MP4 시리즈로 하겠다.

「SGX543MP」의 MP는 멀티프로세서의 약자로, MP4는 4코어 프로세서라는 의미가 된다.

아키텍처상으로는 MP16의 16코어까지 대응할 수 있으며, NVIDIA의 SLI처럼 코어를 늘리면 늘릴 수록 퍼포먼스가 높아지는 구조로 되어있다. 각 코어는 긴밀하게 상호연대를 취하면서 병렬동작하므로, 1코어를 증가시킬 때만다 퍼포먼스가 90%는 상승한다고 한다. 멀티코어는 기수 코어에도 대응하므로 MP3같은 3코어 솔루션 등도 있다.

1코어 당 코어 면적은 2.6mm2, 16코어면 32mm2. PSP2용이라는 소문이 돌고 있는 MP4에서도 한편의 전용면적은 3mm 남짓한 것이 4개라는 극소 코어라는 이야기이다.

200MHz 동작시 4코어 당 스루풋은 초당 1억3300만 폴리곤, 초당 40억 픽셀정도라고 한다. MP4의 스펙을 과거의 PC용 GPU에 견주어보면, 픽셀 필레이트로 봐서 2003년의 NVIDIA의 울트라 하이엔드 GeForce FX 5900 Ultra(초당 36억 픽셀) 정도일까.

「SGX543」 시리즈의 대응 그래픽 API는 OpenGL/ES2.0(혹은 OpenGL/ES1.1+Extention Pack)으로, DirectX 세대로 말하자면 DirectX 9세대 프로그래머블 셰이더 3.0 사양(SM3.0)에 상당하는 포텐셜을 가진 것이 된다.

프로그래머블 셰이더 아키텍처로는 통합형 셰이더 아키텍처를 채용하고 있으며, 각 범용 셰이더 유닛은 정점 셰이더로, 혹은 픽셀 셰이더로 기용되거나 한다. 1코어 당 셰이더 유닛 수(파이프라인 수)는 4. MP4라면 4배인 16개가 된다.

PowerVR 아키텍처의 특별한 렌더링 방법이란?

「PowerVR」시리즈의 렌더링 엔진은 NVIDIA나 ATI의 GPU와는 달리, Z 버퍼를 이용하지 않는 방법을 채용하고 있다.

Z버퍼란, 가장 최근에 묘화한 (폴리곤을 구성하는) 픽셀 시점에서 본 깊이값을 기록하는 버퍼로, 폴리곤의 묘화순서가 엉망이라도, 묘화해갈 폴리곤군의 앞쪽과 안쪽의 관계성을 판별해가면서 묘화하는데 빼놓을 수 없는 구조이다.

「PowerVR」는 이 Z버퍼를 이용하지 않고 렌더링하는 것이 최대의 특징으로, 특히 이 수법을 「타일 기반 지연 렌더링(Tile Based Deferred Rednering)」(TBDR)이라고 부른다. 기본적인 개념으로서, TBDR은 반복묘화를 하지 않는다는 이점이 있다.

「타일 기반(Tile Based)」 부분은, 관리상 묘화 대상 화면을 적당한 타일(블럭)으로 분할하여 관리하는 것을 의미하며, 묘화 그 자체는 각 타일별로 1번 밖에 하지 않는다. 기본설정된 타일 사이즈는 16×16 픽셀이라고 하지만, GPU의 설정에서 바꿀 수도 있다고 한다.

그래픽 응용 프로그램(게임 엔진 등)에서 그 장면의 묘화 커맨드군이 들어오면, 그것을 해석하여 정점 셰이더 처리를 하고, 어느 폴리곤의 어느 부분이 어느 타일에 대응하는지를 산출해간다(폴리곤이 복수 타일에 걸쳐있을 경우도 있지만, 그것도 당연히 배려한다).

이때, 들어온 폴리곤이 이미 그 타일에 할당되어 있던 폴리곤보다도 안쪽에 있을 경우에는 가려졌다고 판단하여 제거한다(이미 그 타일에 할당되어 있던 폴리곤이 반투명이었을 경우에는 살아남는다).

이렇게 그 장면의 폴리곤이 모두 들어오면 묘화 페이즈로 이행된다.

묘화는 타일 단위로 병렬처리된다. GPU 코어측의 파이프라인이 복수 있으면 한번에 묘화되는 타일 수가 늘어난다……라는 이미지이다.

그럼 타일 내의, 어떤 픽셀을 그릴 때를 생각해보도록 하자.

그 픽셀에 할당되어있던 몇개인가의 폴리곤 중, 시점 방향에 대해 가장 가까운 폴리곤의 픽셀만 채택되어 픽셀 셰이더에서 픽셀 음영처리되어 묘화용으로 출력된다. 반투명이 포함된 경우에는 더욱 안쪽 방향에 있는 폴리곤의 픽셀 음영처리를 위해 다시 픽셀 셰이더가 가동되게 된다. 반투명이 포함되면 무거워지는 것은 「PowerVR」도 마찬가지인 것이다.

타일 단위로 처음 폴리곤의 할당이나 기초처리를 해버리고, 정점 단위의 조명처리는 물론 픽셀 단위의 조명까지를 나중으로(Deferred) 돌리므로 「타일 기반 지연 렌더링(Tile Based Deferred Rendering)」이라는 이름이 붙은 것이다.

「PowerVR」아키텍처의 이점은?

오른쪽 그림은 「PowerVR SGX5」시리즈의 내부 블럭 다이어그램이다.

「Vertex Data Master」는 폴리곤을 구성하는 정점 데이터를 갖춘 블럭, 「Coarse Grain Scheduler(CGS)」는 이후의 범용 셰이더 유닛 「Universal Scalable Shader Engine(USSE)」의 기용을 관리하거나 발주하거나 하는 블럭이다.

「Tiling Co-Processor」는 화면 좌표계로 변환된 폴리곤들을 타일에 할당하고, 실제 픽셀 렌더링을 위한 각종 준비를 하는 곳.

「Pixel Data Master」는 실제 픽셀 묘화를 위해 관련 데이터를 모아둔 블럭이다. 여기서 「CGS」를 거쳐 「USSE」의 범용 셰이더 유닛을 픽셀 셰이더로 기용하여 픽셀 음영처리를 한다. 「Texturing Co-Processor」는 텍스처 유닛이다. 출력된 픽셀 값은 Pixel Co-Processor에서 모아서 쓰게된다.

「TBDR」의 이점은,

  1. Z버퍼가 없어서 메모리 이용효율이 높다.
  2. Z버퍼 접근이 없으므로 버스 소비가 적다.
  3. 묘화순서를 신경쓰지 않아도 올바르게 반투명처리된다.

는 것 정도로, 1. 과 2. 에 관해서는 낮은 소비전력으로 이어진다. 이 절전성능이야말로 「PowerVR」이 요즘 휴대기기나 임베디드 기기로의 채률이 높아진 것과 연결된 원인이라고 할 수 있다.

그 대신, 일반적인 GPU 보다도 묘화가 되기 전의 계산량이 많아진다는 인상이 있다. 하지만 「메모리 접근이 많아지는 것보다는 낫다」라는 철학 하에, 「PowerVR」은 이 아키텍처를 지켜서 진화해온 것이다.

iPhone에서의 채용이 기폭제가 되어, 임베디드 기기용 GPU로서 일약 주목을 받게 된「PowerVR」. 정말로 「PSP2(가칭)」에 채용되게 될지는 모르지만, 앞으로 그 동향을 주목할 필요가 있을 듯 하다

원문

니시카와 젠지의 3D 게임 팬을 위한 그래픽스 강좌 [GDC 특별편]

NGP에 채용된 GPU의 개발원에게 듣는 PowerVR SGX543MP4+의 모든것
NGP보다도 신세대의 GPU가 빨리도 발표!?

iPhone 같은 스마트폰이나, iPad 같은 태블릿 단말에 채용되었고, 얼마 전에는 소니 컴퓨터 엔터테인먼트의 NGP(Next Generation Portable)에도 채용된 GPU라고 하면 PowerVR 시리즈다. 의외로 모르는 사람도 많은듯 하지만 인텔의 ATOM 베이스의 GMA500/GAM600이 PowerVR 기반이다. 다시 말해 PowerVR은 스마트폰이나 태블릿 만이 아니라, VAIO P나 VAIO X 같은 Windows 기반의 넷북 PC에도 채용되어 있다는 소리로, 현재 PowerVR 채용 하드웨어를 소지하고 있는 사람은 의외로 많다.

올드 게임팬에게 있어서는 「PowerVR = 드림캐스트의 GPU」라는 인식을 갖고 있는 사람도 적지 않을 것이라 생각하는데, 요즘에는 「소비전력 대 성능」중시의 하드웨어에 있어 거의 메인스트림이 되었다고 할 수 있는 GPU다.

올해의 GDC의 전시회장에서도 PowerVR 개발원인 Imagination Technologies가 부스를 출전하여, 기술쪽에 아주 자세한 PowerVR Graphics, Business Development의 Kristof Beets 씨와 Director of PR인 David Harold 씨와 인터뷰를 할 기회를 얻었기에, 그 결과 리포트를 전한다.

「TILE BASED DEFERRED RENDERING」이란 무엇인가?

NGP에 채용된 PowerVR SGX543MP4+ 만이 아니라, PowerVR 계열 GPU에서 공통적으로 이용되고 있는 기술이「TILE BASED DEFERRED RENDERING(TBDR)」이다.

상세한 내용은 「니시카와 젠지의 3D 게임 팬을 위한 차세대 PSP - GPU 강좌」에서 설명했으므로 이 것을 참조하면 알겠지만, 일반적인 GPU와는 달리 Z버퍼(심도 버퍼)를 사용하지 않고 렌더링하는 점을 특징으로 들 수 있다. 일반적인 3D 그래픽스 렌더링에서는 3D 오브젝트를 2D 공간(화면좌표계)에 사영하여, 그 2D 형태을 묘화하게 되는데, 이 때 이미 묘화된 화면을 겹쳐그리게 된다. 2D 형태으로 집어넣지만 그리려고 하는 것은 3D 세계이므로, 2D 형태에 들어갈 삼각형(폴리곤)의 전후판정을 할 필요가 있다. 이 판정에 이용되는 것이 픽셀 단위의 깊이값을 저장하는 Z버퍼의 내용이다.

다시 말해, 일반적인 3D 그래픽스 렌더링에서는 묘화할 3D 오브젝트가 늘어나면 그림이 겹쳐지게될 확률이 높아지고, Z버퍼에의 접근도 증가한다. 만약 전후판정의 결과, 그리지 않게 된다고 해도 Z버퍼 접근은 일어나므로 메모리 대역을 소비하게 된다. 메모리 대역을 소비하는 것은 소비전력의 증가로 이어진다.

그래서 TBDR에서는 묘화대상이 되는 화면을 적당한 블럭으로 나누어(TILE BASED), 각 블럭별로 이 전후관계의 판정을 먼저 처리한다. 그 후, 최종적인 조명과 셰이딩을 나중에 처리(DEFERRED RENDERING)하게 되는데, 이 처리는 전 단계의 블럭별로 GPU 코어 내에에서 병렬처리된다.

NGP에 채용된 SGX543의 예를 들자면, 각 코어에는 4기의 셰이더 유닛이 실장되어 있으며, 이것이 4코어 있으므로 각 타일의 렌더링은 4유닛×4코어=16기의 셰이더 유닛으로 병렬처리되게 된다.

앞에 나온 과거 연재기사에서는 각 블럭이 16×16 픽셀이라고 적었지만, 이에 관하여 Beets 씨는 이렇게 이야기했다. 「요즘의 PowerVR 계열 코어에서는 32×32 픽셀을 기본 블럭 사이즈로 하고 있다. 일단 조합될 비디오 메모리 용량 등이나 렌더링 해상도에 따라 블럭 사이즈를 변경가능하긴 하지만, 기본적으로 32×32 픽셀이라고 알아두면 된다」(Beets씨)

PowerVR 아키텍처를 감싼 의문

NGP에 채용된 SGX543는 “MP4” 사양으로 4코어이지만, 최대로는 MP16의 16코어까지 설정가능하게 되어 있다. 각 코어의 동작제어는 어떻게 되어있을까.

예를 들면, 몇개의 코어를 정점처리에 할당하고, 몇개의 코어를 픽셀 처리에 할당한다던가, NVIDIA의 SLI 처럼 렌더링할 프레임을 코어 별로 할당할 수 있을까.

「멀티코어 사양이 되어있을 경우에는, 완전히 하나로 통합된 하드웨어처럼 동작된다. 즉, 각 셰이더 유닛은 종류가 다른 작업(예를 들면, 정점처리 작업과 픽셀처리 작업의 조합 같은)을 동시에 담당하게 되는 경우가 있다. 각 작업에서 메모리 접근 스톨이 발생하면, 이것을 은폐하기 위해 작업 전환이 일어난다. 각 셰이더 유닛을 풀활용하기 위해서는 부하 밸런스 조정을 자동적 및 총괄적으로 처리할 필요가 있으므로, 각 코어를 용도 별로 배분하는 것은 불가능하며, 해서도 안된다.」(Beets 씨)

SGX5 시리즈는 GPGPU에도 대응한다. 예를 들어 미디어 처리나 물리 시뮬레이션 처리처럼, 명확하게 종류가 다른 GPGPU 작업이 혼재되어 있을 경우에는 어떨까.

「마찬가지다. 셰이더 유닛을 풀활용하기 위해서는 많은 종류의 작업을 실행시키는 편이 좋다. 실제로 PowerVR의 작업 스케쥴러는 설정가능하므로 기술적으로 불가능하지는 않다. 다만, 하나의 코어에 한 종류의 처리를 전담시키면 메모리 접근이 특정 장소에 집중되는 경향이 있다. 다른 종류의 작업을 섞어서 작업을 스위칭시키는 편이 메모리 접근의 인터리브 효과도 생겨나 효율이 좋다.」(Beets 씨)

또한, 멀티코어의 설정에서는 블럭 다이어그램에는 없는 상위 계층의 스케쥴러가 실장되어 있어, 여기서 각 코어에 대해 자동적으로 작업 배분을 하게 되어 있다고 한다.

NVIDIA의 SLI이나 AMD의 CrossFire 같은 단독 동작하는 GPU의 PCI-Express 버스에 달려있는 멀티 구동과는 달리, PowerVR 계열의 멀티코어의 경우에는 원칩 내에서의 멀티 구동이 되므로, 처음부터 멀티 구동을 전제로 한 논리설계가 되어 있다. 따라서, “방법”으로서는 멀티코어 GPU라기보다는 싱글코어 GPU에 가깝다고 할 수 있다.

예를 들어, 가벼운 작업을 실행하고 있을때는 1코어, 3D 그래픽스 렌더링을 처리할 때에는 4코어……라는 식으로 코어의 유효화와 무효화를 코어 단위로 제어하는 것은 가능할까?

「기술적으로는 가능하고, SoC에서 PowerVR을 집어넣을때 그런 제어를 넣는 것도 가능할 것이다. 다만, PowerVR 아키텍처는 원래 절전성능이 우수한 아키텍처이다. 예를 들어 1코어에 딱 맞는 부하의 작업이 있다고 해도, 4코어 중 1코어만 움직이게 하고 남은 3코어를 꺼두는 것과, 4코어 전체로 순식간에 끝내버리고 4코어를 휴면상태로 하는 것은 소비전력에 있어 큰 차이가 없다.」(Beets씨)

NGP에 채용된 PowerVR SGX543MP4+에 있어서 "+"의 의미는?

NGP의 GPU에 관해서 자주 오르는 화제에 「SGX543MP4+의 "+"는 무슨 의미?」라는 것이 있다.

David Harold 씨는 이 의문에 대해 이렇게 답했다.

「소니 컴퓨터 엔터테인먼트는 우리에게서 PowerVR SGX543MP4의 IP를 구입한 것으로, 실제 칩, SoC를 구성하는 것은 그들 자신이다. 그들이 우리의 IP를 어떻게 개량할지는 우리들이 알 수가 없다. 소니는 지금까지 오랫동안 게임 업계에 있어왔고, 그래픽 프로세서에 관한 노하우도 상당히 갖고 있으므로 게임 대상의 독자적인 개량이 행해질 것이다.」(Harold 씨)

참고로, 필자의 취재에 의하면 이 "+"부분에 그다지 커다란 의미는 없는 느낌이었다. 구체적으로는, 아마도 OpenGL ES 2.0 사양에는 없는 독자적인 기능을 제공하거나, 포맷 등을 지원하는 정도일 것이라 생각된다.

예를 들면, HDR 렌더링에 있어서 최신의 PC용 GPU에서는 각 채널 16비트의 부동소수점(FP16)의 64비트 버퍼가 표준적으로 사용되고 있지만, 이것은 버스폭 64비트의 SGX543 계열에서의 사용에는 적합하지 않다. 따라서, NGP 용의 SGX543MP4"+"에서는 32비트에서 나름대로 높은 다이나믹 레인지를 발휘하는 9995 버퍼같은 것이 지원된다고 한다. 각 RGB가 9비트, 5비트에는 각 RGB에 대한 공통지수항이 저장되어, 그 포맷을 텍스처만이 아니라 렌더링 타겟으로 이용할 수 있는 듯 하다.

TILE BASED DEFERRED RENDERING에 관한 의문

TBDR에 관한 의문점에서 상당히 많았던 것이 반투명 오브젝트의 렌더링에 관한 것으로, 그 중에서도 필두에 둘 수 있는 것이 「TBDR에서 반투명(및 투명) 오브젝트의 렌더링이 늦어지는 것은 어째서인가」하는 점이다.

「이것은 받아들이는 방법의 문제라고 생각한다(웃음). TBDR에서는 불투명 오브젝트(픽셀)에 관해서는 어떤 오브젝트끼리 겹쳐져도 TBDR의 은혜로 각 픽셀은 1회밖에 묘화되지 않으므로, 픽셀 음영처리(픽셀 셰이딩)은 한번만 하면 된다. 따라서 퍼포먼스는 고속이며 안정적이다. 한편, 복수의 반투명 오브젝트가 걸린 묘화의 경우, TBDR에서는 거기에 관련된 모든 픽셀의 음영처리가 쌓여, 셰이더 유닛측에서는 그것을 1회씩 처리해야 하게 된다. 결국, TBDR의 은혜를 얻을 수 없다는 것이다.」(Beets 씨)

즉, 「TBDR에서는 불투명 오브젝트 묘화에 있어서 엄청난 퍼포먼스를 얻을 수 있지」만, 「불투명 오브젝트는 TBDR의 은혜를 얻을 수 없어」서, 그 격차로 인해 이것이  「느려진다」는 인상을 주게된다……고 말하고 싶은 듯 하다.

작년의 「니시카와 젠지의 3D 게임 팬을 위한 차세대 PSP-GPU 강좌」의 마지막 부분에서 「(3)묘화순서를 신경쓰지 않아도 올바르게 반투명묘화가 처리된다」고 한 기술에 대해, 「그건 아니지 않나?」라는 질문을 받았기에, 이에 관한 질문도 던져보았다.

「반투명 오브젝트가 걸려있어도 TBDR은 제대로 처리되며 "묘화는 일반적인 렌더링 파이프라인과 같은 방법으로" 처리될 뿐이다. 반투명 오브젝트의 경우에는 깊이의 전후에 관계없이 배제되지 않으며, 눈에 보이는 오브젝트이므로, 물리적으로 올바른 반투명 묘화를 하고 싶다면 뒤쪽에서 앞으로 미리 정렬해둬야 한다.」(Beets 씨)

실제 문제점으로서, 반투명 오브젝트가 있는 장면에서는 어떠한 묘화가 적합할까.

「TBDR에서는, 반투명 오브젝트의 묘화는 불투명 오브젝트의 묘화와 동시에 처리하기보다는 명시적으로 나누어서 처리하는 편이 효율이 좋다. 구체적으로는 먼저 불투명 오브젝트를 렌더링하고 그 후에 반투명 오브젝트를 렌더링해서, 나중에 양쪽을 합성하는 수법이다. 반투명 오브젝트의 묘화에서는 뒷방향 폴리곤의 컬링이 필요없고, 깊이 정보의 전후 관계에 기초한 컬링도 의미가 없기에 불필요하기 때문이다.」(Beets 씨)

또 하나 많았던 질문이 「Z버퍼를 사용하지 않는 TBDR에서 장면의 심도정보를 샘플링하여 처리하는 SSAO(Screen Space Ambient Occlusion)같은 포스트 이펙트를 처리할 수 있는가」하는 것이다.

「렌더링 옵션에서 심도값을 출력하도록 설정하면 Z 버퍼를 얻을 수 있으므로 문제없다. 알고리즘에 따라서는, 예를 들자면 MMRT(멀티 렌더 타겟)을 이용하여 특정 버퍼에 대한 선형적인 심도값을 얻는다는 방법도 있을 것이다.」(Beets 씨)

NGP의 SGX543MP4+ 보다도 신세대의 PowerVR 6 시리즈를 발표한 Imagination Technologies

NGP에 채용된 PowerVR SGX543MP4+은 하이엔드인 Power VR SGX5XT 시리즈로 분류되는 물건이지만, 실은 이 하이엔드 시리즈의 후계가 빨리도 등장한다는 것이 밝혀졌다.

PS3에 NVIDIA의 GeForce 7800 GTX에 상당하는 코어가 채용되는 것이 발표된 후에, NVIDIA 스스로가 프로그래머블 셰이더 ㅔ대를 1세대 새롭게 한 GeForce 8800 GTX 시리즈가 발표된 것을 떠올리게 하지만, 진화가 빠른 반도체 비즈니스에서는 피할 수 없는 사태이기도 하다.

이 신 PowerVR의 코드네임은 「Rogue」라 하며, PowerVR 6 시리즈에가 될 것이라고 발표되었다.

이 PowerVR 6 시리즈는 어떤 물건이 될 것인가.

「실은 자세한 내용은 홍보전략상 당분간은 감추기로 했다(웃음). 우리 고객중 하나인 ST ERICSSON이 발표한 것이 현 상황에서 이야기 할 수 있는 것이 전부라고 생각해주길 바란다. 진화가 현저한 이 분야에 있어서, 경합중인 타 회사를 자극하는 것은 가능한 피하고 싶다(웃음). 다만, 이미 몇몇 회사가 6시리즈에 관한 계약을 맺었고, 문의도 많은 것은 사실이다.」(Harold 씨)

ST ERICSSON의 뉴스 릴리즈는 이쪽에서 읽을 수 있다.

이에 따르면 선대 PowerVR 5 시리즈에 비해 20배의 렌더링 퍼포먼스를 발휘할 수 있으며, 그 렌더링 성능은 초당 3억 5천만 폴리곤, 130억 픽셀의 필레이트라고 한다.

NGP에 채용된 SGX543MP4(+)는 초당 1억 3300만 폴리곤, 초당 40억 픽셀이라는 것을 생각하면 상당히 높은 성능이라는 것을 예측할 수 있다.

또, PowerVR 6 시리즈의 연산성능은 210GFLOPS라는 것을 발표했다. 210GFLOPS라는 것은, 모바일 PC용 GPU로 치면 GeForce GT 430나 RADEON 6450 등과 같은 정도의 성능이라는 것이 된다.

이것은 상당히 만만치 않은 퍼포먼스다.

「Rogue는 OpenGL ES 2.0의 차세대판, 코드네임 「Halti」를 지원하는 것은 확실하다. 그와 함께 DirectX 11도 지원한다. 이보다 자세한 것은 말할 수 없다.」(Harold 씨)

DirectX11의 지원……이것은 다시 말해 Rogue에서는 테셀레이션 스테이지의 탑재를 시사하고 있다는 말이다.

만에 하나, NGP가 PowerVR 6 시리즈를 채용했다고 한다면 DirectX 9 세대의 셰이더 아키텍처를 채용한 PS3 보다도 선진적인 그래픽 아키텍처를 채용하게 되었을테지만, 그것은 이루어지지 않았다.

또, 이 “내기 아까운” PowerVR 6 시리즈는 실제로는 2011년 내의 제공이 예정되어 있다. PowerVR을 갖고 있는 Imagination Technologies의 약진은 2011년에도 멈출줄을 모른다.

+ Recent posts