동적 캐싱 M3의 가장 큰 기능을 설명하기 위한 시도 | ENBLE

ENBLE | 동적 캐싱 M3의 최고 기능 소개

애플 발표에서 "다이나믹 캐싱"이라고 적힌 슬라이드
저작권자의 허락을 받아 사용된 이미지

애플의 “Scary Fast” 행사에서 가장 눈에 띄는 기능 중 하나는 동적 캐싱(Dynamic Caching)이었습니다. 아마도 발표를 보는 대부분의 사람들은 마찬가지로 하나의 반응을 보였을 것입니다: “메모리 할당이 성능을 향상시킬 수 있다고?”

애플은 새로운 M3 칩의 첫 공개를 “동적 캐싱”이라는 핵심적인 기능을 통해 진행했습니다. 애플의 단순화된 설명은 동적 캐싱이 정확히 무엇을 하는지, M3의 GPU 성능을 어떻게 향상시키는지 명확하지 않게 알려주지 않았습니다.

일반적인 GPU 아키텍처에 대해 깊이 있게 연구하고 몇 가지 직접적인 질문을 보내 동적 캐싱이 정확히 무엇인지 알아보았습니다. 여기에는 애플이 얼마나 기술적으로 밀도 있는 기능에 초점을 맞췄는지에 대한 최선의 이해가 있습니다.

동적 캐싱이 정확히 무엇인가요?

애플의 M3 칩 패밀리
애플

동적 캐싱은 M3 칩이 특정 작업에 필요한 정확한 메모리 양만 사용할 수 있는 기능입니다. 애플은 공식 보도자료에서 이렇게 설명합니다: “동적 캐싱은 기존 GPU와는 다르게 하드웨어에서 실시간으로 로컬 메모리의 사용을 할당합니다. 동적 캐싱을 사용하면 각 작업에 필요한 정확한 메모리 양만 사용됩니다. 이것은 업계에서 처음으로 개발자에게 투명하며 새로운 GPU 아키텍처의 중심 기능입니다. 가장 요구가 많은 전문적인 앱과 게임에 대한 성능을 크게 향상시킵니다.”

애플식으로 말하면, 기술적인 측면 중 많은 부분이 의도적으로 가리져 있으며 결과에 중점을 두기 위해 설명되었습니다. 그 결과를 얻을 힌트는 제공하지만, 비슷한 기술 용어로 혼란을 줄 일 없도록 되도록 간소화되었습니다. 그러나 일반적으로 동적 캐싱은 GPU의 메모리 할당을 효율적으로 수행할 수 있도록 합니다. 그렇다면 진짜로 쉽게 이해할 수 있겠죠? 그럼에도 불구하고 메모리 할당이 “평균 활용도를 높이고” “성능을 크게 향상시킨다”는 것이 여전히 명확하지 않습니다.

동적 캐싱을 이해하려면 GPU가 어떻게 작동하는지 조금 더 자세히 알아봐야 합니다. CPU와 달리 GPU는 대규모 작업을 병렬로 처리하는 데 능숙합니다. 이러한 작업들을 쉐이더라고 부르며, GPU가 실행하는 프로그램입니다. GPU를 효과적으로 활용하기 위해서는 프로그램이 한 번에 많은 수의 쉐이더를 실행해야 합니다. 가능한한 많은 사용 가능한 코어를 활용하는 것이 목표입니다.

이로 인해 Nvidia가 “tail”이라고 부르는 효과가 발생합니다. 많은 쉐이더가 한 번에 실행되고, 더 많은 쉐이더가 쓰레드(또는 더 정확하게는 GPU의 쓰레드 블록)에서 실행되기 위해 보낼 때, 활용도가 하락하는 현상이 발생합니다. 애플의 프레젠테이션에서 동적 캐싱을 설명할 때, GPU의 활용도가 급증한 후 낮아졌음을 확인할 수 있습니다.

GPU 활용도를 나란히 보여주는 두 개의 차트
저작권자의 허락을 받아 사용된 이미지

이것이 메모리와 어떤 관계를 가지는지 궁금하실 것입니다. GPU의 기능은 메모리에서 명령을 읽고 함수의 출력을 메모리에 작성합니다. 많은 함수는 실행되는 동안 여러 번 메모리에 접근해야 합니다. CPU에서는 낮은 수준의 병렬 함수로 인해 메모리 지연이 매우 중요하기 때문에 RAM과 캐시를 통한 메모리 지연이 중요합니다. 그러나 GPU에서는 메모리 지연을 숨기기가 더 쉽습니다. 이는 고도로 병렬 처리기이므로 일부 함수가 메모리를 탐색하는 동안 다른 함수가 실행될 수 있습니다.

