멀티 스레드

    멀티 스레드(Thread)의 장점과 문제점

    쓰레드(Thread)의 개념 쓰레드는 프로세스를 여러 개로 나눈 조각과 갖다고 설명할 수 있다. 워드를 사용하는 경우를 예로 들자. 워드에서 글자를 입력하는 동안 파일을 주기적으로 자동저장하고, 내용을 프린터에 출력하고 있고, 입력하는 동안 자동으로 맞춤법 검사를 수행한다. 사용자의 입력을 받는 동안 행하는 이 모든 작업들은 각각의 쓰레드에 의해서 이루어진다. 글자를 입력 받는 쓰레드, 파일을 디스크에 저장하는 쓰레드, 출력할 내용을 프린터에 보내는 쓰레드, 입력하는 동안 맞춤법 검사를 수행하는 쓰레드 등이 있다. 즉, 워드라는 큰 프로세스 하나에 여러 개의 쓰레드가 모여있는 것이다. 실제로 프로세스는 하나의 어드레스 공간을 갖고 있고, 모든 응용 프로그램은 메인 응응 프로그램을 위한 하나의 쓰레드를 갖..

    멀티 스레드 렌더링 (Multi Thread Rendering)

    왜 해야할까? Direct3D 11 이전의 그래픽스 API는 단일 스레드에서 실행되는 것을 중점으로 두고 설계되었다. 암시적인 동기화 지점이 존재해서 API를 호출하고 난 다음 GPU의 처리가 완료 되었을 때 이후의 코드가 실행된다, 문제는 이렇게 순서를 맞춰서 진행하는 방식은 CPU와 GPU를 최대로 활용하지 못하는 점이다. CPU 계산 중에 GPU는 제출된 명령이 없기 때문에 아무런 일도 하지않고 CPU의 처리를 기다리게 되고 렌더링 중에는 동기화 지점으로 인해서 CPU는 GPU의 처리가 끝날 때 까지 기다리게 된다. 따라서 CPU와 GPU가 비효율적으로 사용되지 않도록 스레드를 분리하여 렌더링과 CPU 계산이 동시에 이뤄지도록 해야한다. GPU가 무언가를 그리도록 요청하기 위해서 그래픽스 API를 ..