크로노스그룹(Khronos Group)이 관리하는 컴퓨터 그래픽스 업계의 표준이 된 OpenGL 홈페이지의 메인 문구는 아래와 같다.
The Industry's Foundation for High Performance Graphics
FROM GAMES TO VIRTUAL REALITY, MOBILE PHONES TO SUPERCOMPUTERS
원래 OpenGL은 그래픽스 용도로 만들어져 사용되었으나 현재 업계의 상황으로 인해 컴퓨팅 환경에도 사용되고 임베디드, 안드로이드 같은 모바일 폰 에서 PC, 슈퍼컴퓨터까지 폭 넓게 사용되는 이른바 업계의 진정한 표준이라고 할 수 있다. 이렇게 OpenGL이 성공할 수 있었던 이유는 이름에서 알 수 있듯 공개되어 있어 일부 플랫폼에서만 사용할 수 있는 다른 프레임웍, API들과 차별되는 기술이었던 덕분이다.
Nvidia 칩셋에서만 사용할 수 있는 Cuda, iOS 환경에서 사용할 수 있는 Metal, Windows 환경에서 사용하는 Direct X, 컴퓨팅 목적으로 만들어졌으나 모든 환경에서 완벽지원이 되지 않는 현실인 OpenCL 등의 상황을 고려하면 하위호환을 위해 큰 아키텍처 변경이 피하면서 효율적으로 성장하지 못한 구시대 기술로 볼 수 있는 OpenGL이 아직도 최고의 자리에 있는 것이 이해될 수 밖에 없다.
하지만 세월이 흘러, OpenGL을 그래픽스 환경에만 이용하지 않고 앞서 언급한 제한된 환경으로 인해 GPU의 성능을 컴퓨팅(계산)에도 이용하고자 하는 시도들이 많이 나오게 된다. 만약 모든 그래픽 프로세서가 Nvidia의 칩셋으로 되어 있다면 Cuda를 이용할 수 있고, 모든 환경에서 OpenCL이 완벽 지원된다면 좋았겠지만, 절대적으로 많이 사용되는 OpenGL처럼 호환 및 동작이 검증되는 API는 없기에 이를 이용하게 된 것이다.
또한 GPU의 성능이 비약적으로 발전하면서 강력해진 GPU 리소스를 직접적으로 이용하고 싶어하는 요구가 강해지면서 기존의 OpenGL을 업그레이드 하는 것이 아닌 새로운 아키텍처로 강력한 성능을 내도록 만들어 진 것이 Vulkan API이다. Vulkan은 OpenGL처럼 다양한 플랫폼에서 사용할 수 있는 것을 보장하고, 뛰어난 성능과 최신의 고성능 GPU를 직접적으로 제어할 수 있다.
이런 배경지식을 갖고 있던 상황에서 Vulkan에 대해서 좀 더 알아보고 싶어 가장 최근 책인 한빛미디어의 <처음 만나는 Vulkan>을 읽어보았다.
책을 통해 알게된 내용을 몇가지를 아래와 같이 정리해본다.
- Vulkan API는 AMD의 Mantle API를 기반으로 개발되었다. AMD가 Mantle API를 기부하여 진행된 것인데, 아무리 노력해도 Nvidia의 CUDA를 따라잡을 수 없는 상황이니 Open Source의 힘으로 나은 상황을 만들어보려는 AMD의 노림수가 아닐까?
- OpenGL은 임베디드, 모바일폰에 사용되는 별도의 버전인 OpenGL ES가 존재하였으나, Vulkan은 일관성있게 모든 플랫폼에 대해 하나의 API만 존재한다. 모바일이 최우선이 되어버린 현재 상황에 맞게 Vulkan은 기존과 달리 모바일 플랫폼이 최우선 된다.
- 스테이트 머신이 기반인 OpenGL에서는 멀티 스레딩 확장성이 좋지 않았으나, Vulkan은 암묵적인 전역 스테이트가 없고 개발자가 멀티 스레딩 기능을 완전히 활용할 수 있도록 처음부터 설계되었다.
- 기존 OpenGL에서 화면 표시를 위해 운영체제의 윈도우 시스템 프레임버퍼를 직접적으로 사용하는데, Vulkan은 더 쉽고, 다양한 OS를 지원하는 일관된 API표준인 WSI를 지원하고 이를 통해 지원한다.
사실 GPU를 이용한 개발은 기존 프로그래밍 언어만 해왔던 분들에게는 또 다른 도전과 영역이라 할 수 있다. 많은 프로그래밍 책들이 처음 예제로 사용하는 Hello world!를 출력하는 소스 코드와 이 책의 첫 프로젝트를 비교하면, 일단 간단한 프로그램의 구조와 출력 함수를 알면 몇 줄 심지어 한 줄로 출력되던 기존의 프로그래밍과 너무나 복잡함을 알 수 있다.
이 책에서 쉽게 설명하려고 많이 노력했지만 GPU 기본이나 그래픽스 기본까지 전부 알려줄 수 있는 양은 되지 못한다. 기존 OpenGL, OpenCL, Metal 등을 사용하던, 공부하던 개발자가 앞으로 대세가 되리라 확신할 수 있는 Vulkan에 대한 공부를 시작하는 교재로는 Vulkan이 OpenGL과 어느 부분이 다르고, 어떻게 사용하는지에 대해 자세히 알려주는 책으로 적당한 것 같다.
이 글을 작성한 이후 크로노스 그룹이 Vulkan API 1.1 을 발표했다.
https://www.khronos.org/news/press/khronos-group-releases-vulkan-1-1
인상적인 점은 developer-requested features, 즉 실제 사용을 시작한 개발자들이 요청한 부분을 반영을 하고 있다는 것이다. Vulkan을 더 주목을 하지 않을래야 않을 수 없을 것 같다.