이게 뭘까?: Vulcan API
on
Vulcan API라는 말을 쉽게 접할 수 있다. C로 쓰여진 3D용 API라고 보면 된다. 그래픽용 공통 API에는 OpenGL이 있는데 이건 또 뭐냐 할 수 있는데 OpenGL의 확장판이라고 볼 수 있고, 주로 모바일 디바이스처럼 효율성을 따져야되는 쪽으로 개발되었다고 한다.
지금 세상에서 C는 거의 어셈블리 혹은 기계어와 거의 맞대응하는 저수준 언어가 되어버렸는데, API가 C로 씌여져 있다는 것은 사실상 하드웨어 직전단계라고 보면 되고, 사실 하드웨어는 그것에 거의 가깝게 기능을 구현해야 함을 의미하게 된다.
그러니까 소프트웨어를 위해서 API가 쓰여져 있지만 결국 그것은 하드웨어로 거의 1:1로 대응될 수 있도록 기능이 구현되어있어야 된다는 말이다.
API라는 용어가 또 낯설 수 있는데 이것은 그냥 쉽게 말해서 어떤 이름의 함수를 쓰고 해당 함수에 어떤 값들을 넘겨야 되고 그렇게해서 최종적으로 무엇이 얻어져야하는지를 규정해놓은 거라고 보면 된다. 사실상의 표준이나 다름 없다. 따라서 어떤 소프트웨어/하드웨어 업체가 특정 버전의 API를 따른다라고 하는 것은 이 표준을 완벽하게 준수하게끔 기능을 구현해 놓았다는 말이다.
이 API를 만든 Khronos group이란 곳은 예전에도 하드웨어 플랫폼에 의존하지 않는 표준 API를 만드는 일을 했다. 쉽게 OpenGL이라든가 OpenCL을 생각하면 되는데, 전부 다 이곳에서 만들었다.
또 여기서 궁금증이 생길 수 있는데, OpenCL은 병렬처리를 위한 API가 된다. 즉 내 컴퓨터가 어떤 OS에 있든지 어떤 (병렬처리가 가능한) 장치를 달고 있든지 해당 API를 따르면 그 모든 자원을 컴퓨팅 자원으로 활용할 수 있게 해준다. OpenGL은 이름에서 뜻하는 바와 같이 그래픽 기능에 한정된다.
본론으로 돌아와서 3D용 API는 무슨 일을 하는 함수들을 규정해놓았는가 하는 질문이 생길 수 있는데, 대충 다음과 같다.
- 하드웨어 디바이스와 관련된 함수: 넌 누구냐? 에 대답하는 것들이다.
- 메모리와 관련된 함수: 3D 그래픽을 잘하려면 메모리를 많이 필요로 하고 캐쉬/버퍼를 잘 관리해야 한정된 자원을 효율적으로 쓸 수 있다.
- 렌더링: 3D에서 렌더링은 핵심 기능이다.
- 쉐이더: 랜더링할 때 쉐이더 빠질 수 없다.
- …
이 바닥에서 돌아다니는 용어 중에 Vulcan이 들어가는 게 하나 더 있는데 이것은 서버용 Arm processor의 아키텍처를 의미하는 것이다. Broadcom이 만들었으나 이것은 Cavium이란 회사가 계승해 Marvell이란 회사에서 이어가고 있다. 모바일용 ARM 아키텍쳐에 대해서는 사람들이 Kryo니 Cortex니 잘 들어봤지만 사실 서버용 Arm processor는 이제 하는 곳이 거의 없다. Broadcom도 진작에 관두고 Qualcom도 손을 뗐다.