Not so fast
이전 파트에서 3D 렌더링 커맨드가 GPU로 전달되기 전 PC에서 거치게 되는 여러 스테이지에 대해 설명했습니다. 이 설명은 짧은 버전입니다. command processor의 이름을 들먹이며 커맨드 버퍼와 관련해 무엇을 어떻게 하는지에 대해 언급하며 끝냈었는데 사실은 거짓말입니다. 우리는 사실 command processor를 처음 만나는 것이고 command buffer는 메모리를 통한다는 것을 알아야 합니다(PCI Express를 통해 접근되는 시스템 메모리 혹은 로컬 비디오 메모리). 우리는 순서대로 파이프라인을 살펴볼것이기 때문에 command processor 전에 메모리에 대해 먼저 이야기할 것입니다.
The memory subsystem
GPU는 통상적인 memory subsystem이 아닙니다. 우리가 보통 general-purpose CPU나 다른 하드웨어에서 볼 수 있는 것과는 다릅니다. 이것은 GPU가 매우 다른 사용패턴을 위해 디자인되어있기 때문입니다. GPU의 memory subsystem과 일반 머신 간에는 두가지의 근본적인 차이점이 있습니다.
첫번째는 GPU memory subsystem이 빠르다는 것입니다. 심각하게 빠릅니다. Core i7 2600k 같은 경우에는 19GB/s 메모리 대역폭을 갖고 GeForce GTX 480은 180GB/s 메모리 대역폭으로 매우 큰 차이를 갖습니다.
두번째는 GPU memory subsystem이 느리다는 것입니다. 심각하게 느립니다. Nehalem(Core i7 1세대)에서 메인메모리로의 캐시미스는 AnandTech에 의해 알려진 memory latency를 clock rate로 곱하면 140 cyle 정도가 됩니다. GeForce GTX 480은 400~800 memory access latency를 갖습니다. cycle로만 비교했을때 4배 정도의 차이가 있습니다. Core i7은 2.93GHz 이고 GTX480은 1.4GHz라는 걸 고려하면 여기서 또 2배 차이가 납니다. 이렇게 엄청난 차이가 또 발생합니다. 나의 상식이 흔들리고 있습니다.
GPU는 bandwidth에서 엄청나게 큰 증가를 얻었지만 그로 인해 latency 또한 증가했습니다. GPU는 레이턴시에 대한 처리가 전부라고 할 수 있습니다. 아직 도달하지 않은 것을 처리하기 위해 기다리지 말고 차라리 다른 것을 하라는 것이 GPU의 원칙입니다.
이게 GPU memory에 대해 알아야할 대부분의 내용이지만 하나 남은 건 뒤에서 중요하게 다룰 DRAM tidbit입니다. DRAM 칩은 논리/물리적으로 2D grid로 구성되어있습니다. 수평 수직 라인이 있습니다. 그 라인들의 교차점에 transistor와 capacitor가 있습니다. 여기서 중요한 포인트는 DRAM의 주소 위치가 row address와 column address로 나눠진다는 것입니다. 그리고 DRAM read/write는 내부적으로 항상 동시에 주어진 row의 모든 column에 접근하게 됩니다. 이것은 다수의 row의 메모리에 접근하는 것보다 하나의 row에 맵핑된 메모리에 접근하는 것이 훨씬 싸다는 것을 뜻합니다.
The PCIe host interface
Some final memory bits and pieces
At long last, the command processor!
Synchronization
Closing remarks
원문 : https://fgiesen.wordpress.com/2011/07/02/a-trip-through-the-graphics-pipeline-2011-part-2/
'graphics > Graphics Pipeline' 카테고리의 다른 글
[번역] part1 : Introduction; the Software stack (WIP1) (0) | 2022.10.24 |
---|