NVIDIA와 ATI(AMD)의 GPU는 벌써 10세대가 넘었으며, 각 세대의 발전마다 마이크로소프트 다이렉트 X API 버전이 같이 업데이트되었습니다. 마이크로소프트의 업데이트 주기에 더 가까울수록, 누가 더 최신 버전의 다이렉트 X API를 지원하느냐에 따라, 가지게 되는 상징적인 의미도 클 것입니다. 다이렉트 X 8.1이 라데온 8500에게 제공한 도움이 별로 크지 않았고, 다이렉트 X 10.1은 라데온 HD 3000 시리즈에 선전용 그 이상의 의미가 없었긴 했지만. 다이렉트 X의 지원 여부와 GPU의 아키텍처에는 직접적인 관계가 있다는 사실은 변하지 않습니다.

 

따라서 이번에는 GPU의 트랜지스터 수, 파이프라인/스트림 프로세서, 제조 공정, 클럭, 기타 기능 같은건 이야기하지 말고. 오직 GPU의 아키텍처와 다이렉트 X에 대해서만 이야기하도록 하겠습니다.

 

 

다이렉트 X 7.0의 특징. 하드웨어 T&L

 

다이렉트 X 5.0 이전까지, 마이크로소프트가 윈도우즈 운영체제 내부에 통합시간 그래픽 API-그러니까 다이렉트 X-는 빛을 보지 못했습니다. 당시의 그래픽카드와 게임은 모두 OpenGL과 글라이드(3Dfx의 전용 API)를 사용했고, 다이렉트 X는 계속하여 발전되어 왔지만 줄곧 경쟁상대를 넘어서진 못했습니다. 다른 방면으로는 도스 시스템의 게임이 윈도우즈보다 여전히 더 큰 비중을 차지하였고, 또 다른 쪽에서는 마이크로소프트가 게임 개발사에게 별다른 영향력을 주지 못하던 때이기도 했습니다.

 

윈도우즈 95의 발표 이후, 새로운 그래픽 유저 인터페이스는 업계를 흥분시키기에 충분하였습니다. 90%의 시장 점유율은 전체 업계의 수요에 직접적인 움직임을 주었고, 전세계 하드웨어 제조사들이 부득불 대책을 세우게 만들었습니다. 윈도우즈 95에 내장된 다이렉트 X 6.0은 OpenGL/글라이드에 대항할만한 실력을 가지고 있었고, 기술적인 특징을 잘 모르는 사람들 때문에 다이렉트 X의 영향력은 갈수록 커지게 되었습니다.

 

 

다이렉트 X 7.0의 권위를 늘려준 핵심 기술 T&L

 

다이렉트 X 7.0은 혁명적인 개선점이 있었는데, 그 제일 큰 특징은 바로 하드웨어적으로 Transform과 Lighting(T&L, 좌표 치환과 광원 효과)를 지원한다는 것입니다.

 

1.jpg

 

3D 게임 중에 등장하는 어떤 오브젝트이건 저마다 고유한 좌표를 가지고 있습니다. 오브젝트가 움직일때 그 좌표도 변하게 되는데, 이것을 바로 좌표 치환이라고 합니다. 3D 게임 중에서 배경과 오브젝트는 빛을 필요로 합니다. 빛이 없다면 3D 오브젝트의 표현을 볼 수 없으며, 실시간 3D 게임이건 3D 동영상 렌더링이건, 제일 많은 리소스를 차지하는 것이 바로 광원 효과입니다.

 

2.jpg

 

3.jpg

 

하드웨어 T&L 기술 기반 데모

 

T&L이 등장하기 이전에 좌표 치환과 광원 효과는 모두 CPU에서 연산하였습니다. CPU의 속도가 빨라지면 빨라질수록 게임도 더 유창하게 실행되는 것이지요. T&L 기능을 그래픽카드에서 실현하게 되면서 CPU는 과중한 작업에서 벗어나고, 그 외에 다른 작업- 예를 들면 로직 연산, 데이터 계산 등을 하게 되었습니다. 말을 바꿔서 말하면 다이렉트 X 7 그래픽카드의 하드웨어 T&L은 게임을 렌더링할때 CPU의 성능을 높이지 않고도 원활하게 3D 게임을 할 수 있도록 해주었다는 것이 되겠습니다.

 

 

다이렉트 X 7.0 아키텍처 : 최초의 GPU 지포스 256 (NV10)의 탄생

 

T&L 기술의 우수한 특징은 업계의 관심을 받았으며, 따라서 다이렉트 X 7과 T&L을 지원하는 그래픽카드가 자연히 기대를 모으게 되었습니다. NVIDIA의 지포스 256이 바로 이 시대에 나온 제품으로, 그 선진적인 기술 특징 때문에 NVIDIA는 지포스 256의 그래픽 코어를 GPU(Graphic Processing Unit)이라고 명명하였습니다.

 

지포스 256에 사용한 핵심 기술은 하드웨어 T&L 외에도 서라운드 환경 텍스처 맵핑, 버텍스 블렌딩, 텍스처 압축, 버프 맵핑, 픽셀 파이프라인 4개로 한번의 사이클에 2개의 텍스처 맵핑을 처리, 256비트 렌더링 엔진, NSR에서 단일 픽셀에 7개의 연산을 지원 등이 있습니다. 성능을 대폭 상승함과 동시에 3D 게임의 화질도 대폭 상승하게 되었습니다.

 

4.jpg

 

이후에 발표된 지포스 2 GTS는 지포스 256의 속도를 높인 버전으로, 아키텍처와 스펙, 사용 기술은 큰 변화가 없습니다. 따라서 지포스 256이 당시 GPU의 전체적인 아키텍처를 성립시켰다고 할 수 있습니다. 지포스 256은 전문적인 좌표 치환과 광원 엔진, 셋업 엔진, 렌더링 파이프라인, 후처리 모듈 등을 가지고 있는데 이런 기능은 기본적으로 지금까지 계속 사용되고 있습니다.

 

 

양강 구도의 형성 : 라데온 256

 

다이렉트 X 7의 발전 기세가 두드러지면서 ATI도 최초의 다이렉트 X 7 그래픽카드를 발표하게 되었습니다. 그 이름은 NVIDIA와 라데온 256이었습니다. 이로서 NVIDIA와 ATI, 지포스와 라데온의 숙명적인 대결이 시작되었습니다.

 

5.jpg

 

라데온 256의 독특한 파이프라인은 3개의 텍스처를 처리.

 

라데온 256도 똑같이 하드웨어 T&L, 환경 맵핑, 범프 맵핑을 지원하며 하이퍼와 DOT3 압축 기술을 지원합니다. 라데온 256은 비록 2개의 파이프라인만 지원하였지만 각각의 파이프라인은 3개의 텍스처 유닛과 연결되었다는 특징이 있습니다. 이에 비해 지포스 256의 파이프라인은 1개의 텍스처 유닛만 가지고 있고 지포스 2 GTS부터 2개로 늘어났습니다. 유감인 것은 라데온 256이 출시됐을 때부터 단종될 때까지, 라데온 256의 세번째 텍스처 유닛을 지원하는 프로그램이 없었다는 것입니다. 거기에 드라이버 문제도 한몫 했습니다.

 

라데온 256에서 파생된 라데온 VE/LE/SE등은 모두 우수한 제품이었으며, 그 기술과 아키텍처는 지포스 시리즈를 이길 수가 없고 기능도 더 풍부했습니다. 하지만 부족한 소프트웨어/하드웨어 지원은 라데온이 지포스에 제대로 맞설 수가 없게 만든 원인이었으며, 사람들의 인지도도 많이 부족했습니다.

 

 

다이렉트 X 7 아키텍처, 하드웨어 스펙이 곧 성능을 결정

 

지포스 256과 라데온 256의 기본 아키텍처는 같지만 파이프라인 설계가 다릅니다. 지포스 256은 더 많은 4개의 파이프라인을 사용하지만 텍스처 유닛은 4개밖에 없습니다. 라데온 256은 오직 2개의 파이프라인밖에 없지만 각각의 파이프라인이 3개의 텍스처 유닛을 사용할 뿐만 아니라 클럭도 더 높아 이론적인 성능은 높습니다.

 

당시에는 게임에 대량의 각종 텍스처 맵핑을 사용하였기에, 텍스처 유닛에 대한 요구가 매우 높았습니다. 따라서 NVIDIA가 지포스 2 GTS에서 1개의 파이프라인에 2개의 텍스처를 처리하도록 바꾼 것입니다. NVIDIA는 파이프라인:텍스처의 비율을 1:2로, ATI는 1:3의 비율로 오랜 시간동안 유지해 오다가 다이렉트 X 9 시대에 와서야 변화가 생기게 됩니다.

 

 

다이렉트 X 8.0 : 픽셀과 버텍스 파이프라인을 도입

 

