그래픽스

CPU와 GPU는 병렬로 작동하지만, 종종 동기화가 필요하다. 동기화는 한 처리 장치가 작업을 마칠 때 까지 다른 처리 장치가 놀고 있어야 함을 의미하며, 성능에 바람직 하지 않다. 동기화는 병렬성을 망친다. 4.2.1 명령 대기열과 명령 목록 GPU에는 명령 대기열 (command queue)가 있다. CPU는 그리기 명령들이 담긴 명령 목록(command list)을 Direct3D API를 통해서 그 대기열을 제출한다. 하지만 그 명령들을 즉시 GPU가 실행하는 것은 아니다. 처리할 준비가 되어야 비로소 실행되기 시작한다. 즉, 명령들은 대기열에 남아 있는다. 명령 대기열이 비면 GPU는 할 일이 없어 놀게 된다. 반대로 대기열이 꽉 차면, 대기열에 자리가 생길 때까지 CPU가 논다. 고성능 응용 ..
4.1 기본지식 4.1.1 Direct3D 12의 개요 Direct3D는 응용 프로그램에서 GPU를 제어하고 프로그래밍하는 데 쓰이는 저수준 그래픽 API이다. 이를 통해 3차원 세계를 렌더링 할 수 있게 된다. Direct3D라는 간접층과 하드웨어 드라이버가 Direct3D 명령들을 시스템의 GPU가 직접 이해하는 고유한 기계어 명령들로 번역해 주므로, 개발자는 GPU의 세부사항까지 걱정할 필요가 없다. Direct3D 12가 이전 버전들에 비한 주된 개선점은 CPU 부담을 크게 줄이고 다중 스레드 지원을 개선하기 위해 설계를 다시 했다는 점이다. 이를 위해 훨씬 낮은 수준의 API가 되었다. 이전보다 추상화가 줄었고, 개발자가 손수 관리해야 할 사항들이 늘어났으며, 현세대 GPU 구조들을 좀 더 밀접..
3.1 선형변환 행렬 표현 위의 함수는 3차원 벡터 하나를 입력받아서 3차원 벡터 하나를 출력한다. 만일 함수가 위와 같은 성질들을 만족한다면, 그리고 오직 그럴 때에만, 선형 변환(linear transformation)이라고 부른다. 여기서 u와 v는 임의의 3차원 벡터이며 k는 스칼라이다. u = (x, y, z)라고 할 때, 이를 항상 다음과 같이 표현할 수 있음을 주목하자. 벡터 i, j, k는 현재 좌표계의 축들과 같은 방향인 단위벡터들이다. 이들을 표준기저 벡터(standard basic vector)라고 부른다. 하나의 선형변환은 그 선형성에 의해 다음이 성립한다. 이를 벡터와 행렬의 곱으로 표현할 수 있다. 이러한 행렬 A를 선형변환의 행렬 표현이라고 부른다. A를 곱하면 선형 변환의 결..