7월 30일부터 8월 30일까지 개최된 시그래프 2017에서 AMD의 GPU 부문인 라데온 테크놀러지 그룹은 새로운 세대의 GPU인 라데온 RX 베가에 대해 설명했습니다. 기본적인 정보는 올해 1월에 공개가 됐으나, 이번에 새로 알려진 내용도 있는데요.
지오메트리 파이프라인을 뜯어고친 프리미티브 쉐이더의 정체
베가 세대에선 새로운 쉐이더 스테이지인 프리미티브 쉐이더(Primitive Shader)가 추가됐습니다. 이번에 발표된 정보 중 가장 놀라운 것이기도 한데요. 우선 이것부터 보지요.
베가가 지원하는 다이렉트 X 12 피처 레벨. NVIDIA보다 낫다고 어필 중입니다.
다이렉트 X의 역사를 돌이켜 봅시다. 다이렉트 X 9는 버텍스 쉐이더 -> 픽셀 쉐이더의 구조였으며, 다이렉트 X 10에선 버텍스 쉐이더 -> 지오메트리 쉐이더 -> 픽셀 쉐이더로 추가됐습니다. 그리고 다이렉트 X 11에선 헐 쉐이더와 테셀레이터, 도메인 쉐이더의 3개 블럭으로 구성된 테셀레이션 스테이지가 추가됐습니다. 그래서 버텍스 쉐이더 -> (헐 쉐이더 -> 테셀레이터 -> 도메인 쉐이더) -> 지오메트리 쉐이더 -> 픽셀 쉐이더 이런 구조죠.
이렇게 보면 버텍스 쉐이더부터 지오메트리 쉐이더까지의 지오메트리 파이프 라인이 복잡하다는 걸 알 수 있습니다. 실제로 게임 개발자들도 "테셀레이션 스테이지와 지오메트리 쉐이더는 쓰기 어려우며 제 성능이 나오지 않는다"고 말하며 필요 없는 물건 취급하는경우도 있습니다. 좀 더 고급 지오메트리 처리가 필요하면 다목적인 컴퓨트 쉐이더(Cumpute Shader)에서 지오메트리 파이프라인을 구현하는 방식을 오히려 많이 쓰고 있습니다.
한마디로 프로그래머블 쉐이더 아키텍쳐의 진화가 다이렉트 X 11부터 제대로 이어지지 않는 건, 너무 복잡해진 지오메트리 파이프라인 때문이라는 거죠. 그래서 이 복잡한 지오메트리 파이프라인을 어떻게 하기 위해 AMD가 나섰습니다. 프리미티브 쉐이더로 말이죠. 버텍스 쉐이더와지오메트리 쉐이더를 다시 정의한다고 해야 할까요.
지금의 그래픽은 렌더링 백엔드에서 사용하는 다양한 특성 파라미터에 버텍스, 컬러 등을 지정하고 이를 버텍스 쉐이더에서 처리하는 일이 빈번합니다. 그리고 이 버텍스의 증감을 맡은 지오메트리 쉐이더를 추가하고, 이걸 다시 세분화한 테셀레이션 스테이지가 더해졌습니다. 또 테셀레이터로 분할됀 버텍스 처리는 테셀레이션 스테이지에서 버텍스 쉐이더와 비슷한 도메인 쉐이더의 처리가 필요합니다. 즉 파이프라인의 마지막 단계로 갈수록 버텍스 데이터와 특성 파라미터의 변수가 늘어나는 구조인 것입니다.
더 심각한 건 버텍스 유닛(폴리곤 유닛)의 데이터 구조를 픽셀로 분해해도, 라스터라이저 단계에서 화면에 그려지지 않는 폴리곤을 파기(시야 밖으로 컬링)하는 대상이 되거나, 픽셀 쉐이더에서 처리가 끝나 픽셀을 그려내는 단계가 되도 Z 버퍼 처리에 의해 '현재 시야에서 보이지 않는 픽셀'로 분류돼 파기되는 경우가 있다는 것입니다.
파이프라인 윗단계에서 처리해야 하는 데이터가 늘어났음에도 불구하고, 기껏 만들어낸 데이터를 아래 단계에서 '그거 다 필요없음'하고 엎어버리는 일이 몹시 잘 발생할 수 있는 구조. 이 문제를 해결하기 위해 프리미티브 쉐이더가 등장했습니다.
프리미티브 쉐이더를 통해 개선된 디오메트리 파이프라인. 기존의 파이프라인이 없어진 건 아니라 호환성에서 문제가 없다는 게 AMD의 주장입니다.
우선 기능적으로 중복되는 버텍스 쉐이더와 도메인 셰이더를 프리미티브 쉐이더에 통합하고, 포지션 쉐이딩(Position Shading)이라는 기능 블럭으로 묶어서 취급합니다. 도메인 쉐이더는 테셀레이터를 실행한 후의 버텍스 쉐이더 같은 역할을 하니 이렇게 정리하는 건 꽤나 합리적입니다.
그런 다음 '지오메트리 파이프라인의 최종 단계에 가까워질수록 버텍스 데이터와 관련된 속성 파라미터가 폭증'하는 걸 막기 위해 지오메트리 파이프라인의 윗단계에서 아예 컬링해버리는 기능 블럭인 프리미티브 컬링(Primitive Culling)을 둬서 불필요한 데이터를 미리 쳐냅니다.
그리고 여러 뷰포트에 투영하는 지오메트리 쉐이더의 특수한 지오메트리 파이프라인 기능은 속성 쉐이딩(Attribute Shading)이라는 기능 블럭이 담당합니다. 이렇게 3개 블럭으로 구성된 프리미티브 쉐이더가 새로운 쉐이더 스테이지를 담당하는 프로그래머블 쉐이더가 됩니다.
이게 다가 아닙니다. 기존의 지오메트리 파이프라인 뒤쪽에 위치해 지오메트리 쉐이더와 일부 기능이 겹치던 테셀레이션 스테이지는 가장 위에 재배치하고, 버텍스 분할을 맡은 테셀레이터를 제어하는 헐 쉐이더와 함께 묶어서 서피스 쉐이딩(Surface Shading)이라는 기능 블럭으로 재구성했습니다. 전체적으로 보면 되는대로 갖다 붙였던 지오메트리 파이프라인을 리모델링해 효율적인 구조로 바뀌었습니다.
또한 베가의 새로운 지오메트리 파이프라인은 기존 애플리케이션과의 호환성을 확보하기 위해 기존의 지오메트리 파이프라인을 사용할 수 있습니다. 이 말을 알기 쉽게 바꾸면 기존의 다이렉트 X 11과 다이렉트 X 12 지원 애플리케이션을 사용하는 한, 프리미티브 쉐이더를 추가한 효과는 거의 없습니다. 거기에 새로운 지오메트리 파이프라인을 어떻게 쓸 수 있을지는 미정이며, 구체적인 데모도 공개되지 않았습니다.
그래서인지 라데온 테크놀러지 그룹은 실제 애플리케이션에서 성능 비교가 아니라, 자신들이 개발한 테스트용 애플리케이션을 사용해서 비교 결과를 공개했습니다. 위 그래프는 불필요한 폴리곤을 파기하는 효율을 나타낸 것이며, NGG는 Next Generation Geometry를 의미합니다.
라데온 테크놀러지 그룹은 다이렉트 X 규격을 총괄한 마이크로소프트와, OpenGL과 벌칸 규격을 책정하는 크로노스 그룹과 함께, 새로운 지오메트리 파이프라인의 사용 방법에 대해 협의해 나갈 것이라고 합니다. 그래서 당분간은 새로운 지오메트리 파이프라인의 모든 기능을 개발자에게 개방하는 게 아니라, '기존의 애플리케이션을 실행했을 때 컴파일러나 드라이버 소프트웨어 수준에서 새로운 지오메트리 파이프라인을 적용해 자동으로 최적화'하는 식으로 접근해 나갈 것이라고 하네요.
돌이켜보면 이러한 접근 방식은 프로그래머블 셰이더 이전의 아키텍처였던 다이렉트 X 7에서 프로그래머블 쉐이더 아키텍처인 다이렉트 X 8과 9로 건너올 때도 있었던 일입니다. 그때는 다이렉트 X 7의 표준 고정 파이프라인 기능을 프로그래머블 쉐이더 아키텍처로 재현(에뮬레이션)해 고정 기능 파이프라인으로 쓰자는 아이디어가 실용화됐습니다.
이런 자동 최적화는 제대로 작동했을 때 효과가 크지만, 그렇지 않은 경우는 호환성에서 문제가 일어나기에 양날의 검이기도 합니다. AMD는 PS와 Xbox에 GPU를 제공하고 있으니, 차세대 PS와 Xbox이 프리미티브 쉐이더를 채택하도록 움직일 가능성도 있습니다.
더욱 자세한 정보가 밝혀진 HBCC의 움직임
이미 알려진대로 GCN(Graphics Core Next) 아키텍처를 기반으로 한 라데온 RX 베가는, 그래픽 메모리를 'GPU의 로컬 메모리'가 아니라 캐시 메모리를 취급합니다. 이렇게 하면 몇십GB에서 몇TB 수준의 대용량 데이터를 GPU 프로그램에서 간단하게 주소를 지정하고 액세스할 수 있습니다. 라데온 RX 베가는 최대 512TB의 넓은 영역을 가상 메모리로 취급할 수 있습니다.
이 가상 메모리에 액세스하는 것이 기존 GPU의 메모리 컨트롤러에 해당되는 HBCC(High-Bandwidth Cache Controller)입니다. 일단 활성화된 가상 메모리 어드레스는 49비트.
AMD 라데온 테크놀러지 그룹에서 GPU 아키텍처 개발을 이끄는 Mike Mantor(Graphics and Parallel Compute Architect and Corporate Fellow)는 베가 세대의 GPU가 모두 HBCC을 채용한다고 밝혔습니다. 즉 라데온 RX 베가, 워크스테이션용 GPU, 앞으로 나올 노트북용 베가, 차세대 APU인 라이젠 모바일에 통합된 베가의 메모리 스펙은 모두 같다는 것입니다.
라데온 RX 베가와 라데온 프로는 HBM2(High Bandwidth Memory 2)를 캐시 메모리로 씁니다. 그럼 노트북용 베가와 APU 베가도 HBM2냐, 그건 또 아니라네요. HBCC는 GDDR5과 결합될 수도 있어, HBM2를 쓰기 어려운 플랫폼에선 다른 메모리와 조합돼 나올 가능성이 매우 큽니다.
HBCC는 기본적으로 자율 동작하는 존재로서, 이용 빈도가 높은 데이터 영역을 로컬 메모리(사실상 그래픽 메모리. 라데온 RX 베의 경우엔 HBM2)에 배치하고, 많이 쓰지 않는 데이터 영역은 시스템 메모리(CPU와 공유하는 메인 메모리)로 스왑합니다. 물론 이 스왑은 따로 명령을 내리는 것이 아니라 스스로 수행합니다.
이러한 스왑은 페이지 크기를 단위로 삼아 이루어집니다. 그럼 페이지 크기는 얼마냐, 이건 정해진 것이 아니라고 하네요. 기본은 64KB지만.
또 캐시 메모리는 인클루시브(Inclusive)와 익스클루시브(Exclusive) 모드를 프로그래머블로 전환 가능합니다. 인클루시브와 익스클루시브는 CPU 캐시에서 나온 개념이니 다들 알고 계시겠지만 간단히 설명을 하고 넘어가자면.
인클루시브 모드는 로컬 메모리와 시스템 메모리에 같은 데이터가 저장됩니다. 로컬 메모리로 스왑해도 시스템 메모리에 같은 데이터가 남아 있습니다.
반면 익스클루시브 모드는 로컬 메모리 시스템 메모리에서 스왑할 때 시스템 메모리의 데이터 영역을 개방합니다.
메모리 이용 효율만 보면 익스클루시브 모드가 우수합니다. 반면 인클루시브 모드는 데이터가 중복되나 데이터 영역을 스왑할 때 버스 대역폭 소비와 지연을 줄일 수 있다는 장점이 있습니다. 그래서 인클루시브 모드가 더 빠릅니다. 그래서 실시간 성능이 중요한 게임 그래픽에선 인클루시브 모드가 많이 쓰이지만, 머신 러닝이나 오프라인 렌더링처럼 대규모 데이터 세트를 처리할때는 인클루시브 모드가 우수합니다. 그래서 이들 캐시 모드를 전환할 수 있게 한 것입니다.
이러한 스왑 인, 스왑 아웃 컨트롤은 시스템 메모리 외에도 2TB NVRAM(SSD)를 탑재한 라데온 프로 SSG에서도 수행된다고 합니다. 다만 아직까지는 라데온 프로 SSG용 API에서 GPU 프로그램으로 관리한다고 하네요. 이 부분은 하드웨어 아키텍처와 소프트웨어 아키텍처(API 설계)가 아직 완성되지 않았을 가능성이 높습니다. AMD가 HBCC를 완벽하게 만들려면 시간이 좀 더 필요할 것입니다.
명령어 세트를 새로이 한 신세대 컴퓨트 유닛
GCN 아키텍처의 GPU는 1클럭에 16개의 32비트 단정밀도 부동 소수점(FP32) 연산을 할 수 있는 SIMD-16 벡터 연산기를 4개 묶어 컴퓨트 유닛으로 다룹니다. 1월에는 베가의 컴퓨트 유닛이 반정밀도 부동소수점(FP16)과 8비트 점수(INT8)의 Packed 실행을 지원한다는 것까지 알려졌었는데, 이번엔 더욱 자세한 정보가 공개됐습니다.
차세대 컴퓨트 유닛은 Next-Generation Compute Unit이라고 부릅니다. 줄여서 베가 NCU, 그냥 NCU라고도 부릅니다.
베가 이전 세대의 GPU에서 FP16은 'FP32의 절반 크기니 레지스터 사용량이 FP32의 절반'이라는 것밖에 장점이 없었습니다. 하지만 베가에선 연산 실행 효율이 FP32의 2배가 됐습니다. 또한 연산 정밀도는 IEEE 754-2008를 준수해 신뢰성과 호환성을 확보했습니다.
32비트 레지스터에 넣은 2개의 16비트 데이터(이런 데이터를 Packed Data라 부름). 연산 효율이 2배가 됩니다.
게임 엔진이나 그래픽 렌더러는 취급하는 내용에 따라 FP16이나 FP32 중 하나를 기준으로 잡아 설계하는 경우가 많습니다. 애시당초 'FP16과 FP32를 자유롭게 변환해 취급'한다는 발상이 GPU 프로그래밍에서는 일반적이지 않았지요. 그래서 FP16를 효과적으로 처리하기 위해선 FP16과 FP32 사이에서 유연하고 높은 자유도로 변환이 가능해야 합니다. 그래서 AMD는 여기의 명령어 세트도 확충했습니다.
텍스처 유닛 샘플러는 데이터를 읽고 쓰는 대상이 32비트여도 16비트 Packed를 원활하게 액세스할 수 있습니다. 또한 부동소수점 연산처럼 이용 빈도가 높은 일부 명령은 FP16와 FP32을 섞어 직접 실행할 수 있는 유연성도 갖췄습니다. 이들 확장은 FP16 외에도 16비트 정수(int16)에서도 쓸 수 있습니다.
16비트 데이터를 취급하는 명령어 세트를 보강
이렇게 함으로서 데이터 처리 정밀도가 32비트씩이나 필요하지 않은 작업을 16비트로 낮출 수 있게 됩니다. 그래픽 품질에 거의 영향을 주지 않고 성능을 향상시킬 수 있는 방법이라고 하네요.
32비트 데이터 세트를 16비트로 줄여서 성능이 얼마나 향상되는지를 알아보기 위해 3D마크 Serra를 소개했습니다. VRMark의 CyanRoom과 비슷해 보이는 프로그램인데 아직 정식 발표된 건 아니죠. 어쨌건 여기서 중요한 건 FP16의 Packed 실행으로 성능 향상 효과를 보려면 애플리케이션이나 게임 엔진 수준에서 지원이 필요하다는 거.
Next Generation Compute Unit에서는 16비트 외에 다른 명령어 세트도 확충했습니다.
모션 감지에 쓰이는 QSAD 명령과 MQSAD 명령은 8 × 8 블럭 (1 블록에 8비트)도 지원합니다. 8비트 512개(512바이트)를 한번에 처리할 수 있는 대규모 명령 세트도 추가됐습니다.
4K 120Hz의 듀얼 디스플레이를 지원. 한쪽 눈에 4K 해상도를 제공하는 VR HMD
AMD는 폴라리스 아키텍처때 디스플레이포트 1.4와 HDMI 2.0을 추가했는데, 베가에선 디스플레이 엔진을 더욱 개량했습니다. 4K 60Hz 6화면 출력이 가능한 아이피니티(Eyefinity)를 지원한다는 점은 폴라리스와 같으나, 베가는 4K 120Hz 2화면 출력도 가능합니다. 이것은 앞으로 나올 4K + 4K 해상도의 VR HMD를 겨냥한 것입니다.
8K 30Hz의 3화면 출력도 지원합니다. 4K 60Hz와 4K 120Hz 출력에선 YUV12비트와 RGB가 모두 16비트 HDR(High Dynamic Range)을 쓸 수 있습니다. 아직까지는 이 기능을 쓸 수 있는 디스플레이가 없으니 먼 미래의 기술이라고 해야 되겠으나, 지난 몇 년 동안 HDMI 2.0 지원 추가가 정말 늦었던 거에 대한 반성일지도 모르겠습니다.
HDCP 2.2의 지원도 어필했습니다. 울트라 HD 블루레이를 비롯한 4K 컨텐츠를 재생할 수 있게 되었음을 의미합니다.
또 베가의 레지스터 시스템은 라데온 테크눌러지 그룹 뿐만 아니라 젠 아키텍처 개발팀과 협업한 결과이며.
GPU의 가상화에선 VCE(Video Coding Engine)과 UVD(Unified Video Decoder)도 가상화를 지원해, 가상화 시간과 동작 안정성이 향상됐습니다.
기존 GPU에선 부하가 높을 때 클럭이 떨어졌지만, 베가는 회로 디자인을 개선해 1.7GHz까지 오버클럭이 가능합니다.
Draw Stream Binning Rasterizer(DSBR)
최신 저전력 설계를 채택. 자세한 설명은 없음.
라데온 RX 베가는 어디로 가는가
CPU에서 AMD는 라이젠과 에픽으로 인텔과 정면 승부를 벌이고 있습니다. 다만 CPU는 x86/x64 아키텍처가 이미 갈때까지 갔으니 성능 향상과 개선할만한 여지가 많지 않습니다. 다만 GPU는 이제야 겨우 가상화와 가상 메모리의 개념이 도입되는 수준입니다. 그런 의미에서 베가 아키텍처는 20년 동안 조금씩 진화해온 GPU 아키텍처를 소프트웨어 입장에서 혁신하자는 AMD의 자세가 엿보이는 설계입니다.
NVIDIA를 이길 수 있는 높은 성능을 제공하기 어렵다고 판단해서일지는 알 수 없으나, 지오메트리 파이프라인의 정리, HBCC를 기반으로 한 가상 메모리 아키텍처 지원은 GPU 업계에서 누군가 나서야 할 중장기적인 과제입니다. 이걸 AMD가 먼저 착수했다는 데 베가의 의미가 있습니다.
사실 AMD는 지금까지도 이렇게 '모두를 위한 노력'을 여러번 했습니다. x86 아키텍처의 호환성을 유지하며 64비트를 지원하는 x64는 AMD의 AMD64가 기반이며, 다이렉트 X 11에서 표준으로 추가된 테셀레이션은 AMD가 Xbox 360용 GPU인 Xenon을 개발한 것이 기반입니다. 고성능 고효율을 목표로 한 그래픽 API인 다이렉트 X 12는 AMD의 맨틀과 관련이 있으며, 벌칸은 그냥 맨틀 그 자체입니다.
시그래프 2017에서 AMD는 무료 레이 트레이싱 엔진인 라데온 프로 렌더러를 공개했습니다. 이 엔진은 OpenCL 1.2 기반이며 라데온 전용이 아닙니다. 그래서 하이엔드 지포스에서 구동 시 라데온 RX 베가보다 더 빠르다는 이야기도 나올 정도입니다. 허나 NVIDIA의 레이 트레이싱 엔진인 OptiX가 CUDA 기반이라 NVIDIA GPU에서만 작동하는 것가 달리, AMD는 업계 전체의 향상과 표준을 공급한다는 인상을 주고 있습니다.
라데온 RX 베가 역시 아키텍처의 구현과 설계를 보면 업계 전체의 발전을 위한 제품이라는 느낌이 듭니다. 물론 이게 잘 팔릴지는 다른 문제겠지요. 어쨌건 GPU 역사에 이름을 남기기엔 충분한 제품입니다. 상업적으로 성공할지는 두고 봅시다.
속도는 약간(?) 빠지는 정도인데.. 쭉 읽어보니.. 기준을 속도가 아니라..
품질쪽에 맞추고 설계를 한 것 같다는 느낌입니다.
게임보다는 영화쪽에 더 신경을 쓰겠다는 걸까요..? 영화지원 부서를 만들었다는 기사도 있고..