그래픽 계산에서 GPU가 자신의 방향을 찾게 되면서, 사용자들에게 더 좋은 그래픽을 보여주게 되었지만. GPU 아키텍처에는 여전히 문제가 남아 있습니다. 그 첫번째 문제는 더 복잡하고 변화가 많은 그래픽 효과를 내기 위해서 삼각형의 생성과 고정된 빛/그림자 치환에만 의존할 수 없다는 것입니다. 비록 당시 게임 화면의 화질 상승이 대량의 폴리곤과 복잡한 맵핑을 통해서 이루어졌다고 해도 말입니다.

 

하지만 발전 과정 중에서 버텍스와 픽셀의 연산 요구량이 맹렬하게 늘어나게 됐습니다. 각각의 버텍스는 픽셀 데이터, 산란광과 반사광에서의 색채 표현 같은 여러 정보를 가지고 있어, 버텍스를 사용하여 폴리곤을 만들었을때 버텍스의 소유 정보로 부가 연산을 할 수 있고, 이를 통해 더 많은 효과를 낼 수 있습니다. 하지만 이것은 버텍스와 픽셀의 연산량을 더 늘리는 일이기도 합니다.

 

6.jpg

 

 

왼족은 다이렉트 X 8.0 그래픽의 아키텍처. 벡터 조작으로 출발, 버텍스 쉐이더에서 지오메트리 조작을 거쳐, 버텍스 데이터를 얻어내고, 픽셀 쉐이더에서 픽셀 조작을 고쳐 그래픽이 출력됩니다.

 

오른쪽은 다이렉트 X 8.0 파이프라인. 원시 데이터와 내장된 데이터가 버텍스 쉐이더와 t-n-1을 거쳐서 트라이앵글 셋업이 됩니다. 여기까지가 버텍스 조작. 나중에 멀티 텍스처 맵핑과 픽셀 쉐이더를 거쳐 스모크 조작을 하는 곳 까지가 픽셀 조작. 나중에 버퍼에 저장됩니다.

 

2001년에 마이크로소프트가 다이렉트 X 8.0을 발표하여 그래픽카드의 혁명이 시작됩니다. 처음으로 쉐이더 모델의 개념을 도입하였는데, 쉐이더 모델은 GPU의 그래픽 렌더링의 명령어 셋트입니다. 그 중에 픽셀 쉐이더 엔진과 버텍스 쉐이더 엔진은 모두 쉐이더 모델 1.0의 일부분이며, 나중에 다이렉트 X가 큰 버전업을 할 때마다 쉐이더 모델도 새로운 버전으로 업그레이드되고, 기술적인 특징도 크게 늘어나게 됩니다.

 

다이렉트 X 7에서 도입된 하드웨어 T&L은 고정된 빛과 그림자의 치환을 하는데 불과했지만, 버텍스 쉐이더와 픽셀 쉐이더 유닛은 더 다양한 용도로 사용할 수 있습니다. 버텍스/픽셀 쉐이더는 GPU를 진정한 프로그래머블 프로세서로 만들어 주었으며, 지금의 다이렉트 X 11 시대까지 쉐이더 모델은 멈추지 않고 업데이트되어 더 좋은 화면을 그려내고 있습니다. 이것은 프로그래머가 3D 장면을 구축하는 난이도가 대폭 줄어들었다는 것을 의미하지만, 당시에 프로그래머블 특성이 매우 약했기 때문에 GPU가 이 부분에서 너무 시대를 앞서갔다고 할 수 있습니다.

 

7.jpg

 

8.jpg

 

9.jpg

 

10.jpg

 

11.jpg

 

12.jpg

 

다이렉트 X 8의 동적인 빛/그림자 효과. 카멜레온의 색이 변하고, 각도에 따라 사람의 얼굴이 달라집니다.

 

다이렉트 X 8.0의 픽셀 쉐이더와 버텍스 쉐이더의 도입으로, GPU가 하드웨어 로직에서 픽셀 쉐이더와 버텍스 쉐이더의 프로그래머블을 제대로 지원하게 되었습니다. 이로서 특수 효과의 동적인 빛/그림자 효과와 수면에 반사되는 빛 같은 현실적인 장면을 그려낼 수 있게 되었습니다.

 

하지만 다이렉트 X 8의 보급은 그리 순조롭지 않았습니다. 주요 원인은 다이렉트 X 8 그래픽카드의 가격이 너무 비싸, NVIDIA와 ATI 모두 저가형 다이렉트 X 8 그래픽카드를 출시하지 않았고, 제일 많이 팔리는 제품이 모두 다이렉트 X 7 그래픽카드였다는 것입니다. 다이렉트 X 9가 탄생된 후에야 두 회사는 고급형 다이렉트 X 8 그래픽카드를 저가형 제품으로 바꿔 출시하게 되었습니다.

 

 

최초의 다이렉트 X 8 그래픽카드 : 지포스 3 Ti

 

다이렉트 X 8 이전에 NVIDIA건 ATI건 모두 그래픽카드의 프론트 엔드와 백 엔드 출력을 강조하였습니다. 그러나 쉐이더의 개념에 등장한 이후로 두 회사는 경쟁의 중심을 그래픽카드의 렌더링 코어 부분- 픽셀 렌더링 파이프라인과 버텍스 렌더링 파이프라인-으로 옳기게 되었습니다. 지포스 3 Ti건 라데온 8500이건 모두 고클럭의 픽셀 쉐이더와 버텍스 쉐이더 유닛을 내장하고 있습니다. 물론 그래픽카드 백 엔드의 ROP(라스터라이저 엔진. 픽셀을 완성하여 출력하는 역할)에도 이에 상응하는 개선이 이루어져, 각양 각색의 멀티 샘플링 안티 얼라이싱 모드와 텍스처 필터링이 실현되게 되었습니다.

 

13.jpg

 

 

위 그림은 지포스 3의 코어 아키텍처입니다. 다이렉트 X 8 렌더링 모드의 변화로, 지포스 3은 상대적으로 다이렉트 X 7의 지포스 2나 256에 비교하여 큰 변화가 생기게 되었는데, 위 그림에서 녹색으로 표시된 부분이 모두 새로 설계되었습니다.

 

14.jpg

 

 

지포스 3의 버텍스 파이프라인 설계

 

하드웨어 스펙을 보면 지포스 3은 여전히 4개의 렌더링 파이프라인을 가지고 있으며, 각각의 파이프라인은 2개의 텍스처 유닛을 가지고 있어, 이 점은 이전의 지포스 2와 구별이 없습니다. 하지만 지포스 3의 코어 트랜지스터 수는 지포스 2의 두배 이상으로 늘어났는데, 별도로 늘어난 트랜지스터는 버텍스 파이프라인이 해당되는 부분입니다. 비록 버텍스 유닛이 하나밖에 없긴 하지만. 이 버텍스 쉐이더 유닛은 사실 4D SIMD(Single Instruction Multiple Data) 프로세서로, 최대 16개의 버텍스 데이터를 계산할 수 있습니다. 이것은 당시 기준으로 볼때 연산 성능을 대폭 강화시킨 것입니다.

 

하지만 당시의 메인스트림 게임은 여전히 다이렉트 X 7로 개발되어, 지포스3의 버턱스 쉐이더 유닛은 많은 경우 사용되지 않고 놀게 되었습니다. 이것이 지포스 3가 다이렉트 X 7 게임에서 지포스 2 Ti보다 그리 크게 앞서지 못한 이유입니다. 왜냐하면 두 제품의 픽셀 렌더링 파이프라인과 텍스처 유닛의 수는 같으며, 클럭도 그리 많이 오르지 않았기 때문입니다.

 

 

ATI, 다이렉트 X 8.1을 직접 도입 : 라데온 8500

 

다이렉트 X 8의 지원에서 ATI는 NVIDIA보다 늦춰지게 되었지만, 그 대신 ATI는 바로 다이렉트 X 8.1로 건너갔습니다. 따라서 하드웨어 스펙에서 더 높은 단계로 올라간 셈입니다. 하지만 다이렉트 X 8.1의 개선은 한정되어 있으며, 큰 텍스처의 물결 무늬 등을 그릴 때의 성능만 개선되었을 뿐입니다. 따라서 전체 업계의 주목을 받진 못했습니다.

 

15.jpg

 

라데온 8500의 아키텍처. 영어니까 설명은 안합니다.

 

라데온 HD 8500과 다이렉트 X 7 버전의 라데온 시리즈를 비교하면, 아키텍처 부분에서 커다란 변화가 생겼습니다. 버텍스 엔진을 추가한 것 이외에, 더 많은 실험적인 기술이 추가되었으며, 2D 출력 기능도 더 풍부해졌습니다. 한마디로, 기능이나 기술만 놓고 보면 지포스 3 Ti를 완전히 초월한 것입니다.

 

