닌텐도 스위치에 제공되는 그래픽 API 벌칸
NVIDIA가 주최하는 GPU 컴퓨팅 컨퍼런스 GTC(GPU Technology Conference) 2017이 미국 산호세에서 개막했습니다. GTC는 5월 8일~ 5월 11일에 걸쳐 개최됐으며, 컴퓨팅 위주로 진행됐으네 그래픽 계열 세션도 어느 정도 포함됐습니다.
이번 GTC 2017에서는 그래픽 API의 개발 단체인 Khronos Group이 API 군의 동향에 대해 해설했습니다. Khronos는 2월의 GDC (Game Developers Conference)에서 자신들의 그래픽 API인 벌칸을 닌텐도 스위치가 지원한다고 분명히 밝혔습니다.
닌텐도 스위치의 그래픽 API는 NVIDIA 전용으로 개발한 새로운 API NVN을 제공합니다. NVIDIA는 NVN 뿐만 아니라 툴과 라이브러리 등을 제공하고 있습니다. 또한 Khronos 그룹의 하이레벨 API인 OpenGL ES을 제공합니다.
Khronos의 그래픽 API는 OpenGL ES가 있는데 하드웨어 추상화가 간편하지만 하드웨어의 성능을 끌어 어려운 하이레벨 API입니다. 반면 벌칸은 하드웨어 추상화로 프로그램하기 어렵지만 성능을 끌어올리기 쉬운 로우레벨 API입니다. 벌칸의 원래 개발 이념은 게임기의 그래픽 API와 같은 로우레벨 API를 크로스 플랫폼으로 제공하는 것입니다. 그것이 왜 게임기인 닌텐도 스위치에 제공되는 것일까요?
Khronos의 Neil Trevett(Vice President Developer Ecosystem, NVIDIA / President, Khronos Group)는 다음과 같이 설명합니다. "닌텐도 스위치는 3개의 API를 지원합니다. NVIDIA가 개발한 NVN과 OpenGL ES, 그리고 벌칸입니다. 제각각 하드웨어 추상화가 다릅니다 .NVIDIA API는 벌칸과 OpenGL ES의 중간에 해당합니다 .NVIDIA API는 벌칸과 비슷하지만 벌칸이 더 로우 레벨인데, 개발자의 다양한 요구에 대응하기 위해서입니다."
보통의 게임 개발용으론 NVN. 애플리케이션 개발에서 쉽게 그래픽 기능을 사용하려면 OpenGL ES. 레지스터 레벨에서 GPU를 주로 다루려면 벌칸을 쓰는 것입니다. 그러나 게임 개발자에 따르면 원래 개발 키트에서 벌칸은 제공하지 않았던 것 같습니다.
가상 현실의 표준 API OpenXR
벌칸에선 멀티 GPU와 VR의 지원도 발표했습니다. 여기서 까다로운 건 Khronos가 가상 현실(VR)을 위한 크로스 플랫폼 API OpenXR도 발표했다는 것입니다.
"벌칸에서 VR 지원과 OpenXR이 커버하는 영역이 다릅니다 .VR에 대응하는 렌더링 API는 벌칸입니다. 그러나 렌더링을 제외한 점에서는 의문이 있어서 OpenXR이 나왔습니다 .OpenXR가 VR을 모두 커버하고 벌칸을 대체하진 않습니다."
센서 추적 및 디바이스 디스커버리, 디바이스 이벤트 등 렌더링 이외의 VR을 모두 커버하는 API가 OpenXR입니다. 일반적으로 머리의 움직임을 추적하고 눈과 손의 움직임까지 추적합니다. 그 센서 데이터를 정밀하게 다뤄 추상화합니다.
"다른 종류의 추적도 OpenXR에서 호환되도록 처리하고 싶습니다. 매우 유연하고 확장성이 풍부한 API를 만들고 싶습니다. 앞으로는 생각까지도 추적할 수 있는 확장성을 갖고 싶습니다(웃음)."
OpenXR의 목적은 현재 VR 시장을 타파하는 데 있습니다. 현재는 VR 응용 프로그램을 각각의 VR 디바이스를 통해 개발해야 합니다. 그럼 장치마다 시장에 나뉘어져 호환성이 낮습니다. OpenXR의 목적은 VR 애플리케이션이 어떤 VR 디바이스에건 실행되도록 하는 것입니다. 그 경우 장치마다 다른 추적 기술을 추상화하는 것이 필수적입니다.
이 목표를 위해 OpenXR은 디바이스마다 2층의 API 구조를 썼습니다. 각 회사의 플랫폼 런타임에 애플리케이션이 액세스할 수 있는 애플리케이션 인터페이스, 그리고 각 회사의 런타임이 디바이스에 액세스하기 위한 드라이버 계층. 애플리케이션 측면에서 공통 API로 다른 VR 시스템의 런타임에 액세스할 수 있도록 합니다. 또 드라이버에서 디바이스를 통합할 수 있도록 합니다.
OpenXR에는 Oculus, Steam VR, OSVR, Gear VR, Daydream 같은 VR 업체가 지원 의사를 밝히고 있습니다. 이게 가능한 건 OpenXR가 각각의 회사가 사용하는 API와 병존하기 때문입니다. 각 VR 업체에서는 자사의 VR 런타임을 확장하여 자사 전용 API뿐만 아니라 OpenXR도 지원하도록 할 수 있습니다. 자사 API 애플리케이션을 그대로 지속하면서 OpenXR을 사용해 이식한 애플리케이션을 늘릴 수 있습니다.
또한 OpenXR는 OpenGL과 마찬가지로 제조사가 확장하는 것이 가능합니다. 제조사가 드라이버 계층에서 확장해 새로운 기술을 도입하기가 쉽습니다. 이러한 허용 정책에 따라 OpenXR을 자연스럽게 VR 크로스 플랫폼 표준으로 가져가려 합니다.
현재 Khronos API 책정은 12~18개월 정도 걸립니다. OpenXR의 경우 2016년 12월에 공개된 GDC에서 이름과 정책이 발표되었습니다.
신경망에 대한 대응을 서두르는 Khronos
Khronos는 병렬 컴퓨팅을위한 언어로 OpenCL을 책정하고 있습니다. 이번 GTC는 컴퓨팅의 OpenCL, 그래픽의 벌칸을 융합하는 OpenCL-V 로드맵을 공개했습니다. 벌칸 런타임을 확장해 OpenCL을 그 위에 실행하는 방향입니다. 또한 딥 러닝의 지원을 위해 OpenCL에서 낮은 정밀도의 연산을 지원할 것이라고 합니다.
딥 러닝에서 Khronos는 컴퓨터 비전의 크로스 플랫폼 API OpenVX을 발전시킵니다. OpenVX는 NVIDIA가 주력하는 GTC의 주제 인 딥 러닝과 깊은 관련이 있습니다. OpenVX에 대해선 나중에 소개하며, Khronos가 NNEF라는 포맷을 밝힌 것이 재밌는 점입니다.
NNEF은 신경망 모델의 교환 포맷 표준입니다. 다른 디바이스와 신경망 파일을 교환 할 수 있도록 해줍니다.
"NNEF는 API 대신 데이터 교환 형식입니다. 현재는 각각 독립된 신경망 데이터를 마이그레이션할 수 있도록 해줍니다. 예를 들어 훈련 데이터가 쌓인 신경망을 저전력의 추론 장치에 쉽게 가져올 수 있도록 할 수 있습니다."