← 모든 글

Apple Silicon TBDR: 앱 개발자가 실제로 얻는 것

Apple silicon GPU는 다른 GPU가 렌더링하는 방식과 다르게 렌더링합니다. Apple의 Metal 문서는 이 아키텍처를 이름으로 명시하고 있습니다. “Apple silicon의 GPU는 성능과 전력 효율을 최적화하는 타일 기반 지연 렌더링(TBDR)이라는 렌더링 기법을 구현합니다.”1 TBDR 형태는 Metal 4 API, 온디바이스 ML 스택, 그리고 이미지블록과 타일 셰이더 프로그래밍 모델이 지금과 같은 모습으로 존재하는 이유입니다.

아래 섹션에서는 Apple이 문서화한 TBDR이 가능하게 하는 네 가지 기능과 각각이 앱에 무엇을 가져다주는지 살펴봅니다. 이미지블록, 타일 셰이더, 래스터 순서 그룹, 그리고 강화된 멀티샘플 안티앨리어싱 구현입니다. 이전 글인 Metal 4 essentials에서는 핵심 API 표면을 다루었고, 여기서는 그 표면이 대상으로 삼는 GPU 기반에 초점을 맞춥니다.

TL;DR

  • TBDR은 렌더 대상을 타일로 분할하여 별도의 GPU 코어에서 여러 타일을 병렬로 실행하고, 각 타일의 모든 지오메트리가 평가된 후까지 셰이딩을 지연합니다.1
  • 타일 메모리는 디바이스 메모리보다 대역폭이 몇 배 빠르고, 지연 시간이 몇 배 낮으며, 에너지 비용이 현저히 낮습니다.1
  • A11 이후의 Apple GPU는 이미지블록, 타일 셰이딩, 래스터 순서 그룹, 이미지블록 샘플 커버리지 제어를 추가합니다. 앱은 Metal을 통해 이 모든 기능에 접근합니다.1
  • 이미지블록을 사용하면 앱이 타일 메모리에 사용자 정의 픽셀별 데이터 구조를 정의하고, 드로우와 디스패치 전반에 걸쳐 데이터를 유지하며, 단일 패스에서 렌더 작업과 컴퓨트 작업을 혼합할 수 있습니다.1
  • 래스터 순서 그룹은 동일한 픽셀을 대상으로 하는 프래그먼트 스레드를 동기화하여, 순서 의존적 블렌딩을 깨뜨리는 읽기-수정-쓰기 경합을 제거합니다.1

TBDR이 실제로 무엇인가

Apple의 표현을 그대로 옮기면 다음과 같습니다. “GPU는 렌더 대상을 타일이라고 하는 더 작은 영역의 격자로 나눕니다. GPU는 각 타일을 자신의 GPU 코어 중 하나로 처리하며, 종종 여러 개를 동시에 실행합니다. GPU는 각 타일의 모든 지오메트리를 평가할 때까지 해당 타일의 렌더링 단계를 미루거나 연기합니다.”1

즉시 모드(IM) GPU와의 대비도 Apple의 표현입니다. “IM GPU는 렌더링에서 보이든 보이지 않든 상관없이 선이나 삼각형 같은 프리미티브를 완전히 처리합니다.”1 TBDR은 먼저 타일에 대한 모든 지오메트리를 모은 다음 가려짐 처리에서 살아남은 것만 셰이딩하여 그러한 작업을 피합니다. Apple은 이점을 직접 명시합니다. “TBDR GPU는 렌더 패스의 모든 지오메트리를 동시에 처리하고 보이는 프리미티브만 셰이딩하여 불필요한 작업을 피합니다.”1

타일 메모리가 그 보상입니다. Apple은 디바이스 메모리 대비 그 장점을 다음과 같이 설명합니다.1

  • “디바이스 메모리보다 몇 배 빠른 대역폭”
  • “디바이스 메모리보다 몇 배 낮은 액세스 지연 시간”
  • “디바이스 메모리 액세스보다 현저히 낮은 에너지 소비”

두 개의 렌더 패스가 하드웨어에서 겹쳐 실행될 수도 있습니다. Apple은 다음과 같이 언급합니다. “GPU가 렌더 패스의 마지막 단계를 타일 메모리로 실행하는 동안, 미래의 렌더 패스의 버텍스 단계를 시작할 수 있습니다. GPU는 두 단계가 일반적으로 서로 다른 컴퓨트 및 메모리 구성 요소를 사용하는 경향이 있기 때문에 두 단계를 병렬로 실행하여 더 많은 하드웨어 블록을 동시에 사용할 수 있습니다.”1