스펙의 경우, 라데온 8500은 4개의 픽셀 렌더링 파이프라인을 가지고 있는데 이것은 지포스 3와 같습니다. 하지만 라데온 8500은 2개의 버텍스 쉐이더 유닛을 가지고 있으며, 이에 비해 지포스 3은 오직 1개만 가지고 있어 라데온 8500의 이론적인 성능은 더 높을 수밖에 없습니다. 텍스처 유닛의 경우 ATI는 파이프라인과 텍스처 유닛의 비율을 1:3에서 1:2로 변경하였습니다. 왜냐하면 세번째 텍스처 유닛이 대다수 게임에서 사용되지 않았기 때문입니다. 이렇게 하여 NVIDIA와 ATI의 텍스처 유닛 수는 완전히 같게 되었습니다.

 

 

다이렉트 X 8. 뛰어난 ATI의 아키텍처. 강력한 NVIDIA의 성능

 

전체적으로 보면 두 회사 모두 새로 설계한 우수한 아키텍처에, 많은 특징의 기능과 기술을 도입하였습니다. 라데온 8500은 지포스 3 Ti보다 확실히 뛰어난 스펙을 가지고 있습니다. 이것은 3DFX가 사라진 이후로 처음으로 NVIDIA에게 직접적인 압력을 준 상대가 등장하였음을 의미합니다. 따라서 NVIDIA는 더 높은 클럭의 지포스 3 Ti 500을 발표하여 비로소 성능에서 우위를 되찾게 되었습니다. 거기에 NVIDIA는 안정적인 드라이버와 높은 인지도로 지포스 3 Ti로 라데온 8500을 압박하였습니다.

 

나중에 NVIDIA는 더 많은 파이프라인을 내장한 지포스 4 Ti 시리즈로 더 강한 성능의 다이렉트 X 8 지원 그래픽카드를 발표하게 됩니다. 하지만 ATI 쪽에서는 이에 비교할만한 제품이 없어 직접적인 비교를 할 순 없겠군요. 왜냐하면 ATI는 바로 다이렉트 X 9 시대로 넘어갔기 때문입니다.

 

 

다이렉트 X 9.0 고정밀도 렌더링 시대의 도래

 

2002년 말에 마이크로소프트가 다이렉트 X 9.0을 발표했습니다. 그 스펙만 본다면 다이렉트 X 9는 다이렉트 X 7이나 다이렉트 X 8에 비해 그리 혁명적인 기술 도입은 없어 보이며, 쉐이더 모델의 버전이 1.0에서 2.0으로 업데이트 되었을 뿐입니다. 하지만 사실은 그렇지 않습니다. 이 쉐이더 모델 명령어 세트의 개선은 그래픽 렌더링 결과물을 새로운 수준으로 높이게 되었습니다.

 

16.jpg

 

먼저, 픽셀 쉐이더 2.0은 완전한 프로그래머블 아키텍처입니다. 텍스처 효과에 맞춰 즉시 연산하여 동적인 텍스처 맵핑을 할 수 있으면서도 비디오 메모리는 차지하지 않습니다. 이론적으로 텍스처 맵핑의 해상도는 무한대로 늘어날 수 있지만, 픽셀 쉐이더 1.4는 오직 28개의 하드웨어 명령어만 지원하며 동시에 6개의 텍스처만 조작할수 있습니다. 반면 픽셀 쉐이더 2.0은 160개의 하드웨어 명령어를 지원하고 동시에 16개 재질을 처리할 수 있습니다. 새로운 고정밀도 부동소수점 데이터는 다중 텍스처 맵핑에 사용할 수 있어, 어떤 길이의 명령어건 조작이 가능합니다. 이로서 영화 수준의 화질을 가볍게 실현하게 되었습니다.

 

17.jpg

 

3D마크03의 제일 마지막 장면은 다이렉트 X 9로 랜더링된 것입니다.

 

다음으로 버텍스 쉐이더 2.0을 통하여 버텍스 명령어를 경우에 맞게 늘릴 수 있게 되면서, 예전 버전보다 버텍스 성능이 현저히 상승하였습니다. 새로운 컨트롤 명령어를 사용하여 통용 계산 어플리케이션에서도 지금까지의 전용 단독 쉐이더 어플리케이션을 사용할 수 있기 되면서 그 효율이 몇배로 늘었습니다. 새로 늘어난 순환 조작 명령어는 작업 시간을 줄여주고 처리 효율을 높여주었습니다. 확장 쉐이더 명령어는 128개에서 256개로 늘었습니다.

 

18.jpg

 

라데온 9700에서 제공하는 HDR 데모

 

그 박에 부동소수점 데이터 처리 기능을 추가하였습니다. 예전에는 정수 데이터만 처리가 가능하였지요. 이렇게 하여 렌더링 정밀도를 높이고 영화 수준의 그래픽을 낼 수 있게 되었습니다. 이전의 PC 그래픽의 수학적인 정밀도의 장애 때문에 그 품질이 제한되었지만, 각각의 파이프라인이 128비트 부동소수점 컬러를 지원하게 되면서 게임 엔지니어들이 더 쉽게 아름다운 효과를 낼 수 있게 되었고, 이렇게 하여 프로그래밍이 더 쉬워지게 되었습니다.

 

 

최초의 다이렉트 X 9 그래픽카드 : 라데온 9700

 

NVIDIA가 지포스 4 Ti로 다이렉트 X 8 시대에서 큰 승리를 거두었을때, ATI는 다이렉트 X 9 표준이 확립되기 전에 라데온 9700 그래픽카들 발표하여, NVIDIA가 제때 손을 쓰지 못하게 하였습니다. 이 제품의 출현은 매우 갑작스런 것이었으며, ATI가 라데온 9700을 발표했을때 이에 관련된 기술 PPT/PDF도 제공되지 않을 정도였습니다.

 

19.jpg

 

고성능 비디오 메모리, 256비트 4채널 DDR 메모리 컨트롤러, 버텍스 처리 엔진, 셋업 엔진, 3D 렌더링 엔진, 스무스비전 2.0 안티 얼라이싱, 영상 처리 엔진, 비디오 출력, 2D 엔진 등등.

 

다이렉트 X8와 비교하여 다이렉트 X 9는 3D 렌더링 스트림에 대한 점이 바뀌지 않았으며, 쉐이더 모델 명령어 셋트만 강화되었을 뿐입니다. 따라서 R300 아키텍처는 R200보다 개선점이 그리 크지 않으며, 그 주요 변화는 규모가 더 커졌다는 것과 외부 컨트롤 모듈이 강화되었다는 것 정도입니다. 예를 들면 처음으로 256비트 메모리 컨트롤러를 사용하고, CPU와 비슷한 FCBGA 패키징을 사용하고, 선진적인 텍스처 압축 기술과 후처리 유닛을 도입했다는 것 등입니다.

 

20.jpg

 

R300의 버텍스와 픽쉘 쉐이더 아키텍처

 

당연히 R300의 쉐이더 유닛은 새로 설계되어, 어드레스와 컬러, 텍스처 유닛이 모두 부동소수점 연산 정밀도를 지원하게 되었으며, 이것이 다이렉트 X 9 어플리케이션을 완벽하게 실행할 수 있게 해준 주요 요소입니다. R300 코어는 8개의 픽셀 파이프라인과 4개의 버텍스 쉐이더 유닛을 가지고 있으며, 각각의 픽셀 파이프라인은 오직 1개의 텍스처 유닛만 가지고 있습니다. ATI의 픽셀과 버텍스 비율은 1:3에서 1:2를 거쳐 1:1이 되었으며, 다이렉트 X 9.0c에서는 다시 3:1로 확정되는데, 이것은 나중에 설명할 일입니다.

 

 

NVIDIA의 실수. 지포스 FX 5800

 

NV30 코어는 업계 최초의 130나노 선진 공정을 사용하였으며, 당시 최고 클럭의 GDDR2 비디오 메로리를 사용하였습니다. 거기에 발표 시기까지 늦었기 때문에 이론적으로는 당연히 성능이 더 우수해야 합니다. 그러니 이번에는 ATI보다 발표도 늦었을 뿐만 아니라 다이렉트 X 9 기술도 넘어서지 못했습니다. NV30 아키텍처에는 비교적 큰 결함이 있었으며, NVIDIA는 다이렉트 X 8에서 다이렉트 X 9로 넘어가는 과도기에 매우 어렵게 기술을 완성했지만 그 결과는 그리 이상적이지 않았습니다.  

 

21.jpg

 

넓게 보자면 NV30의 전체 아키텍처는 다이렉트 X 7(고정 기능의 TRUE T&L 유닛), 다이렉트 X 8(FX12 컴바이너 정수 처리 유닛), 다이렉트 X 9(부동소수점 픽셀 유닛)의 혼합체입니다. 다이렉트 X 9 어플리케이션에서 부동소수점 정밀도가 아닌 연산이 출현할 수 없기 때문에, 다이렉트 X 7이나 8의 기능을 사용하지 않는 경우 NV30 트랜지스터 자원은 상당히 낭비되게 되며 이는 곧 성능에도 영향을 주게 됩니다.

 

