벤치리뷰·뉴스·정보/아키텍처·정보분석

Haswell과 Broadwell, DirectX 12관련의 중요한 차이가 있다

tware 2015. 5. 2. 12:32

 

 

Andrew Lauritzen 씨 (Graphics Software Engineer, Intel)

 

 

Michael Apodaca 씨 (Graphics Software Architect, Intel)

 

 Intel은 최근 게임 개발자에 대한 어필의 장으로서 Game Developers Conference (이하 GDC)를 중시하는것 같고, GDC 2015에서도 다수의 강연을 했다. 이미 GDC 2015의 보고서로 전달하고 있는 것도 있지만, 본고에서는 그런 Intel의 강연 속에서 DirectX 12와 자사의 통합 그래픽 기능 (이하, iGPU integrated GPU = 내장 GPU)에 관한 "Efficient Rendering with DirectX 12 on Intel Graphics"(Intel의 iGPU를 이용한 DirectX 12의 효과적인 렌더링)을 리포트 한다. 세션을 담당한 것은 Intel에서 그래픽 소프트웨어 엔지니어를 맡고있는 Andrew Lauritzen 씨와 그래픽 소프트웨어 설계를 맡은 Michael Apodaca 씨 2명이다. 또한 본고에서 취급하는 "DirectX 12"는 사실상 "Direct3D 12"인 것이지만, 두 사람은 DirectX 12라고 부르고 있었으므로 본고도 거기에 따른다. 이 점은 미리 예고한다. (그래픽 부분이 Direct 3D, 그외 사운드나, 입출력 장치 부분들을 다 합쳐서 DirectX. 그런데 거의 사실 이거 잘 구분을 안하죠. 그냥 그래픽 말하면서 DirectX 라고 하면 Direct 3D 말하는 것.)

 

 

DirectX 12 세대에서는 CPU의 이용 효율이 오른다.
Intel의 iGPU의 성능이 향상!?

 

강연에서 Intel이 먼저 말한 DirectX 12 세대가 되면 기존보다 CPU를 효율적으로 이용할 수 있게 된다는 것이다. 이것은 간단하게 말하면 "DirectX 12에서는 멀티 스레드 처리 효율을 높이고 있다"는 것이다. 예를 들어, DirectX 11이라면 GPU에 대한 명령 버퍼는 하나만 있었다. 그 하나밖에 없는 버퍼에 어플리케이션 측으로 부터 명령을 쌓아 가고, GPU에 실행하는 형태이다.

 

DirectX 11은 "명령 버퍼에 GPU의 명령을 쌓아두면 그래픽 드라이버가 그것을 DMA 버퍼에 전송해 GPU에서 실행시키는 "구조로 작동

 이 방식이라면 명령을 작성하는 처리의 병렬화에 다양한 제한이 생긴다. 그래서 DirectX 11에서는 여러 렌더링 컨텍스트를 생성하고 각각을 별도의 쓰레드에서 처리 할 수 있는 구조가 도입되었다. 메인 스레드에서 메인 컨텍스트인 "Immediate Context "를, 하위 스레드는 서브 컨텍스트가 되는 "Deferred Context"를 처리하는 것이다 ( 관련 기사 ) .
 "단지, 지연 컨텍스트도"버퍼가 하나 밖에 없어"제약을 받는다. 그만큼 CPU를 효율적으로 사용할 수 없다"(Lauritzen 씨).

 

 

"캐시의 관계로 CPU의 성능을 살릴 수 없다"등 지연 컨텍스트에 여러 가지 문제가 있어,라는 슬라이드

 

 DirectX 12에서는 이 부분이 크게 달라진다. 구체적으로는, thread마다 명령 버퍼를 갖게되는 것이다. 그러면 DirectX 11 환경에 제한은 완화되어 CPU의 잠재력을 더 살릴 수 있게 된다 Lauritzen 씨는 말했다.

 

 

DirectX 12에서는 스레드마다 명령 버퍼를 가질 수 있어,