이는 모든 쉐이더가 실행하기 쉬울 때 작동하지만, 요구 작업량이 많은 경우 매우 복잡한 쉐이더가 될 수 있습니다. 이러한 쉐이더가 실행되도록 예약되면, 실행하기 위해 필요한 메모리가 할당될 것입니다. 실제로 필요하지 않더라도 메모리가 할당됩니다. GPU는 자원의 많은 부분을 한복잡한 작업에 할당하고, 이러한 자원이 낭비될지라도 어쩔 수 없이 실행하여야 합니다. 동적 캐싱은 실제로 GPU에 사용 가능한 자원을 더 효과적으로 사용하도록 하는 애플의 시도로 보입니다. 이를 통해 이러한 복잡한 작업들이 필요한 만큼만 사용하는 것이 보장됩니다.

이론적으로, GPU의 평균 사용률을 높일 가능성을 제공하기 위해 한 번에 더 많은 작업을 실행하는 대신, 작은 수의 요구 작업들이 GPU에 사용 가능한 모든 자원을 소모하는 것을 막을 수 있습니다. 애플의 설명은 먼저 메모리에 초점을 맞추어 성능을 향상시킵니다. 제가 이해한 바로는 효율적인 할당이 한 번에 더 많은 쉐이더를 실행할 수 있게 해주며, 결과적으로 사용률과 성능을 향상시킬 수 있을 것으로 생각됩니다.

사용 vs. 할당

동적 캐싱에 대한 설명을 이해하는 데 중요한 측면 중 하나는 쉐이더의 분기 방식입니다. GPU가 실행하는 프로그램은 항상 정적이지 않습니다. 다양한 조건에 따라 바뀔 수 있는데, 특히 광선 추적에 필요한 크고 복잡한 쉐이더의 경우 이는 특히 사실입니다. 이러한 조건부 쉐이더는 최악의 시나리오를 위해 자원을 할당해야 하므로 일부 자원이 낭비될 수 있습니다.

Unity는 동적 분기 쉐이더에 대해 다음과 같이 설명합니다: “동적 분기의 경우 GPU는 최악의 경우를 대비하여 레지스터 공간을 할당해야 합니다. 한 분기가 다른 분기보다 훨씬 비용이 많이 드는 경우, GPU는 레지스터 공간을 폐기하게 됩니다. 이로 인해 셰이더 프로그램의 병렬 실행 횟수가 감소하여 성능이 하락할 수 있습니다.”

애플은 동적 캐싱을 통해 이러한 유형의 분기에 대응하고, GPU가 필요한 자원만 사용하도록 하여 낭비를 방지할 수 있는 것으로 보입니다. 이 기능이 다른 영향을 줄 수도 있으나, GPU가 작업을 실행하는 동안 동적 캐싱이 언제 어떻게 작동하는지는 분명하지 않습니다.

아직까지는 블랙 박스

이벤트에서 새로운 맥북을 공개한 애플.
Apple

물론, 이 모든 것은 제가 어떻게 이해하고, GPU의 기능과 애플이 공식적으로 밝힌 내용에서 유추해 내는 것입니다. 애플은 언젠가는 동적 캐싱이 어떻게 작동하는지에 대해 더 많은 정보를 공개할 수도 있습니다. 그러나 결국 동적 캐싱의 기술적인 세부사항은 Apple이 GPU의 활용도와 성능을 개선할 수 있다면 중요하지 않습니다.

마지막으로, 동적 캐싱은 GPU의 아키텍처의 심층적인 기능에 대한 마케팅용 용어입니다. GPU를 디자인하는 사람들이 아니라면 이를 이해하는 것은 오해와 단순화된 설명으로 이어질 수밖에 없습니다. 이론적으로는 애플은 브랜딩을 제거하고 아키텍처 자체로 설명하게 할 수도 있었을 것입니다.

만약 M3의 GPU에서 동적 캐싱이 무엇을 할 수 있는지 더 자세히 알아보려고 했다면, 이제 가능한 설명이 있습니다. 그러나 중요한 것은 최종 제품의 성능이 어떻게 되는지이며, Apple의 첫 번째 M3 장치가 공개되고 우리가 확인할 수 있을 때까지 기다릴 시간이 많지 않습니다. 그러나 지금까지 우리가 본 성능 향상 설명과 데모를 기반으로, 분명히 그럴듯하게 보입니다.