AMD 비동기 셰이더 (Asynchronous Shaders)

AMD 비동기 셰이더 (Asynchronous Shaders)

AMD 비동기 셰이더 Asynchronous Shaders 1

AMD가 2015년 3월 31일 공개(NDA 해제)한 비동기 셰이더 (Asynchronous Shaders)에 대한 정보입니다.

비동기 셰이더란 그래픽 작업과 컴퓨트 (연산) 작업을 GPU에서 동시 실행할 수 있는 기능으로, 일반적인 GPU에서 사용되는 Synchronous (동기) 멀티 스레딩은 하나의 큐에 그래픽과 연산 작업을 순차적으로 놓고 처리하지만, 비동기 셰이더는 이를 별도로 놓고 병렬 동작이 가능합니다.

AMD 비동기 셰이더 Asynchronous Shaders 2

AMD는 GCN 아키텍처에서 그래픽 작업용 큐와 컴퓨트용 큐, 데이터 복사를 위한 3개의 큐를 각각 독립적으로 동작이 가능하도록 설계했다고 합니다.

AMD의 VR&S/W 마케팅 담당자인 사사 마린코비치가 밝힌 내용에 따르면 GCN 아키텍처는 처음부터 이를 고려해 설계되었으며, 이는 AMD가 주도하고 있는 HSA (Heterogeneous System Architecture)에 요구되는 기능이기도 합니다.

AMD 비동기 셰이더 Asynchronous Shaders 3

GCN 아키텍처는 그래픽과는 별도로 컴퓨팅 작업을 위한 장치인 ACE(Asynchronous Compute Engine)이 구현되어 있습니다.

ACE는 컴퓨트를 위한 명령 발행 유닛으로, GCN의 실행 단위인 ‘Wavefront’에 대해 GCN의 해당 컴퓨트 유닛에 작업을 발행하는 것이 그 역할입니다. 

일반적인 GPU는 ACE 같은 장치가 없기 때문에, 그래픽과 연산을 동시에 실행하려면 약간의 문제가 발생합니다. AMD는 이와 관련된 멀티 스레드와 선점 기법에 대해 설명했습니다.

AMD 비동기 셰이더 Asynchronous Shaders 4

멀티 스레드는 여러 작업을 교대로 실행하는 방식으로 하나의 작업 중에는 다른 작업이 대기해야 하기 때문에 오버헤드(부하)가 큽니다.

AMD 비동기 셰이더 Asynchronous Shaders 5

선점은 우선 순위에 따라 작업을 처리하는 방식으로 그래픽/연산 작업에서 연산이 우선인 경우 그래픽 작업의 중도 결과물인 컨텍스트를 어딘가에 임시 저장해야 하며, 이러한 컨텍스트는 일반적으로 크기가 크기 때문에 큰 오버헤드가 발생하게 됩니다. 

AMD는 비동기 셰이더 기능을 갖춘 GCN 아키텍처는 이러한 오버헤드 없이 그래픽과 연산 작업을 병렬 실행할 수 있다고 밝혔습니다. 보다 쉬운 이해를 위한 동영상도 함께 공개했기 때문에 관심 있는 분은 동영상을 확인하시는 것도 좋을 것 같습니다.

AMD 비동기 셰이더 Asynchronous Shaders 6

DX11에서는 구조적으로 테스크 큐가 1개이기 때문에 비동기 셰이더를 지닌 GCN 아키텍처가 그 장점을 발휘하기 어렵습니다.

AMD 비동기 셰이더 Asynchronous Shaders 7

하지만 DX12에서는 스레드마다 별도의 테스크 큐를 가지게 되며 이를 통해 병렬 실행을 쉽게 구현할 수 있게 됩니다. (Vulkan도 동일) AMD는 시프와 같은 일부 게임에서 이미 비동기 셰이더가 활용되고 있다고 밝혔습니다. (슬라이드 참고)

AMD 비동기 셰이더 Asynchronous Shaders 8

비동기 셰이더는 병렬 처리를 통해 보다 나은 성능을 제공하며 그로 인해 발생하는 성능의 여유를 다양한 그래픽 효과에 활용하여 더 나은 시각적 효과(이미지 품질)을 제공할 수 있습니다.

AMD에 따르면, 245 FPS의 게임에서 일반적으로 포스트 프로세싱을 사용한 경우 158 FPS까지 떨어졌지만 비동기 셰이더를 활용할 경우 포스트 프로세싱을 사용해도 230 FPS의 성능을 보여준다고 합니다. 즉, 비동기 셰이더를 사용하면 포스트 프로세싱을 사용해도 사용하지 않는 것과 가까운 성능을 얻을 수 있다는 것입니다.

답글 남기기