이것이 기반입니다. 아래의 모든 것이 이를 사용합니다.

이미지블록: 타일 메모리의 사용자 정의 픽셀별 데이터

Apple의 이미지블록 정의입니다. “이미지블록은 로컬 메모리에 저장되는 구조화된 이미지 데이터의 타일로, Apple GPU가 효율적으로 조작할 수 있는 이미지 데이터를 타일 메모리에 기술할 수 있게 합니다.”1 이는 너비, 높이, 픽셀 깊이를 가진 2D 데이터 구조이며, “이미지블록의 각 픽셀은 여러 구성 요소로 구성될 수 있고, 각 구성 요소를 자체 이미지 슬라이스로 주소 지정할 수 있습니다.”1 Apple의 예시는 알베도, 스페큘러, 노멀 구성 요소에 대한 세 개의 이미지 슬라이스를 보유하는 이미지블록입니다.

Apple이 문서화한 형태는 다음과 같습니다.1

  • 커널 함수와 프래그먼트 함수 모두에서 사용 가능합니다.
  • 타일의 수명 동안, 드로우와 디스패치 전반에 걸쳐 유지됩니다.
  • 기존 렌더 코드는 렌더 어태치먼트 형식과 일치하는 이미지블록을 자동으로 생성합니다.
  • 앱은 추가 채널, 배열, 중첩 구조를 가진 사용자 정의 이미지블록을 셰이더에서 정의할 수 있습니다.
  • 프래그먼트 셰이더는 해당 프래그먼트 위치의 이미지블록 데이터만 볼 수 있고, 컴퓨트 함수 스레드는 전체 이미지블록에 액세스할 수 있습니다.

드로우와 디스패치 전반에 걸친 지속성이 운영적으로 흥미로운 부분입니다. Apple의 표현입니다. “이미지블록 지속성은 타일 셰이더를 사용하여 단일 렌더링 패스에서 렌더 작업과 컴퓨트 작업을 혼합할 수 있음을 의미하며, 양쪽 모두 동일한 로컬 메모리에 액세스할 수 있습니다. 타일 내에서 여러 작업을 유지함으로써 로컬 GPU 메모리에 머무르는 정교한 알고리즘을 만들 수 있습니다.”1

다단계 렌더링 파이프라인(지연 셰이딩, 스크린 스페이스 효과, 사용자 정의 블렌딩)을 출시하는 앱의 경우, 중간 결과를 디바이스 메모리를 거쳐 왕복시키는 대신 타일 메모리에 보관하는 것이 TBDR이 돌려주는 프레임당 예산입니다.

타일 셰이더: 동일한 패스에서의 렌더와 컴퓨트

Apple의 타일 셰이더에 대한 표현입니다. “타일 셰이더는 렌더 패스의 일부로 실행되는 컴퓨트 또는 프래그먼트 함수입니다. 이를 통해 앱이 렌더 패스 사이에서 GPU에 영구적인 타일 메모리에 데이터를 계산하고 저장할 수 있습니다.”1

전통적인 GPU 모델이 타일 셰이더가 우회하는 대상입니다. Apple의 말입니다. “전통적인 GPU는 렌더링과 컴퓨트 명령을 별개의 패스로 분리합니다. 이러한 패스들은 일반적으로 서로 직접 통신할 수 없습니다. 앱은 한 패스의 결과를 디바이스 메모리에 저장한 다음 다음 패스를 위해 해당 데이터를 다시 로드함으로써 이 제약을 우회합니다. 다단계 렌더링 알고리즘과 같은 일부 시나리오에서는 앱이 중간 데이터를 디바이스 메모리에 여러 번 복사할 수 있습니다.”1

타일 셰이더는 그 중간 데이터를 타일 메모리로 옮깁니다. Apple이 문서화한 보상입니다. “타일 셰이더를 사용하는 앱은 중간 결과를 디바이스 메모리로 저장하는 것을 피하고 더 빠른 타일 메모리에 데이터를 저장하여 시간을 절약할 수 있습니다.”1

