Multithreaded Rendering 왜해야할까?
문제는이렇게순서를맞춰서진행하는방식이CPU와GPU를최대로사용하지
못한다는점입니다.
CPU 계산중에GPU는제출된명령이없기때문에아무런일도하지않고CPU
의처리를기다리게되고렌더링중에는동기화지점으로인해서CPU는GPU
의처리가끝날때까지기다리게됩니다.
6
프로그램실행흐름
N프레임CPU계산 N프레임렌더링 N+1프레임CPU계산 N+1프레임렌더링
대기 대기 대기
Data Race
첫번째는스레드간데이터경합입니다 .다음과같이게임로직과렌더링이
별도의스레드에서 이뤄지고있는상황을생각해보도록 하겠습니다 .
그리고여기에는화면에그려질수있는게임오브젝트A가있습니다.
13
Game thread Rendering thread
AA A
Data Race
게임스레드는A에대한게임로직을수행하고렌더링스레드에서는 A를화면에
그립니다.
즉A는두개의스레드가공유하고있는자원입니다 .
14
Game thread Rendering thread
AA A
위치갱신등의게임로직적용
위치와같은데이터참조
Data Race
만약게임로직에따라서A라는오브젝트가 삭제되는데렌더링스레드가A를
참조하고있는상황이라면 게임스레드가A를바로삭제하는것은문제가됩니다.
따라서렌더링스레드가A를참조하지않을때까지A의삭제는유보돼야합니다.
15
Game thread Rendering thread
AA A
모종의이유로A가삭제
삭제된데이터에접근할가능성
Data Race
두번째는GPU와의경합입니다 . GPU에서A를그리기위한셰이더코드가
실행되고있는경우를생각해보겠습니다 .
GPU는그래픽카드메모리로전송된물체의위치나재질을참조하여물체를
어디에어떻게그려야할지를결정합니다 .
16
CPU GPU
물체위치
카메라위치
재질
ETC
A A
Data Race
이런상황에서CPU가A의상태를업데이트하고 이결과를그래픽카드로메모
리로전송하면A를그리고있는도중에참조하고있던데이터의값이변경될수
있습니다.
17
CPU GPU
물체위치
카메라위치
재질
ETC
A A
물리적용등으로위치가
갱신되어이를적용
GPU에서참조하고있는위치
값도갱신되어버림
Data Race
경합해결전략
스레드간의데이터경합그리고CPU와GPU간의데이터경합을해결하기
위한전략은게임의세상을2가지로나누는것입니다.
게임의세상을게임스레드를위한World와렌더링스레드를위한Scene으로
나눕니다.
18
Game
World Scene
Data Race
경합해결전략
Scene은World의복제본인데렌더링에관련된데이터에만 복사해온렌더링을
위한세상입니다 .
그리고게임스레드는World만을수정하고렌더링스레드는Scene만을수정
하도록엄격하게제한합니다 .
19
Game
World Scene
복제
A
B
C
A
B
C
Data Race
경합해결전략
다음과같이게임스레드가월드의A를삭제해도Scene에는영향이없기
때문에삭제된오브젝트에 접근해서문제가발생하는경우를방지할수있습니
다.
그럼Scene의A는어떻게삭제해야할까요?
21
Game
World Scene
복제
A
B
C
A
B
C
Data Race
경합해결전략
A는게임로직에따라서삭제되었습니다 . World는게임스레드에서 수정할수
있으니삭제가가능했지만 Scene은렌더링스레드에의해서만수정되야하기
때문에게임로직에서이를삭제할수없습니다.
그러므로스레드접근제한을준수하기위해서게임스레드는렌더링스레드가
A를삭제하도록 요청해야합니다.
22
Game
World Scene
복제
A
B
C
A
B
C
Data Race
경합해결전략
스레드에대한요청은스레드의전용큐를통해서이뤄집니다 .
A가삭제될경우게임스레드는A에대한삭제요청을렌더링스레드큐에집어
넣고렌더링스레드는적절한때에큐의요청을처리하게됩니다.
23
Game
World Scene
복제
A
B
C
A
B
C
A를제거할것
Rendering Thread 전용Queue
Data Race
경합해결전략
전용큐는각스레드당하나로제한하였는데 이는다른스레드의요청이순서를
지켜실행돼야하기때문입니다 .
‘A 물체의위치업데이트-> 게임장면그리기-> A 물체의삭제’
와같은요청이순서가보장되지않아
‘A 물체의삭제-> A 물체의위치업데이트-> 게임장면그리기’
와같은순서로실행되면의도하지않은동작이기때문입니다 .
26
Data Race
경합해결전략
이러한방법은게임로직과렌더링을마치클라이언트 서버모델과유사하게
다루게합니다.
27
Client Internet Server
Game
Logic
Queue Rendering