기록공간

[DirectX 12]기본지식 - 명령 목록을 이용한 다중 스레드 활용(개요) 본문

DirectX/기초

[DirectX 12]기본지식 - 명령 목록을 이용한 다중 스레드 활용(개요)

입코딩 2020. 2. 25. 20:15
반응형

Direct3D 12는 다중 스레드를 효율적으로 활용할 수 있도록 설계되었다. 명령 목록의 설계는 Direct3D가 다중 스레드 적용의 장점을 취하는 한 방법이다. 물체가 많은 큰 장면을 다룰 때, 장면 전체를 하나의 명령 목록으로 그리려 한다면 명령 목록을 구축하는 데 시간(CPU 시간)이 오래 걸린다.

 

이에 대한 해결책은 여러 개의 명령 목록을 병렬로 구축하는 것이다. 예를 들어 스레드 네 개를 띄워서 각자 하나의 명령 목록을 구축하게 하면, 전체적인 시간이 기존의 25%로 줄어든다.

 

다음은 명령 목록 구축에 다중 스레드를 적용할 때 주의해야 할 점 몇 가지이다.

 

  1. 명령 목록자유 스레드(Free-thread) 모형을 따르지 않는다. 즉, 보통의 경우 여러 스레드가 같은 명령 목록을 공유하지 않으며, 그 메서드들을 동시에 호출하지 않는다. 따라서, 일반적으로 각 스레드는 각자 자신만의 명령 목록을 가지게 된다.

  2. 명령 할당자자유 스레드가 아니다. 즉, 보통의 경우 여러 스레드가 같은 명령 할당자를 공유하지 않으며, 그 메서드들을 동시에 호출하지 않는다. 따라서, 일반적으로 각 스레드는 각자 자신만의 명령 할당자를 가지게 된다.

  3. 명령 대기열자유 스레드 모형을 따른다. 즉, 여러 스레드가 같은 명령 대기열에 접근해서 그 메서드들을 동시에 호출할 수 있다. 특히, 스레드들이 각자 자신이 생성한 명령 목록을 동시에 명령 대기열에 제출할 수 있다.

  4. 성능상의 이유로, 응용 프로그램은 동시에 기록할 수 있는 명령 목록들의 최대 개수를 반드시 초기화 시점에서 설정해야 한다.

책과 교수님의 수업 등에서는 다중 스레드 활용에 관하여 배우지 않을 뿐더러 사용도 하지 않았기 때문에 이 정도만 언급을 한다. 다중 스레드 활용은 최적화에서는 없어서는 안될 것이지만, CPU를 최대로 사용하여 CPU의 성능을 극한으로 끌어 올려야 하는 경우가 아니라면 섯불리 적용하는 것은 가독성 면에서나 구현 난이도 면에서나 큰 어려움을 가져올 수 있다.

 

책에서는 DirectX 12와 멀티코어 프로그래밍에 대한 공부가 어느정도 마친 자라면 DirectX SDK의 Multithreading12 예제를 공부해서 명령 목록들을 병렬적으로 생성하는 방법을 습득하는 것을 권하고 있다. 시스템 자원 사용을 극대화하려는 응용 프로그램은 반드시 다중 스레드를 이용해서 CPU 코어들의 장점을 최대한 활용할 필요가 있기 때문이다.

반응형
Comments