NV30의 픽셀 쉐이더 유닛은 Co-issue(벡터 명령+스칼라 명령의 병렬 처리) 능력이 없습니다. 다이렉트 X 9에서는 하나의 사이클에 3D+1D 명령어를 사용하는 것이 제일 자주 쓰이는 명령어 처리 방식이며, 따라서 많은 경우에서 RGB+A(3원색과 알파 채널)을 묶어 실행하게 되는데, 이 경우 NV30은 병렬 실행을 할 수가 없어 명령여 출력량이 대폭 줄어들게 됩니다. 그 다음으로, NV30은 miniALU 유닛이 없어 부동 소수점 성능은 제한되어 있습니다(NV35의 다이렉트 X 8 정수 유닛은 miniALU로 전환).

 

그 밖에 NV30의 레지스터 설계(레지스터의 수와 조절 사용 방식), 명령어 저장 방식(비디오 메모리에 읽고 쓰는 것) 등에도 단점이 있었습니다. NV30의 레지스터 수는 비교적 작으며, 실제 어플리케이션의 수요를 만족할 수가 없었습니다. 뿐만 아니라 마이크로소프트의 HLSL로 쓰여진 픽셀 쉐이더 2.0 코드는 NV30의 천적이라고 할 수 있었습니다. 이 쉐이더 명령은 대량의 임시 레지스터를 사용하며, 텍스처 명령어를 패키지로 묶어버리는데 NV30의 비디오 메모리는 DDR-SDRAM이라서 패키지 조작 능력이 없었습니다. 동시에 NV30이 텍스처 데이터를 읽고 쓰는 효율이 낮, 코어 캐시의 히트 레이트도 줄어들게 됐고, 비디오 메모리 대역폭의 사용량이 늘어나게 됐습니다.

 

NV30은 VILW(매우 긴 명령어. 동시에 스칼라와 SIMD 명령을 패키지할 수 있음) 설계에 해당하는 프로세서이기 때문에, 그래픽카드 드라이버의 쉐이더 컴파일러의 효율이 꽤 높아야 합니다. 쉐이더 코드를 적당한 배열로 만들어서 코어의 처리 능력을 대폭 상승시킬 수 있습니다. 초기 게임에는 이런 최적화가 어느 정도 작용을 하였지만, 나중에 쉐이더 연산이 무거워지면서 게임에서의 효과가 그리 크지 않게 되었습니다.

 

마지막으로 비록 NV30이 이전의 NV25와 비교하여 아키텍처의 변화가 매우 크지만, 그 성능은 경쟁상대인 R300보다 떨어졌습니다. 그러나 NV30의 아키텍처는 어느 정도 발전된 것이며, ATI의 R600에서 쉐이더 설계는 NV30과 많이 비슷한 점이 있습니다.

 

 

진정한 다이렉트 X 9 아키텍처가 아닌 NV30의 실패

 

지금 본다면 다이렉트 X 9의 발전이 어느 정도 한계가 있다고 할 수 있습니다. 그것은 바로 NVIDIA가 다이렉트 X 9에 맞는 쉐이더 명령의 발전을 이끌어 내지 못했고, 다이렉트 X 8+다이렉트 X 9의 혼합 방식 아키텍처를 사용하여, NV30이 다이렉트 X 9 게임을 실행하는 효율이 매우 낮아지는 큰 문제를 일으켰기 때문입니다. 거기에 최신 공정을 사용하는 모험을 감행하고, 아직 성숙되지 않은 GDDR2 비디오 메모리에, 128비트 메모리 버스 등은 NV30의 성능을 크게 제약하고, 다이렉트 X 8 게임에서조차 R300을 이기지 못하게 하였습니다.

 

ATI는 다이렉트 X 9 표준에 완전히 맞춘 설계를 하였고, 심지어 다이렉트 X 9 표준이 성립되기 전에 다이렉트 X 9 그래픽카드를 출시하였습니다. 이것은 ATI와 마이크로소프트 사이의 미묘한 관계를 보여준 것이 되겠습니다.

 

 

다이렉트 X 9.0c. 뛰어난 품질의 빛-그림자 렌더링과 HDR

 

다이렉트 X 9도 혁명적인 개선이 이루어졌지만, 표면적으로 내세울만한 중요 기술은 없어서 많은 사용자들의 홀시를 받았습니다. 사실 쉐이더 모델이 1.0에서 2.0으로 올라가면서 그래픽 렌더링 품질에 거대한 개선이 되긴 했지만요. 다이렉트 X 9의 세번째 버전인 다이렉트 X 9.0c에서는 여기서 더 나아가 쉐이더 모델을 2.0에서 3.0으로 업데이트하였습니다.

 

쉐이더 모델 3.0은 명령어 길이를 계속하여 확장한 것 외에 명령어 실행 성능도 상승하였습니다. 쉐이더 모델 3.0은 동적 분기 조작을 지원하여 픽셀 프로그램이 분기 조작을 시작할 수 있으며(순환, if/else 등), 함수의 사용을 지원합니다. 다이렉트 X 9.0c와 쉐이더 모델 3.0 표준의 출시로 다이렉트 X의 발전 과정에서 중요한 고비를 넘기게 됩니다.

 

쉐이더 모델 3.0은 명령어 수의 제한을 줄이고 위치 치환 맵핑 같은 특징을 지원하는 것 외에, 많은 특징을 추가하여 게임에서 실행 효율과 품질을 높이게 되었습니다.

 

22.jpg

 

도표 설명. 픽셀 쉐이더 2.0에서 3.0으로 바뀐 점입니다. 

 

쉐이더 길이: 256 명령에서 65535 명령으로 늘어나, 더 많은 명령어를 사용하여 세밀한 각도의 광원과 애니메이션 처리가 가능.

 

동적 분기를 지원: 상관이 없는 픽셀의 복잡한 쉐이더 연산을 뛰어넘어 성능을 향상하게 됨.

 

버텍스 재질을 4개까지 조사하게 됨: 치환 맵핑 등의 특수 효과에서 사용.

 

버텍스 캐시의 데이터를 순환 사용하여 새로운 오브젝트를 만들 수 있게 됨.

 

쉐이더 길이가 96개에서 65535개 이상으로 증가: 더 복잡한 그림자, 광원, 프로그램의 사용이 가능해짐.

 

동적 분기의 지원: 상관이 없는 픽셀의 복잡한 쉐이더 연산을 뛰어넘어 성능을 향상하게 됨.

 

쉐이더 안티 얼라이싱의 지원: 개발자들이 화면을 설계할때 쉐이더의 클럭을 조절하거나 멀티 샘플링 응답 속도를 개선.

 

백 엔드 레지스터의 지원: 한번의 프로그램에서 양쪽 면의 재질 광원을 처리할 수 있음.

 

내부 컬러 포멧: 최저 8비트 정수에서 최저 32비트 부동소수로 바뀜. 더 넓은 범위의 색 정밀도를 표현하여 HDR 사용 가능해짐

 

연기와 거울 효과: 고정 8비트 기능에서 설정 가능한 fp16~fp32 쉐이더로 바뀜. 쉐이더 모델 3.0의 개발자들이 더 완전하고 정확하게 연기와 거울

 

반사 효과를 쓸 수 있게 됨. 쉐이더 모델 2.0에서는 이런 효과가 전부 고정되어 있었음.

 

텍스처 좌표의 수: 8개에서 10개로 증가. 더 많은 per-pixel로 더 리얼한 렌더링이 가능해짐.

 

이상의 여러 개선점은 많은 사람들이 잘 모르는 것들일겁니다. 절대 다수의 사람들은 오직 한가지, 다이렉트 X 9.0c에서 HDR 기술을 지원한다는 것만 기억하고 있습니다. 왜냐하면 HDR의 화려한 효과는 사람들에게 깊은 인상을 심어주겄기 때문입니다.

 

HDR의 전체 명칭은 High Dynamic Range입니다. 일종의 색채 저장 방식으로 게임 중에 렌더링되는 광원 데이터를 사용합니다. HDR 렌더링은 4마디 말로 설명이 가능한데 1. 밝은 곳은 아주 밝게. 2. 어두운 곳은 아주 어둡게, 3. 밝은 곳의 디테일은 매우 자세하게, 4. 모든 빛은 실시간으로 생성되며 사람의 눈에 따라 명암의 세부 묘사가 달라지도록 함. (...원문 그대로 옳기긴 했지만 글쎄올시다 -_-a)

 

23.jpg

 

HDR

 

