개요
Metal은 고급 3D 그래픽을 렌더링하고 그래픽 프로세서를 사용하여 데이터 병렬 계산을 수행하는 애플이 만든 그래픽 API입니다. 기능적으로 OpenGL과 OpenCL을 합친 것과 유사합니다. iOS 디바이스 중에 A7 및 이후 출시되는 AP를 탑재한 경우, macOS 디바이스 중에서는 2012년 이후 발매된 모든 Mac이 Metal 지원 대상입니다.
Metal이 등장한 이유
기존 OpenGL은 다양한 프로그래밍 언어 및 플랫폼 간의 교차 응용 프로그래밍을 지원하는 3D 그래픽 라이브러리였기 때문에 애플의 일관적인 플랫폼과 GPU에 보다 효율적으로 동작하는 GPU 프로그래밍 API가 필요했습니다.
OpenGL은 매 프레임마다 CPU가 여러 종류의 GPU에 대응하여 GPU의 상태를 체크하고 GPU에서 동작할 shader 프로그램을 컴파일해야 하기 때문에 GPU에게 줄 draw call을 연산할 시간이 부족하여 GPU의 활용도가 떨어지는 오버헤드가 발생해 왔습니다.
Metal의 경우에는 지원 할 GPU가 정해져 있기 때문에 빌드단계에서 GPU가 수행할 shader 프로그램을 미리 컴파일 해 놓을 수 있고, GPU의 상태를 체크하는 것 또한 미리 수행하도록 할 수 있습니다.
결과적으로, 매 프레임마다 CPU의 작업부하가 줄어들어서 GPU에게 더 많은 draw call을 줄 수 있고, CPU가 추가적으로 phisics 연산이나 AI에 시간을 더 할당할 수 있어, 보다 고품질의 3D 그래픽 프로그램을 만들 수 있습니다.
Metal에 포함된 Framework들
Metal
기기에서 사용 가능한 GPU와 직접 통신해야하는 경우 사용하는 프레임워크입니다. GPU는 그래픽을 빠르게 렌더링하고 데이터 병렬 계산을 수행하도록 설계되었습니다. 복잡한 장면을 렌더링하거나 고급 과학 계산을 수행하는 앱은 이 프렝임워크를 사용하여 최대 성능을 얻을 수 있습니다.
Metal Performance Shaders
각 Metal GPU 제품군의 고유 한 특성에 맞게 미세 조정 된 커널로 그래픽과 컴퓨팅 성능을 최적화합니다.
Metal Performance Shaders Graph
선형 대수, 기계 학습, 컴퓨터 비전 및 기타 유사한 도메인을 위한 맞춤형 다차원 컴퓨팅 그래프를 빌드, 컴파일 및 실행합니다.
MetalKit
훨씬 적은 코드를 사용하여 Metal 앱을 더 빠르고 쉽게 빌드하십시오. 표준 Metal 뷰에서 그래픽을 렌더링하고, 여러 소스에서 텍스처를 로드하고, Model I/O에서 제공하는 모델로 효율적으로 작업합니다.
Metal Shading Language
Metal에서 shader(그래픽처리에서 최종적으로 픽셀의 색상을 결정하는 함수)를 작성하려면 MSL(Metal Shading Language)을 사용해야 합니다. shader에서는 그래픽(vertex, fragment) 및 컴퓨팅(kernel) 처리를 할 수 있습니다.
Model I/O
MetalKit, GLKit 및 SceneKit을 통합하는 공통 인프라를 사용하여 3D 모델을 가져오고 내보내고 조작합니다.