DirectCompute에는 다양한 메모리 모형이 존재한다. 이것들을 한번 살펴보자.
레지스터 기반 메모리
계산 셰이더는 다른 프로그래밍 가능 셰이더 단계들과 동일한 하드웨어(프로그래밍이 가능한 처리기)에서 실행된다. 따라서 계산 셰이더 단계에서도 다른 프로그램 가능 셰이더 단계들에서와 동일한 일반적인 처리 패러다임이 적용되며, 공통 셰이더 코어를 구현한다. 계산 셰이더 단계는 다른 파이프라인 단계들과 비슷한 레지스터 기반 처리 개념을 사용한다.
계산 셰이더는 입력 특성 레지스터들(v#)과 텍스처 레지스터들(t#), 상수 버퍼 레지스터들(cb#), 순서 없는 접근 레지스터들(u#), 임시 레지스터들(r#, x#)을 지원한다.
임시 레지스터들은 셰이더 프로그램의 실행 도중 중간 계산 결과를 담는 데 주로 쓰인다.
임시 레지스터는 현재 실행 중인 스레드에서만 접근할 수 있으며, 일반적으로 접근이 극도로 빠르다.
공통 셰이더 코어에는 임시 레지스터를 최대 4096개까지(r#, x# 합쳐서) 지정할 수 있다.
일반적으로 셰이더 코어에 적재된 자료는 최대한 이 임시 레지스터들에 저장된다.
장치 메모리
레지스터 기반 메모리는 아주 빠르긴 하지만 용량이 매우 작다. 또한, 사용할 자료를 먼저 셰이더 코어에 적재한 후에야 레지스터들을 사용할 수 있으며, 스레드의 셰이더 프로그램 실행이 끝나면 레지스터 내용이 초기화된다. 계산 파이프라인을 본격적으로 활용하려면 레지스터 기반 메모리에 담을 수 있는 것보다 훨씬 큰 자원이 필요하며, 또한 셰이더 프로그램의 실행들 사이에서 계속 유지되는 자원도 필요하다. 그런 자원들은 장치 메모리에 담는다. 그리고 그런 자원들을 다른 종류의 메모리에 저장되는 자원과 구분해서 흔히 장치 메모리 자원이라고 부른다.
'Visualization Programming > DirectX11' 카테고리의 다른 글
DirectX11 - UpdateSubResource(), Map() ~ Unmap(), CopyResource(), CopySubresourceRegion()의 팁 (0) | 2016.04.15 |
---|---|
DirectX11 - Dispatch()와 [numthreads] (0) | 2016.03.28 |
DirectX11 - DirectCompute의 스레드 (0) | 2016.03.09 |
DirectX11 - 계산 파이프라인란? (0) | 2016.03.08 |
DirectX11 - 자원 뷰 (0) | 2016.03.08 |