반응형
- Work stealing
- Dependency Graph
- Barrier
- Context switch를 줄이고 작업을 하는데 주로 스레드를 사용하여 오버헤드를 줄이고 코어 사용률을 높임
- 각 스레드가 각 단계에서 처리속도가 차이나면? 빨리 작업을 완료한 스레드가 다른 스레드의 work의 일부를 가져오는 로직을 작성하면 된다(Work stealing)
https://www.youtube.com/watch?v=M1e9nmmD3II
게임이란 CPU를 독점해서 최대한의 성능을 내는 프로그램 중 하나이다.
멀티 스레딩을 이용하려면 코어 2개에 각 50%씩 작업량을 적절히 분배해야 함.
정확히 어떤 작업량을 분리해야 하나? -> 일단 게임 운영에 가장 타격이 없는 것을 바꾸어 보자.업데이트와 렌더링 하는 작업을 분리메인 스레드 - 업데이트 후 렌더 스레드에 데이터를 복사 / 렌더 스레드가 그리는 동안 다음 프레임을 업데이트
렌더 스레드 - 업데이트 된 데이터를 그린다. 물론 두 작업량의 시간 차이가 많이 나는 게임도 있음. OK 코어 2개까진 이렇게. 하지만 코어가 2개 이상으로 늘면? 코어가 4개가 되면 25%만 점유를 하게 된다.업데이트, 렌더, 피직스, 오디오 등 이러한 프로세스 및 액션을 분리하지 말고 데이터를 위주로 나누자.
댓글