Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

codingfarm

4. 명령 목록을 이용한 다중 스레드 활용 본문

computer graphics/DX12 book

4. 명령 목록을 이용한 다중 스레드 활용

scarecrow1992 2021. 1. 25. 00:40

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 코어들의 장점을 최대한 활용할 필요가 있다.

Comments