다이렉트 X 9.0c 이전부터 HDR은 널리 사용되어 왔으며, 일반적으로는 FP16 HDR(반 정밀도 부동소수점형)과 INT32 HDR(정수형)이 있었으나 그 효과는 그리 크지 않았습니다. FP16의 범위는 그리 넓지 않았으며 INT32의 효율은 매우 낮아, 이런 HDR 포멧으로는 원하는 효과를 얻을 수가 없었습니다. FP32 HDR(32비트 부동소수점 포맷)의 탄생은 명암 표현의 공간을 대폭 확장시켜 주었으며 게임에서의 광원 효과를 상승시켰습니다. 당시 출시된 스프린터 셀, 파 크라이, 3D마크 06 등에서 HDR를 사용한 화면은 사람들을 경악하게 만들 정도였습니다.

 

 

최초의 다이렉트 X 9.0 C 카드. 지포스 6800

 

지포스 FX 시리즈의 참담한 실패 후에, 고급형 제품에서 털려버린 상황을 만회하기 위해 NVIDIA는 여러모로 노력했습니다. NV3x 시리즈를 보충하여 새로운 제품을 만드는 것은 어려운 일이었기 때문에, NVIDIA는 아키텍처를 새로 설계하고 다이렉트 X 9.0c 표준을 완벽 지원하도록 하였습니다. 심지어 어떤 사람들은 지포스 6800과 지포스 FX가 다른 회사의 제품일 것이라고 이야기하기도 했을 정도입니다.

 

24.jpg

 

NV3x의 제일 큰 단점은 픽셀 렌더링 유닛의 효율이 낮다는 것입니다. 따라서 NV40은 픽셀 유닛 아키텍처 부분을 강화하는데 주력했습니다. NV40에 있는 16개의 픽셀 렌더링 파이프라인은 잠깐 이야기하지 말고, 각각의 픽셀 쉐이더 유닛의 구조에 대해서 깊게 보도록 합시다. NVIDIA는 이를 슈퍼스칼라 아키텍처라고 부릅니다. 일반적인 픽셀 렌더링 파이프라인은 하나의 쉐이더 유닛만 제공하며, 1개의 사이클에 오직 4개의 연산만 가능합니다. 하지만 NV40의 슈퍼스칼라아키텍처는 2개의 쉐이더 유닛을 내장하여 각각의 사이클마다 연산량이 배로 늘어났습니다.

 

25.jpg

 

NV40의 픽셀 렌더링 파이프라인 아키텍처

 

바로 그것 때문에 경쟁상대인 ATI의 라데온 X800 시리즈도 하드웨어 스펙은 NV40과 완전히 같았지만, 다이렉트 X 9.0b 게임에서의 성능 차이는 무시할 수 없을 정도였는데, 그것이 바로 슈퍼스칼라 아키텍처 때문이었습니다. ATI는 라데온 X800에서 다이렉트 X 9.0b까지만 지원했고 HDR도 지원하지 않는 등 여러모로 부족한 점이 있었습니다.

 

지포스 6800의 성공은 NVIDIA에게 다시 영광을 가져다 주었습니다. 전체 지포스 6 시리즈의 가격적인 경쟁력은 라데온 X800을 압도하였으며, 완벽한 아키텍처 덕분에 NVIDIA는 간단히 규모를 늘려서 24개 픽셀 파이프라인을 가진 2세대 다이렉트 X 9.0c 그래픽카드인 지포스 7800 시리즈를 출시하게 됩니다(그 기본적인 아키텍처는 변하지 않고 일부 최적화만 되었기에 여기서는 설명하지 않습니다).

 

 

HDR+AA를 지원하는 다이렉트 X 9.0c 그래픽카드. 라데온 X1800/X1900

 

라데온 X800의 경쟁자는 지포스 6800 시리즈이지만, 성능에서 크게 뛰어나지 않고, 다이렉트 X 9.0c와 HDR을 지원하지 않아, ATI가 라데온 9700/9800 시리즈에서 이루었던 휘황찬란했던 시기는 끝나게 되었습니다. 하지만 ATI는 다음 GPU를 연구개발하면서 아키텍처를 개량하여 왕위의 탈환을 노리고 있었습니다. R520 코어를 사용한 라데온 X1800XT는 새로운 아키텍처, 다이렉트 X 9.0c의 완벽 지원 등을 내세웠지만, 이미 6개월 전에 출시된 지포스 7800GTX를 이기진 못하였습니다. 왜냐하면 라데온 X1800XT는 여전히 16개 픽셀 파이프라인을 가지고 있던 반면 지포스 7800 GTX는 24개를 내장하여, 여기서 오는 성능의 차이는 새로운 아키텍처와 높은 클럭으로도 극복할 수가 없었기 때문입니다.

 

26.jpg

 

R520과 R580 아키텍처는 거의 같으며, 픽셀 유닛의 수만 다릅니다.

 

당시에 누구도 ATI가 다른 뭔가를 남겨두고 있음을 짐작하지 못했습니다. 원래 R520과 같은 아키텍처의 실력은 16개의 픽셀 파이프라인으로 나올 만큼 간단하지 않았으며, ATI는 전통적인 파이프라인의 개념을 완전히 뒤집어서 R580 코어를 그 뒤에 바로 출시하였습니다. 픽셀 렌더링 유닛은 48개 정도로 R520의 세배였지만 버텍스 렌더링 유닛과 텍스처 유닛을 비롯하여 GPU의 다른 모듈은 변한 것이 없었습니다.

 

R520에서 R580로 바뀌는 과정은 많은 사람들이 이해하기 힘들었습니다. 왜냐하면 G70과 R420를 포함하여 지금까지의 모든 GPU는 파이프라인 방식의 아키텍처를 사용했고, 그래서 픽셀 렌더링 유닛 내부에 텍스처 유닛이 있어으며 일반적으로 픽셀과 텍스처의 비례는 1:2나 1:1이었습니다. 하지만 R520에서는 처음으로 픽셀 유닛과 텍스처 유닛을 분리하여 독립된 설계를 만들었습니다. 모든 픽셀 유닛은 모든 텍스처 유닛과 그 리소스를 상호 공유하며, R520의 픽셀과 텍스처 유닛의 비율은 여전히 1:1이었지만 R580에서 그 비율이 3:1로 바뀐 것입니다. 이것은 ATI가 라데온 초기에 출시한 3:1 비율의 아키텍처를 생각나게 하는 것입니다.

 

이런 설계를 한 이유는 ATI가 게임 시장의 발전 추세를 보고 판단한 것입니다. 픽셀 렌더링의 비중이 갈수록 늘어나고 텍스처 맵핑의 성장이 점점 완만해지고 있었던 것이지요. ATI는 예전에 다이렉트 X 7 그래픽카드를 만들었을때 하나의 파이프라인에 3개의 텍스처 유닛을 넣었지만 이 비율은 나중에 1:2가 되고 그 후에는 1:1이 되버린 것을, ATI가 다시 3:1로 끌어올린 것입니다. 비록 당시에는 많은 사람들이 이 점을 이해하지 못했지만 나중의 발전 추세에서는 픽셀과 텍스처의 비율이 갈수록 커져, 다이렉트 X 10 시대에서는 대부분이 3:1, 다이렉트 X 11 시대에서는 5:1이나 심지어 그 이상으로 높아지게 되었습니다.

 

3:1 비율의 아키텍처 외에도 X1000 시리즈의 아키텍처는 HDR+AA라는 놀라운 점이 추가되었습니다. 지포스 6800 시리즈는 2년 전에 출시됐을때 당시로서는 거의 유일한 다이렉트 X 9.0c 그래픽카드였으며, 당시에 모든 다이렉트 X 9.0c ㅔ임들은 NVIDIA의 아키텍처에 맞춰 개발되었습니다. 그때 NVIDIA의 그래픽카드는 HDR을 켰을때(정확하게 말하면 FP32 포멧에서) 원래 MSAA의 버퍼로 쓰이는 구역을 사용하기 때문에 HDR과 AA를 동시에 사용할 수 없는 문제가 있었습니다. HDR은 다이렉트 X 9.0c의 대표 기술이며 화질을 대폭 상승할 수 있지만, AA-안티 얼라이싱 역시 화질을 대폭 개선해 주었기 때문에 두가지 옵션 사이에서 많은 사용자들이 고민을 할 수밖에 없었습니다.

 

ATI의 다이렉트 X 9.0c 제품은 지포스보다 1 세대가 늦었습니다. ATI는 다이렉트 X 9.0c가 늦었다는 점을 이미 인식하고, 아키텍처를 설계할 때부터 HDR와 AA를 같이 사용하는 문제를 고려하고 있었습니다. 따라서 전용 버퍼 구역을 따로 설계하여 게임이나 드라이버에서 MSAA 버퍼 위치를 새로 설정하도록 하여 HDR과 AA를 같이 사용할 수 있도록 하였습니다. 아쉬운 것은 게임이나 드라이버의 호환성이 그리 좋지 않아 이를 지원하지 않는 게임이 상당히 많았다는 것입니다. 비록 이것은 매우 큰 장점이긴 하였지만 그 실질적인 효과는 사람들의 기대에 미치지 못한 것이 사실입니다.

 