Metal 4 앱의 경우, 타일 셰이더는 Metal 4 essentials 글에서 다룬 통합 MTL4ComputeCommandEncoder 설계와 짝을 이룹니다. 인코더 통합과 타일 셰이더 프로그래밍 모델은 두 계층에서 읽힌 동일한 아키텍처적 결정입니다. Apple GPU 하드웨어가 그것을 필요로 하지 않기 때문에 전통적인 GPU에 존재하는 렌더 대 컴퓨트 경계를 무너뜨리는 것입니다.

래스터 순서 그룹: 동시 실행 프래그먼트 스레드의 순서 지정

래스터 순서 그룹이 해결하는 문제를 Apple의 말로 옮기면 다음과 같습니다. “Metal은 GPU가 드로우 콜 순서로 블렌딩하도록 보장하여, GPU가 장면을 순차적으로 렌더링하는 듯한 환상을 줍니다. … 각 삼각형의 프래그먼트 셰이더는 자체 스레드에서 동시에 실행됩니다. 뒤쪽 삼각형의 프래그먼트 셰이더가 앞쪽 삼각형의 프래그먼트 셰이더보다 먼저 실행되지 않을 수 있는데, 이는 사용자 정의 블렌딩 함수에 다른 삼각형의 셰이더 결과가 필요한 셰이더에 문제가 될 수 있습니다. 동시성 때문에 이러한 읽기-수정-쓰기 시퀀스는 경쟁 조건을 만들 수 있습니다.”1

메커니즘은 다음과 같습니다. “래스터 순서 그룹은 동일한 픽셀 좌표와 샘플(샘플별 셰이딩을 활성화한 경우)을 대상으로 하는 스레드를 동기화하여 이러한 액세스 충돌을 극복합니다.”1

구현 표면입니다. “래스터 순서 그룹을 구현하려면 메모리에 대한 포인터에 속성 한정자로 주석을 답니다. 해당 포인터를 통해 픽셀에 액세스하는 셰이더는 픽셀별 제출 순서로 진행됩니다. 하드웨어는 현재 스레드와 겹치는 더 오래된 프래그먼트 셰이더 스레드가 완료될 때까지 기다린 후 현재 스레드가 진행됩니다.”1

최근 Apple GPU는 메커니즘을 확장합니다. Apple의 말입니다. “최근 Apple GPU의 Metal은 추가 기능으로 래스터 순서 그룹을 확장합니다. 이는 이미지블록과 스레드그룹 메모리의 개별 채널을 동기화할 수 있게 합니다. 또한 여러 순서 그룹을 만들 수 있어 더 세분화된 동기화를 제공하고 스레드가 액세스를 위해 대기하는 빈도를 최소화합니다.”1

Apple의 작동 예시는 지연 셰이딩입니다. 전통적인 2단계 접근 방식은 여러 텍스처의 g-버퍼를 디바이스 메모리에 쓴 다음, 라이팅 단계를 위해 다시 읽습니다. Apple의 표현입니다. “여러 순서 그룹을 사용하여 두 렌더 단계를 하나로 합침으로써 중간 텍스처의 필요성을 제거할 수 있습니다. 이를 위해 지오메트리 버퍼를 타일 크기의 청크로 유지하여 로컬 이미지블록 메모리에 머무를 수 있도록 하십시오.”1

Apple이 권장하는 분할은 다음과 같습니다.1

  • 첫 번째 순서 그룹: 세 개의 g-버퍼 필드(알베도, 노멀, 깊이).
  • 두 번째 순서 그룹: 누적된 라이팅 결과.
  • “Apple GPU는 두 그룹을 별도로 순서 지정할 수 있어 두 번째 그룹으로의 미해결 쓰기가 첫 번째 그룹으로부터의 읽기를 방해하지 않습니다.”1

두 스레드는 여전히 실행 끝에서 라이트를 누적하기 위해 동기화됩니다. 이점은 충돌하지 않는 읽기가 직렬이 아니라 동시에 실행된다는 것입니다.

픽셀당 고유 샘플을 추적하는 MSAA

A11+ GPU에서 Apple이 문서화한 MSAA 구현은 교과서적 설명과 다릅니다. Apple의 표현입니다. “하드웨어는 각 픽셀이 프리미티브의 가장자리를 포함하는지 여부를 추적하여 필요할 때만 샘플별 블렌딩을 실행합니다. 다른 프리미티브가 픽셀 내의 샘플을 덮으면 GPU는 전체 픽셀에 대해 한 번만 블렌딩합니다.”1