DirectX 11에 있었던 문제가 해결

 


 그러면 iGPU의 DirectX 12의 효과는 어떻게 되는 것인가? 아래에 나타낸 그래프는 왼쪽이 "같은 성능을 얻는데 필요한 전력의 차이", 오른쪽이 "동일한 전력으로 얻을 수 있는 성능의 차이"를 나타낸 것으로 모두 왼쪽 절반이 DirectX 11 오른쪽이 DirectX 12 기반 것이다. 파랑이 CPU의 소비 전력, 빨강이 iGPU의 소비 전력. 세로축이 CPU와 iGPU의 총 소비 전력량으로 가로축은 경과 시간이 된다.

 

여기에 사용되고 있는 것은 Haswell 기반 5세대 Core 프로세서지만(CPU 브랜드로 하스웰은 4세대,브로드웰 5세대,스카이레크 6세대), 왼쪽의 그래프를 보면, DirectX 11에 비해 DirectX 12에서는 CPU의 소비 전력이 크게 감소되는 것을 알 수 있다. 또 오른쪽의 그래프를 보면 총 소비 전력은 거의 같지만, DirectX 12에서는 CPU의 소비 전력이 낮아져 그만큼 iGPU가 전력을 소비 할 수 있는 (= 더 높은 동작 클럭으로 구동 가능) 것이 확인된다. CPU의 작동 효율이 향상되고 소비 전력이 낮아져, 그만큼 iGPU를 구동시키기 위한 여유가 생겨나는 것이다.

 

DirectX 12의 효과를 나타낸 슬라이드

(왼쪽 저전력@같은 성능, 오른쪽 고성능@같은 전력)

 

 

SIGGRAPH 2014 동영상 (서피스 프로 3는 CPU가 하스웰)

 

 

 

DX12의 장점을 보여주기 위해 인텔과 협력

 

 

 

다이렉트x 11에서 12로 전환. 전력 감소 (같은 프레임)

 

 

DX11 프레임

 

 

 

DX12 프레임

 


Haswell과 Broadwell, 가장 큰 차이점은 메모리 관리 방법

 

 덧붙여서, 지금 소개한 내용은 기본적으로 SIGGRAPH 2014의 시점에서 발표되었다. ( 관련 기사 ). 2014년 8월 시점에서 이미 DirectX 12에 대응 상당한 부분까지 진행했다는 것이다. 사실, Intel은 이미 iGPU 용 β 버전의 DirectX 12 지원 그래픽 드라이버를 제공 중이다. 현재 Haswell 세대 및 Broadwell 세대의 iGPU를 지원하고 있다.

 

 단, Broadwell와 Haswell에서는 DirectX 12 지원 방법에 명확한 차이가 있는 것 같다. 그것을 말한 것이 세션 후반에서 메모리 관리에 관한 화제로 옮겼진 때였다.

 

 DirectX 11에서는 WDDM (Windows Display Driver Model) 1.x 세대의 메모리 관리 방식을 채택하고 있다. 간단하게 정리하면 그래픽 메모리는 "고정 된 자원"이 있고, 그 자원을 그래픽 드라이버가 관리하고 있다는 이미지다.

 

응용 프로그램은 그래픽 메모리를 사용할 때에 DirectX 11 API를 통해 "이것은 텍스처입니다"라는 식으로 일일이 선언하거나 정의하고 메모리를 사용하게 할 수 밖에 없었다. 응용 프로그램이 자유롭게 그래픽 메모리를 사용할 수 없었다 로 바꿔 말해도 좋다.  

 

그에 비해 DirectX 12에서는 그래픽 메모리를 응용 프로그램에서 자유롭게 이용할 수있게 된다. 왜냐하면 DirectX 12에서는 메모리 관리법이 WDDM 2.0 기반이 되어, 그래픽 메모리 관리 방식도 일신하기 때문이다.

 

 그래픽 메모리는 가상 메모리로 다루게 되고, 응용 프로그램은 GPU의 가상 메모리 주소 (GPU Virtual Address)를 사용해 CPU가 가상 메모리 주소를 사용해 메인 메모리에 액세스하는 것 같은 감각으로 그래픽 메모리에 액세스 할 수 있게 되는 것이다. 일일이 드라이버에 "방문"을 세우고 있었던 DirectX 11과 비교하면 그래픽 메모리 사용의 자유도가 크게 오르게 된다.

 

 

WDDM 2.0은 GPU Virtual Address (GPU 가상 메모리 주소)에 따라