27.jpg

 

그 밖에도 X1000 시리즈는 픽셀 쉐이더 유닛의 내부 구조를 개선하였습니다. 각각의 픽셀 이ㅠ닛은 2개의 로직 유닛과 1개의 분기 실행 유닛을 가지고 있습니다. 그 중 ALU는 오직 ADD 연산(덧셈)만 할 수 있으며, ALU2 유닛은 덧셈, 곱셈(MUL), 곱셈덧셈(MADD) 각종 유형의 연산을 할 수 있었습니다. 2개의 ALU는 최고 2개의 명령어(3D+1D)를 실행할 수 있습니다. 이런 방대한 픽셀 유닛을 조정하기 위해 ATI는 쉐이더 모델 3.0의 특징을 개선하여 동적 스트림 컨트롤 기능을 도입하였으며, 이를 통해 SIMD 아키텍처의 동적 분기 성능을 대폭 개선하고, 픽셀 쉐이더 성능을 향상하였습니다.

 

새로운 아키텍처와 48개 픽셀 유닛의 라데온 X1900XTX는 기존의 X1800XT에서 성능을 대폭 향상시켜 지포스 7900 GTX와의 경쟁에서 승리를 거두었으며, 새로운 게임이 나올수록 그 차이를 점점 더 벌려나갔습니다. X1900XTX에 맞서기 위해 NVIDIA는 듀얼코어 그래픽카드인 G71 코어의 지포스 7950GX2르 대항하였습니다. 비록 7950GX2의 성능은 X1950XTX를 앞서긴 했지만 2개의 카드를 같이 사용할 경우의 효율은 여전히 라데온이 앞섰습니다.

 

 

다이렉트 X 9.0C 시절에는 두 회사의 아키텍처가 각각의 장점을 가짐

 

다이렉트 X 9.0c는 지금도 널리 쓰이는 API입니다. 지금도 많은 게임들이 다이렉트 X 10이나 다이렉트 X 11을 무시하고 다이렉트 X 9.0c로 출시하고 있기 때문입니다. HDR과 AA를 같이 사용하는 문제는 완벽하게 해결되진 않았습니다. NV40은 발표가 빨랐기 때문에 이를 해결하지 못했고 G70은 픽셀과 버텍스 부분을 확충하는데 그쳤기 때문에 문제가 해결되지 않았습니다.

 

ATI는 X800 시절에 선두를 빼았기자 X1000 아키텍처에서 많은 노력을 들어 완벽한 다이렉트 X 9.0c 그래픽카드를 만들기 위해 노력하였습니다. 그들의 결정은 맞아 떨어져 아키텍처나 성능 모두 좋은 결과물을 내게 되었지만, 트랜지스터 규모가 너무 커지고 전력 사용량이 크다는 점의 단점도 있었습니다.

 

 

다이렉트 X 10 통합 쉐이더 아키텍처와 지오메트리 쉐이더

 

다이렉트 X 10은 또다시 큰 혁명을 불러일으켰습니다. 쉐이더 모델이 3.0에서 4.0으로 업데이트된 외에 2가지 중요한 기술이 등장한 것입니다.

 

첫번째는 통합 쉐이더 아키텍처입니다. 지금까지처럼 픽셀과 버텍스 쉐이더 유닛을 나누지 않고, 스트림 프로세서 유닛을 사용하여 필요량에 따라 동적으로 픽셀과 버텍스 쉐이더 명령을 처리하도록 나눠주는 것입니다.

 

28.jpg

 

왼쪽은 분리 쉐이더 아키텍처, 각종 쉐이더를 하나하나 거치게 됩니다.

 

오른쪽은 통합 쉐이더 아키텍처. 하나의 쉐이더 코어에서 다양한 쉐이더 작업을 할 수 있습니다.

 

두번째는 새로운 지오메트리 쉐이더 유닛입니다. 이것은 처음으로 GPU가 지오메트리 그래픽 데이터를 동적으로 생성하고 없엘 수 있게 만든 기능이며, GPU가 CPU의 간섭 없이 반복 연산을 진행할 수 있도록 한 것입니다. 예전에는 실시간으로 사용할 수 없었던 많은 연산들이 이제는 GPU에서 가능하게 되었습니다.

 

그 밖에도 다이렉트 X 10은 2종의 새로운 HDR 포멧을 추가하여 HDR과 AA가 호환되지 않는 상황을 해결하고 HDR의 효율을 향상하였습니다. 다이렉트 X 10은 텍스처 맵핑의 정밀도와 효율을 대폭 개선하였으며, 그 외에도 여러 기능을 추가하였는데 대표적인 특징은 아래와 같습니다.

 

29.jpg

 

다이렉트 X 10의 주요 개선 내용

 

통합 쉐이더: 픽셀 쉐이더와 버텍스 쉐이더를 나누지 않고, 하나의 통합된 쉐이더 프로세서 유닛에서 실행하는 용도에 따라 픽셀과 버텍스 쉐이더를 처리하도록 함. GPU의 리소스 시용 효율이 대폭 향상된 것이 특징.

 

새로 늘어난 지오메트리 쉐이더: 지오메트리 쉐이더는 GPU가 동적으로 지오메트리 데이터를 만들어내거나 없엘 수 있도록 한 첫번째 기능으로서, 지오메트리 쉐이더의 처리 단계를 버텍스 쉐이더와 픽셀 쉐이더 사이에 위치시킴. 물론 통합 스트림 프로세서에서도 처리 가능함. 이를 통해 가상 치환 맵핑, 카툰 렌더링, 털 렌더링, 테두리의 계단 현상 제거, 데이터 스트림 출력 등의 신기능이 가능해짐.

 

새로운 HDR 포멧: 2 종류의 32비트 부동소수점 HDR 포멧으로 비디오메모리 대역 소모를 절약함. 다이나믹 레인지가 다이렉트 X 9.0c보다 더 커지고 HDR+AA 호환성을 완벽하게 해결함.

 

더 많은 텍스처와 렌더링 오브직트: 텍스처 어레이를 지원하여 맵핑 해상도를 8192x8192로 상승하고, 엑세스 할 수 있는 텍스처 수를 128개르 증가. 픽셀 정밀도와 그래픽의 복합도를 상승시킴.

 

GPU 리소스를 향상: 임시 레지스터를 32개에서 4096개로 확장하고, 자주 사용하는 레지스터는 256개에서 65536개로 확충시켜, 게임 개발자들이 더 넓은 공간에서 작업하고 컴파일 설계 효율을 향상시킴.

 

 

최초의 다이렉트 X 10 그래픽카드. 지포스 8800

 

어떤 부분에서 보건, 지포스 8800과 다이렉트 X 9 시대의 라데온 9700은 매우 비슷합니다. 마이크로소프트가 새로운 API를 아직 정식 발표하지도 않았는데 새 그래픽카드가 먼저 발표된 것입니다. 비록 이를 지원하는 게임은 없었지만 기존 게임에서의 성능도 매우 완벽했습니다. 따라서 각 세대의 그래픽카드가 성공하는 제일 큰 요소는 API가 아니며 코어 아키텍처임을 알 수 있습니다. 다이렉트 X 10의 API는 또 한번의 혁명이며 G80은 GPU 아키텍처에서 위대한 혁명이라고 할 수 있습니다.

 

30.jpg

 

만약 R580의 픽셀과 텍스처의 3:1 비율이 이해되지 않는다면, G80의 스트림 프로세서 설계는 완전 안개와도 같을 것입니다. G71의 24개 픽셀 파이프라인에서 128개 스트림 프로세서로 바뀐 것은 도대체 어디서 늘어난 것일까요?

 

31.jpg

 

전통적인 GPU 쉐이더 아키텍처

 

전통적인 쉐이더-픽셀이건 버텍스건-는 사실 모두 SIMD(Single Instruction Multiple Data) 아키텍처이며 4D 벡터 프로세서입니다. 한번에 픽셀의 RBGA 색상 데이터나 버텍스의 XYZW 좌표 데이터를 조작할 수 있습니다. G80의 스트림 프로세서는 1D 스칼라 프로세서이며 한번에 픽셀이나 버텍스의 4개 데이터 중에서 오직 1개만 처리할 수 있습니다. 이렇게 본다면 효율이 아주 낮아 보이지요?

 