Apple의 예시는 그 최적화를 보여줍니다. 두 개의 겹치는 삼각형 가장자리로 덮인 픽셀은 네 개의 샘플 위치에 세 개의 고유한 색상을 가집니다. Apple의 말입니다. “A11 이전의 Apple GPU는 픽셀의 세 개의 덮인 샘플 각각을 블렌딩합니다. A11부터 Apple GPU는 두 개의 샘플이 동일한 색상을 공유하기 때문에 두 번만 블렌딩합니다.”1

색상 감소는 더 나아갑니다. Apple입니다. “Apple GPU는 픽셀의 고유한 색상 수를 줄일 수 있습니다. 예를 들어, GPU가 이전 삼각형 위에 불투명한 삼각형을 렌더링하면, 픽셀을 단일 색상으로 표현합니다.”1

앱은 타일 셰이더로 구현을 확장할 수 있습니다. Apple이 문서화한 사용 사례입니다. “타일 셰이더에서 샘플 커버리지 데이터를 수정하여 사용자 정의 리졸브 알고리즘을 구현할 수 있습니다. 예를 들어, 불투명 지오메트리와 반투명 지오메트리에 대한 별도의 렌더 단계를 포함하는 복잡한 장면을 고려해 보세요. 반투명 지오메트리를 블렌딩하기 전에 불투명 지오메트리에 대한 샘플 데이터를 리졸브하는 타일 셰이더를 추가할 수 있습니다.”1

타일 셰이더는 로컬 메모리의 데이터에서 실행되며 불투명 지오메트리 단계의 일부가 될 수 있어, 별도의 패스를 통해 우회하는 대신 리졸브를 타일 메모리에 유지합니다.

이것이 앱 아키텍처에 의미하는 바

Apple이 문서화한 표면에서 도출되는 세 가지 시사점입니다.

  1. 타일 메모리가 예산입니다. 위의 네 가지 기능(이미지블록, 타일 셰이더, 래스터 순서 그룹, 샘플 커버리지)은 모두 작업을 타일 메모리에 유지하고 디바이스 메모리에서 벗어나도록 하기 위해 존재합니다. Apple이 문서화한 수치는 디바이스 메모리보다 몇 배 빠른 대역폭, 몇 배 낮은 지연 시간, 현저히 낮은 에너지입니다.1 그 예산을 존중하는 앱 아키텍처는 그렇지 않은 것보다 더 빠르고 더 시원하게 실행됩니다.

  2. 렌더와 컴퓨트는 서로 다른 세계가 아닙니다. Apple의 GPU는 전통적인 GPU가 하는 방식으로 렌더와 컴퓨트를 별개의 패스로 분리하지 않습니다. 이미지블록 지속성과 타일 셰이더는 앱이 단일 렌더 패스 내에서 다단계 알고리즘을 실행할 수 있게 합니다. Metal 4 통합 컴퓨트 인코더는 동일한 아키텍처적 사실의 API 수준 표현입니다.

  3. 동시성이 기본이고, 순서 지정은 옵트인입니다. 래스터 순서 그룹은 앱이 “이 읽기-수정-쓰기 시퀀스는 순서에 의존합니다”라고 말하는 방식입니다. 기본은 순서 없는 동시성이며, 이는 GPU의 자연스러운 형태입니다. 블렌딩, 투명도 또는 g-버퍼 쓰기를 위해 순서가 지정된 액세스가 필요한 앱은 특정 포인터에 주석을 달고 하드웨어가 스레드의 순서를 정하도록 합니다.

전체 Apple Ecosystem 클러스터는 다음과 같습니다. 이 하드웨어를 대상으로 하는 병렬 API 표면을 위한 Metal 4 core API, 동일한 silicon에서 ML을 실행하는 프레임워크인 Foundation Models on-device LLM, 더 광범위한 ML 스택을 위한 Core ML on-device inference. 허브는 Apple Ecosystem Series에 있습니다.

FAQ

TBDR은 Metal 4에 특정한 것입니까?

아닙니다. Apple silicon GPU는 여러 GPU 세대에 걸쳐 TBDR을 구현해 왔습니다. Metal 4는 그것들을 대상으로 하는 새로운 핵심 API 표면입니다. 여기서 문서화된 TBDR 기능(이미지블록, 타일 셰이더, 래스터 순서 그룹, A11+ 샘플 커버리지 제어)은 원래의 MTL 접두사 API과 MTL4 접두사 Metal 4 타입 모두에서 Metal을 통해 작동합니다.1

이미지블록과 스레드그룹 메모리의 차이는 무엇입니까?