CPU의 메인 메모리에 가까운 취급이 가능해진다

 


 여기서 주의가 필요한 것은 Haswell로, Haswell 세대의 iGPU는 가상 메모리 주소의 이용에 제한이 있다고 한다. iGPU는 가상 메모리를 관리하기 위해 GPU의 메모리 페이지 테이블을 가지고 있는데, " GPU 메모리 페이지 테이블과 CPU의 메모리 페이지 테이블을 동기화 하는 구조가 Haswell 세대에는 없다 "(Apodaca 씨)라고 한다. 이것이 제한을 낳게 된다는 것이다.

 

 

Haswell 세대의 iGPU에도 GPU용 메모리 페이지 테이블이 있지만, 그 이용에 제한이 있다.

 

 어떤 제한인가 하면 복잡한 이야기​​가 되는데, 최대한 간단하게 요약하면, "Haswell 세대의 iGPU 에서는 CPU 사이에서 가상 메모리 주소의 제휴를 할 수 없다"가 된다. iGPU에 할당된 메모리 자원의 범위에서만 가상 메모리를 사용할 수 밖에 없는 것이다.

 

 

Haswell의 iGPU의 가상 메모리 주소 부분의 제한. 제한된 범위의 메모리만을 다룰 수 있고 응용 프로그램이 그래픽 메모리를 요구해도 실패하는 것이 존재 함

 

 

그런 점에서 Broadwell 세대의 iGPU가 제한은 없다. 즉, " CPU와 GPU의 가상 메모리를 동기화시키는 구조 "가 Broadwell 세대의 프로세서에 통합되어 있는 것이다.

 

 

Broadwell 세대의 GPU 가상 메모리는 CPU의 가상 메모리와 같은 정도로 자유롭게 사용가능해 진다는 것. 그러나 동작하는 그래픽 드라이버는 아직 되어 있지 않다고 한다

 "Haswell 세대와 Broadwell 세대의 iGPU는 메모리 관리 구조에 차이가 있다 "는 것이 최종 사용자에게 어떤 차이를 가져오는지는 세션의 테마가 아니었고 말도 없었지만, DirectX 12을 지원 한다는 점에서 표면적인 차이는 생기지 않을 것이다. 단지, Haswell 세대라면 메모리 자원의 해방과 확보가 자주 발생하고, 그것이 성능면에서 오버 헤드가 되어 Broadwell 세대 대비 성능이 저하된다 라는 것은 발생할 가능성으로 있을 수 있다.

 

 Broadwell 세대의 iGPU가 가진 잠재력을 끌어낼 그래픽 드라이버는 개발중인 것으로, 현시점에서는 아직 비교할 수 없지만, Windows 10과 DirectX 12 세대의 게임 타이틀이 모두 나온 때에는 "Haswell과 Broadwell의 iGPU 사양의 큰 차이 "가 다시 화제가 될지도 모른다. (참고로 아이비브릿지는 7세대 그래픽, 하스웰은 7.5세대 그래픽, 브로드웰은 8세대 그래픽 아키텍처)

 

[분석정보] GDC 2014 미국 MS DirectX 12를 발표

 

 

[분석정보] 인텔 데스크탑 eDRAM 버전을 포함한 브로드웰 패밀리 설명

 

 

[정보분석] CPU와 GPU의 메모리 공간을 통일하는 AMD의 hUMA 아키텍처

 

 

[분석정보] 라라비 (Larrabee)의 비장의 카드 공유 가상 메모리

 

 

[분석정보] GDC 2014 OpenGL 드라이버 오버헤드는 맨틀과 싸울 수준

 

 

[분석정보] GPU의 진화에 대응한 Microsoft의 차세대 API DirectX 12의 배경

 

 

[분석정보] AMD 독자 그래픽스 API Mantle

 

 

Khronos, 신세대 그래픽스 API Vulkan을 정식 발표

 

 

[리뷰벤치] Directx 12 드로우콜 CPU 성능

 

 

MS build Directx 12 관련 동영상

 

 

[분석정보] AMD Kaveri의 메모리 아키텍처와 향후의 APU 진화

 

 

[분석정보] GDC 2016 Unreal Engine 4를 통합형 그래픽 기능으로 움직이다