당연히 아닙니다. 게임의 발전에 따라 GPU가 처리를 필요로 하는 명령은 이미 4D처럼 흔해 빠진 데이터 유형을 벗어나게 되었습니다. 다이렉트 X 10 시대 이후에는 Z 버퍼 구역(1D)나 텍스처 엑세스(2D) 등의 4D 명령이 아닌 조작이 차지하는 비율이 갈수록 늘어났고, 이때 전통적인 쉐이더 유닛이 이런 종류의 명령어를 실행하면 그 효율은 1/2나 1/4로 떨어지게 됩니다. 즉 Co-issue 기술의 효율 개선이 상당히 한정되어 있다는 것입니다.

 

32.jpg

 

G80의 스트림 프로세서

 

G80의 1D 스칼라 프로세서는 이런 종류의 명령을 실행할때 100%의 효율을 낼 수 있습니다. 이것은 NVIDIA가 GPU 아키텍처를 대대적으로 바꾼 주요 목적이기도 합니다. G80의 이런 아키텍처는 MIMD(Multiple Instruction Multiple Data)라고 부르며, 그 특징은 실행 효율이 매우 높다는 것입니다. 물론 단점도 있습니다. 이론적인 성능이 매우 낮으며 트랜지스터 수가 매우 늘어나게 됩니다. 물론 경쟁 제품의 실력이 나쁘다면 이런 단점은 발견되지 않겠지요.

 

뿐만 아니라 NVIDIA의 1D 스칼라 프로세서는 비동기화 모드로 매우 높은 클럭에서 작동하며, 일반적으로는 GPU 코어 클럭의 두배로 작동합니다. 이것이 렌더링 성능을 대폭 상승한 원인이기도 합니다. 이 기술은 ATI가 지금까지도 실현하지 않고 있습니다.

 

 

ATI의 다이렉트 X 10 그래픽 아키텍처- R600

 

혁명적인 G80의 아키텍처와는 다르게, R600은 전통적인 GPU의 영향이 매우 많이 남아 있습니다. 스트림 프로세싱 유닛은 이전의 쉐이더 유닛과 매우 비슷하고 여전히 SIMD 아키텍처입니다.

 

33.jpg

 

R600은 4개의 SIMD 어레이가 있으며 각각의 SIMD 어레이는 16개의 스트리밍 프로세싱 유닛을 가지고 있습니다. 이렇가 하면 모두 64개가 되지만 이것을 간단하게 64개 스트리밍 프로세서라고 부를 순 없습니다. 왜냐하면 R600의 유닛은 5개의 ALU가 있기 때문입니다.

 

34.jpg

 

R600의 스트림 프로세서를 자세히 봅시다. Branch Execution Unit (분기 실행 유닛)은 명령어 발사와 컨트롤을 수행하며 명령어 패키징이 된 후에 이를 5개의 ALU에 맞춰 분할해 나눠주어, 전체의 흐름과 조건 연산을 진행합니다. General Purpose Registers (통용 레지스터)는 데이터의 저장과 로드를 담당하며 임시로 데이터를 저장하거나 로드하지만 명령어를 보관하진 않습니다.

 

내부의 5개 ID ALU는 1개의 명령어 발사 포트를 공유합니다. 따라서 넓게 보면 R600은 SIMD 구조의 5D 벡터 아키텍처입니다. 하지만 R600 내부의 이 5개 ALU와 전통적인 GPU의 ALU는 다른 점이 있습니다. R600은 각자 독립적으로 1D/2D/3D/4D/5D 명령어를 임의 조합이 가능하며 Co-issue (벡터 명령과 스칼라 명령의 병렬 실행) 를 완벽 지원합니다. 따라서 좁게 본다면 R600은 5D 슈퍼스칼라 아키텍처입니다.

 

35.jpg

 

위 그림을 보면 자세히 알 수 있습니다. 1개의 명령어와 여러 데이터 스트림의 슈퍼 스칼라 아키텍처는 어떤 조합의 혼합 명령어건 모두 실행이 가능합니다. 한개의 스트리밍 프로세싱 유닛 내부에 있는 5개 ALU는 한번의 사이클에 5번의 MAD(Multiply-Add, 곱셈/덧셈) 연산이 가능하며, 비교적 '뚱뚱한' ALU는 MAD 외에도 다른 함수(SIN, COS, LOG, EXP 등등)를 연산할 수 있어 특수 조건에서 연산 효율을 높여줍니다.

 

지금 우리는 R600이 64 x 5 = 320개의 스트림 프로세서를 가지고 있음을 알고 있습니다. R600의 스트림 프로세서 성능은 G80 보다 몇대 강력한 SIMD 아키텍처이며, 더 적은 트랜지스터로도 대규모의 스트림 프로세서를 구축할 수 있습니다. 하지만 명령어 실행 효율의 부분에서 SIMD 아키텍처는 명령어를 분석하여 나누고, 이를 다시 패키징하는 계산 과정의 효율에 매우 의존할 수밖에 없다는 단점이 있습니다.

 

 

다이렉트 X 10의 최종 승리자. G80

 

앞에서의 분석을 통해 우리는 이런 결론을 내릴 수 있었습니다. G80의 MIMD 스칼라 아키텍처는 많은 트랜지스터 수를 점유하며, 스트림 프로세서의 수와 이론 연산 성능 부분에서 엄청난 결과를 보여주며, 확실히 높은 실행 효율을 보장합니다. R600의 SIMD 슈퍼 스칼라 아키텍처는 비교적 적은 수의 트래닞스터로 더 많은 스트림 프로세서 수와 이론적인 연산 성능을 뽑아낼 수 있지만, 그 효율 부분에서는 사람들의 기대에 미치지 못했습니다.

 

G80의 아키텍처는 R600보다 개선점이 많아, G80과 G92 시기에 R600과 RV670을 뛰어넘는 성능을 보여주었습니다. 그 후에 나온 GT200에서도 우세를 유지하였지만 그 차이는 G80만큼 크지는 않았습니다. 왜냐하면 R600의 아키텍처 특징이 계속하여 보충되어 효율이 상승하였기 때문입니다.

 

 

다이렉트 X 11의 특징: 테셀레이션의 중요성

 

다이렉트 X 9.0c와 다이렉트 X 10은 매우 완벽해 보이지만 명확한 문제점도 존재하였습니다. 그것은 바로 시스템 리소스의 사용이 매우 크고 연산 효율이 비교적 낮다는 것입니다. 따라서 다이렉트 X 11은 뒤떨어진 렌더링 효율을 높이는데 주력하였습니다. 다이렉트 X 11에서는 쉐이더 모델이 4.0에서 5.0으로 업그레이드 된것 외에 2가지 중요한 특징인 테셀레이션과 다이렉트 컴퓨트가 추가되었습니다. 그 중 다이렉트 컴퓨트의 명령어는 쉐이더 모델 5.0에서 비롯된 것입니다.

 

36.jpg

 

당연히 멀티 스레드 렌더링, 개선된 텍스처 압축 등의 다른 개선점들도 있습니다. 하지만 이건 그리 오래된 일이 아니니 다시 소개할 필요는 없겠지요.

 

37.jpg

 

다이렉트 3D 11의 테셀레이터 처리 단계. 고정 기능을 가진 단계를 추가하여, 입력받은 점에서 새로운 버텍스를 만들고, 새로 만들어진 점의 수는 헐 쉐이더에서 계산된 평면 세분화 등급에 따라서 달라짐.

 

테셀레이션은 GPU가 모델 내부에 자동으로 새로운 버텍스를 추가하는 기능을 가리킵니다. 지오메트리 그래픽을 더 복잡하고 세밀하게 그려내는 기술로서 아주 적은 성능 손실만으로도 큰 폭의 화질 향상을 할 수 있다는 것이 특징입니다. 다이렉트 X 11 게임에서 화면의 개선은 대부분 테셀레이션에서 온 것이며, 테셀레이션을 사용하여 생각지도 못한 수준의 화질을 그려낼 수 있습니다.

 

테셀레이션 기술과 같이 사용하기 위해 마이크로소프트는 2종류의 새로운 쉐이더를 설계하였는데, 각각 헐 쉐이더와 도메인 쉐이더입니다. 점의 위치를 정확하게 조절하여 위치 치환 맵핑을 해주는 역할을 합니다. 이런 구현 방식은 다이렉트 X 9와 다이렉트 X 10 시절의 테셀레이션과 본질적으로 다른 것입니다.

 

38.jpg

 

다이렉트 컴퓨트 10과 11의 비교

 

단일 3D 어레이로 2D 스레드 어레이를 대체하고 더 빠르고 효율이 높으며 리소스를 절약.

 

스레드 제한이 768에서 1024로 늘어나 동시에 실행 가능한 스레드 수가 1/3 증가. 병행 계산 효율이 증가.

 

스레드 공유 캐시가 16KB에서 32KB로 증가. 스레드 사이에 공유하는 데이터가 두배로 늘어남.

 