Apple이 문서화한 구분입니다. “스레드그룹 메모리는 비구조화된 데이터에 적합하지만, 이미지블록은 이미지 데이터에 더 적합합니다.”1 이미지블록은 너비, 높이, 픽셀 깊이, 그리고 이름이 지정된 픽셀별 구성 요소를 가진 2D 구조를 지닙니다. 스레드그룹 메모리는 평평한 할당입니다. 주소 지정 가능한 슬라이스가 있는 구조화된 이미지 데이터가 필요한 앱은 이미지블록을 사용하고, 컴퓨트 커널을 위한 스크래치 버퍼가 필요한 앱은 스레드그룹 메모리를 사용합니다.

Metal이 이미 드로우 콜 순서 블렌딩을 보장한다면 왜 래스터 순서 그룹이 존재합니까?

Metal은 순차적 블렌딩의 외관을 보장하지만, GPU는 프래그먼트 셰이더를 동시에 실행합니다. Apple의 표현입니다. 다른 삼각형의 결과에 대해 자체 사용자 정의 블렌딩을 수행하는 셰이더는 두 스레드가 실제로 순차적이지 않기 때문에 경쟁 조건에 부딪힙니다. 래스터 순서 그룹은 동일한 픽셀을 대상으로 하는 스레드만 동기화하고 나머지는 동시 실행 상태로 두는 메커니즘입니다.1

언제 자체 MSAA 리졸브 알고리즘을 작성해야 합니까?

Apple은 한 가지 구체적인 사례를 문서화합니다. 불투명 및 반투명 지오메트리에 대한 별도의 단계를 가진 장면으로, 리졸브가 불투명 단계 후에 반투명 블렌딩 전에 실행됩니다.1 대부분의 앱의 경우 하드웨어의 내장 MSAA 구현이 작업을 처리하며, 사용자 정의 리졸브는 Apple 문서가 설명하는 특정 엣지 케이스를 위한 도구입니다.

Apple의 MSAA 최적화는 어떻게 작업을 절약합니까?

Apple의 하드웨어는 새로운 프리미티브를 렌더링할 때 픽셀당 고유한 샘플 수를 추적합니다. Apple의 예시입니다. 두 개의 삼각형 가장자리로 덮인 픽셀은 네 개의 샘플 위치에 세 개의 고유한 색상을 가지며, A11+ GPU는 두 개의 샘플이 색상을 공유하기 때문에 세 번이 아닌 두 번 블렌딩하고, 이후의 불투명한 삼각형은 픽셀을 다시 단일 색상으로 줄입니다.1 최적화는 하드웨어 수준에서 실행되며, 앱은 API 변경 없이 이를 얻습니다.

Apple GPU 아키텍처는 TBDR 페이지 외에 다른 곳에서 문서화됩니까?

Metal 문서의 Apple의 “Apple silicon” 주제는 이 글의 근거가 되는 TBDR 페이지로 연결됩니다. Metal에 관한 Apple의 WWDC 세션도 GPU 아키텍처 세부 사항을 다루며, Metal Shading Language Specification은 셰이더 수준 표면을 다룹니다. Apple은 주어진 Apple GPU 세대에 대한 기저의 silicon 수준 세부 사항(클러스터 수, ALU 폭, 래스터 엔진 사양)을 개발자 문서에 게시하지 않았습니다. developer.apple.com 외부에서 발견되는 그러한 수치는 검증되지 않은 것으로 취급하십시오.

References


  1. Apple Developer, “Tailor your apps for Apple GPUs and tile-based deferred rendering”. TBDR 아키텍처, A11+ 개선 사항(이미지블록, 타일 셰이더, 래스터 순서 그룹, 이미지블록 샘플 커버리지 제어), 타일 메모리 특성, 지연 셰이딩 작동 예시, MSAA 최적화. 2026-05-04 검색됨. 

관련 게시물

Metal 4 Essentials: What The New Core API Actually Changes

Metal 4 ships parallel MTL4-prefixed types alongside Metal in iOS 26. Multi-threaded command encoding, unified compute, …

11 분 소요

What SwiftUI Is Made Of

SwiftUI is a result-builder DSL on top of a value-typed View tree. Once the substrate is visible, AnyView, Group, and Vi…

17 분 소요

The Cleanup Layer Is the Real AI Agent Market

Charlie Labs pivoted from building agents to cleaning up after them. The AI agent market is moving from generation to pr…

15 분 소요