일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- union find
- 스토어드 프로시저
- Brute Force
- Dijkstra
- String
- Trie
- binary search
- two pointer
- Stored Procedure
- DP
- 다익스트라
- Hash
- 그래프
- 이진탐색
- Two Points
- SQL
- MYSQL
- Today
- Total
codingfarm
4. 명령 목록을 이용한 다중 스레드 활용 본문
Direct3D 12는 다중 스레드를 효율적으로 활용할 수 있도록 설계되었다. Command List의 설계는 Direct3D가 multi thread 적용의 장점을 취하는 한 방법이다. 물체가 많은 큰 장면을 다룰 때, 장면 전체를 하나의 명령 목록으로 그리려 한다면 Command list를 구축하는 데 시간(CPU 시간)이 오래 걸린다. 이에 대한 자명한 해결책은 여러 개의 command list을 병렬로 구축하는 것이다. 가령 thread 네개를 띄워서 각자 하나의 command list를 구축하데 하면, 전체적인 시간이 기존의 25%로 줄어든다.
다음은 Command list 구축에 다중 스레드를 적용할 때 주의해야 할 점 몇가지이다.
1. Command list는 자유 스레드(free-threaded) 모형을 따르지 않는다. 즉, 보통의 경우 여러 스레드가 command list를 공유하지 않으며, 그 메서드들을 동시에 호출하지 않는다. 따라서, 일반적으로 각 thread는 각자 자신만의 command list를 가지게 된다.
2. command allocator는 free-threaded가 아니다. 즉, 보통의 경우에 여러 thread가 같은 command allocator를 공유하지 않으며, 그 메서드들을 동시에 호출하지 않는다. 따라서, 일반적으로 각 thread 는 각자 자신만의 command allocator를 가지게 된다.
3. command queue는 free-threaded 모형을 따른다. 즉, 여러 thread가 같은 command queue에 접근해서 그 method들을 동시에 호출할 수 있다. 특히, thread들이 각자 자신이 생성한 command list을 동시에 command queue에 제출할 수 있다.
4. 성능상의 이유로, 응용 프로그램은 동시에 기록할 수 있는 command list들의 최대 개술르 반드시 초기화 시점에서 설정해야 한다.
단순함을 위해, 이 포스팅 시리즈에서는 다중 스레드를 사용하지 않는다. DirectX SDK의 Multithreading12 예제를 공부해서 명령 목록들의 병렬적 생성 방법을 파악하길 권한다. 시스템 자원 사용을 극대화하려는 응용 프로그램은 반드시 multi-thread를 이용해서 다중 CPU 코어들의 장점을 최대한 활용할 필요가 있다.
'computer graphics > DX12 book' 카테고리의 다른 글
4. 시간 측정과 애니메이션 (0) | 2021.02.07 |
---|---|
4. Direct3D의 초기화 (0) | 2021.01.25 |
4. 자원 상태 전이(Resource Transitions) - 작성중 (0) | 2021.01.25 |
4. CPU와 GPU의 상호작용(Command List, Queue, Allocator) (1) | 2021.01.14 |
4. 기능 수준(feature level) (0) | 2021.01.11 |