공유 캐시 액세스가 256비트 쓰기 제한이 걸려 있었던 것이 완전한 32KB 읽기/쓰기 제한 없음으로 바뀌면서 I/O 부하가 줄어들고 캐시 이용율이 더 높아짐.

 

원자 조작의 지웜으로 각각의 스레드에서 보호를 받는 메모리 구역을 조작할 수 있게 됨. 다른 스레드에 의해 인터럽트 되지 않기 때문에 프로그래머가 CPU처럼 GPU에서 프로그래밍이 가능해짐.

 

배 정밀도(더블 프리시전)의 지원. IEEE 754 표준의 64비트 부동소수점 연산을 지원. 

 

부가 버퍼의 지원. 일종의 새로운 데이터 버퍼 포멧으로 전통적인 캐시 데이터 인덱스의 끝에 위치하며, 버퍼 공간의 이용율을 높여주고 비디오 메모리에 대한 압력을 낮춰줌.

 

계산 쉐이더가 순서에 상관 없이 8개의 위치 버퍼에 동시 엑세스 가능해짐.

 

픽셀 쉐이더가 데이터를 순서에 상관 없이 8개 동시 엑세스 가능해져, 그래픽 관련 통용 계산의 효율이 높아짐.

 

Gather4의 지원으로 텍스처 데이터의 엑세스 속도가 4배 빨라짐.

 

다이렉트 컴퓨터는 마이크로소프트의 GPU 계산 API로, GPU가 그래픽이 아닌 명령어를 처리할 수 있게 해주며 그 성능은 CPU보다 높습니다. 하지만 현재 다이렉트 컴퓨터의 주요 사용 범위는 그래픽 렌더링 후의 추가 처리 부분이며, 이를 통해 배경과 투명 효과를 만들어 냅니다.

 

 

최초의 다이렉트 X 11 그래픽카드. 라데온 HD 5800 시리즈

 

다이렉트 X 10 시절 R600의 실패 이후에 ATI는 마이크로소프트의 새로운 API를 눈여겨 보겠습니다. 제일 처음으로 다이렉트 X 10.1을 지원하는 그래픽카드를 출시하기도 하였지만 다이렉트 X 10.1은 다이렉트 X 10에 비해 바뀐 점이 그리 많지 않았과 다이렉트 X 9.0c의 HDR처럼 눈에 띄는 효과도 없었기 때문에 사람들의 관심을 받진 못하였습니다. 하지만 ATI는 다이렉트 X 11에 와서 기회를 잡게 됩니다.

 

39.jpg

 

하지만 ATI는 다이렉트 X 11에서 아키텍처를 바꾼 것으로 보이지 않았습니다. 왜냐하면 이전의 RV770 코어와 내부 구조가 거의 같았기 때문이지요. 메모리 버스가 256비트를 유지하면서 사이프러스의 스펙은 RV770의 딱 두배였습니다. 거기에 스트림 프로세서는 듀얼코어 설계로 이루어져 있어 마치 2개의 RV770 코어를 붙여놓은것 같은 인사잉었습니다.

 

40.jpg

 

스트림 프로세서의 경우 RV870은 RV770보다 개선점이 한정되어 있습니다. 다이렉트 X 11의 새로운 조작 명령어를 지원하고, Sum of Absolute Differences(SAD, 오차 절대값 구하기) 연산법에 최적화했을 뿐입니다. 기본적으로는 새로 다이렉트 X 11의 지원과 그 규모를 확충한것 이외에 사이프러스와 RV770의 아키텍처는 본질적으로는 차이가 없습니다.

 

라데온 HD 5000 시리즈의 주요 특징은 전력 사용량이 많이 줄었다는 것입니다. 그 외에 기능 쪽을 보면 아이피니티 멀시 스크린 출력 기술을 지원합니다. 하지만 아키텍처 부분에서는 별다른 개선점이 없습니다.

 

 

완전히 다이렉트 X 11에 맞춰 설계한 그래픽카드- 지포스 GTX 480

 

라데온 HD 5800이 출시되고 6개월이 지났지만, NVIDIA는 매우 혼란스러운 상태였습니다. NVIDIA는 ATI처럼 이전 세대를 개량해서 새 제품을 만든 것이 아니라 다이렉트 X 11의 새로운 API에 맞춰 완전히 새로운 아키텍처를 만들고 있었던 것입니다.

 

41.jpg

 

GF100 코어는 G80과 R600 이후에 근 4년만에 GPU 아키텍처 발전에서 제일 큰 변화를 이루었습니다. 주요 변화는 다음 4가지입니다.

 

1. GPU 처리 부분이 4개의 구역(GPC)로 나뉨. 각 구역 내부에는 모든 주요 그래픽 처리 유닛이 포함되어 있다. 버텍스, 지오메트리, ROP, 텍스처, 픽셀 처리 리소스가 균형있게 집합하여 있음. ROP 기능 외에 GPC는 하나의 자급자족하는 GPU라고 볼 수 있으며, 따라서 GF100은 쿼드코어 GPU라고 할 수 있다.

 

2. 각각의 GPC는 독립된 라스터 엔진을 가지고 있어 엣지 셋업, 라스터라이저 소거, Z 압축 기능을 담당한다. 고해상도에서 GPU 성능을 대폭 향상.

 

3. 각각의 SM은 독립된 폴리모프 엔진을 가지고 있어 지오메트리 그래픽 전환과 테셀레이션 기능을 담당하여, GPU의 지오메트리 성능이 부족하여 생기는 병목 현상을 해결, 다이렉트 X 11 그래픽 성능을 대폭 향상시킨다.

 

3. GPU의 L1/L2 캐시는 새로 설계하여, 그 아키텍처적인 부분에서 인텔의 멀티코어 CPU와 더 비슷해짐. 스트림 프로세서와 텍스처 유닛의 성능을 개선하고, MIMD 아키텍처의 성능을 개선.

 

이전 세대의 GT200과 비교하여 GF100의 모든 모듈은 거의 모두 새로 설계하였습니다. 쿠다 코어(CUDA, 스트림 프로세서) 내부의 ALU 연산 유닛은 단지 쉐이더 모델 5.0 명령어 세트에 호환되도록 수정한 것에 그친 것이 아니라 모두 새로운 부동소수점 연산 포멧과 함수에 맞춰 최적화하였습니다. 사이프러스 코어가 이전의 V770 모듈을 대부분 그대로 가져온 것과 매우 상반됩니다.

 

테스트 결과를 보면 지포스 GTX 480과 470이 다이렉트 X 10 게임에서 라데온 HD 5870이나 5850과의 성능 차이는 그리 크지 않습니다. 하지만 다이렉트 X 11 게임과 어플에서는 그 성능 차이가 제법 커지며, 특히 테셀레이션 성능에서는 라데온 HD 5870을 앞설 뿐만 아니라 듀얼 코어 라데온 HD 5970까지 능가합니다. 다이렉트 X 11의 특수 효과 사용이 늘어날수록 지포스 GTX 480/470의 장점은 더 뚜렸해집니다. 문제는 GPU의 아키텍처를 볼 때, GF!00이 다이렉트 X 11 지원을 위해 완전히 새로 설계한 GPU인 반면, 사이프로스는 다이렉트 X 10 아키텍처에 쉐이더 모델 5.0 명령어 정도만 추가하는데 그쳤음에도 불구하고, 다이렉트 X 11의 성능을 저 정도로 뽑아준다는 것이지요.

 

 

다이렉트 X 10 아키텍처는 다이렉트 X 11의 수요를 만족할 수 없음

 

라데온 HD 5800과 4800의 구조는 완전히 같으며, 스트림 프로세서의 규모만 늘어났을 뿐입니다. 뛰어난 다이렉트 X 10/10.1 성능을 내주지만 다이렉트 X 11의 성능은 평범한 수준입니다. 다이렉트 X 11은 다이렉트 X 10에 약간의 보충을 한 것이 아니라 완전히 새로운 API를 사용하였기 때문에, 많은 특징은 쉐이더 모델 5.0 호환으로 해결되지 않습니다.

 

ATI가 비록 다이렉트 X 11 그래픽카드를 먼저 발표하여 큰 성공을 거두었지만 다이렉트 X 9 시절의 R300까지는 아니었습니다. 당시 R300은 완전히 새로운 아키텍처에 다이렉트 X 9를 완벽 지원하였고 NV30 아키텍처는 여러 단점이 있었습니다. 하지만 지금 사이프러스는 새 병에 헌 술을 담은 셈이며 GF100은 진정한 다이렉트 X 11 아키텍처를 사용하였습니다.

 

 

결론은 지금까지의 내용을 요약하고 앞으로의 전망을 소개했는데 제 생각하고 많이 다른데다가, 지금 라데온 HD 6000 시리즈가 나온 이상 별로 의미가 없어서 -_-) 소개하지 않습니다.

 

 

출처: http://www.pcpop.com/doc/0/521/521833_all.shtml#p1

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.