||1

시간이 좀 지난 글이기에 R600의 구조에 대해서만 번역을 하였습니다. 성능에 관한 것은 번역하지 않고, UVD도 R600에 없기 때문에 - 사실은 귀찮아서 - 번역하지 않았습니다.



AMD가 R600은 순조롭게 개발되고 있다고 말했을 때, 맨날 공식 출시일을 넘겨 발매하는 AMD를 믿는 것 자체가 고지식 한  것이었다. 우리는 이미 AMD가 G80같이 그들의 하드웨어를 Vista 출시일에 맞춰서 내놓을 줄 알았다. 그러나 사실 AMD는  R600 출시에 약간의 문제가 있었다.

아무것도 모르는 우리는, Tunis와 Tunisia에서 열린 3일짜리 작은 이벤트에서 몇몇 소식을 들을 수 있었다. 이 대화는 짧았 고 산만하여 직설적으로 물어도 정확한 답변을 얻기가 쉽지 않았다. 주지해야 할 것은, 이 대화로 인해 R600을 포함한 AMD 의 로드맵에 대한 정보와 우리들의 견해를 말할 것이라는 것이다.

외관상으로는, 첫번째 R600 다이는 단지 디버깅 인터페이스만 통신이 가능한 것으로 보인다. 표면상으론 chip이 다 죽은것 같진 않 았지만, 이것은 가지고 있기엔 썩 좋은 문제는 아니다. 또한 우리가 듣기론 최근 리비젼의 칩은 픽셀 쉐이더에서의 단편화 로 인해 문제를 겪고 있다고 한다. 심지어 대화 중엔 농담으로 말하길 AMD는 디자인을 하고 운영진은 Nvidia로 가야 한다는  소리도 있었다.

개인적인 사견으로는, R600의 제조에 있어 떠오른 문제들에 관해 추측해봐야 한다는 것이다. 우리가 보기에 AMD는 MSAA를  그들의 하드웨어에 정상적으로 적용할 수 없어 강제적으로 쉐이더를 이용해 MSAA를 제어하기 보다는 그들의 예전 리비젼 다 이로 돌아가는게 나은 것 같다. 이것은 확실한 사실이 아니고, 단지 추측성이다.

다른 특이한 것은, AMD의 R600 라인업에 하이엔드 부분이 없다는 것이다. Radeon HD2900XT는 제일 높은 성능을 가진 그래픽  카드 라인업이며 399달러이다. 우리는 AMD가 399달러로 가격 책정을 한 것에 대해서는 높이 평가 하지만, 어떤 것이 있는지  확정해야 한다. AMD에 따르면, 2900XT가 더이상 비싸지는것을 원치 않기 때문에, 팔수록 AMD쪽에서는 손해라고 한다. 사실 대로 말하자면 AMD는 하이엔드 파트가 경쟁력이 없으면 계속 출혈 경쟁을 할 것이고, 그로인해 우리는 2900XT가 비싸다고  느끼지 않을 것이다. 뭐 이정도는 399달러 이상의 그래픽 카드를 사는 사람이 별로 없을 것이라 그렇게 큰 모험은 되지 않 지만, Nvidia에게 좋은 징조는 아니다.

또한, 계속되는 하이엔드 파트의 연기로 허덕이는 AMD는 이번이 R600을 시장에 내놓을 시기라고 보았다. 우리는  R700에서는 이런 되도 않는 연기를 하지 않고 발매를 하여 아주 높은 하이엔드 파트 를 AMD가 주름잡는 시대가 되길 바란다.

제품의 연기와 하이엔드 파트의 부재를 해도 Radeon HD2900XT가 Nvidia의 G80 발매때 ATI에게 했던 짓 처럼 콱콱 누를 수  있다면 별 상관 없지만, 불행하게도 상황은 그렇게 장및빛이 아니다. ATI의 최근 엄청난 이 2900XT는 와트당 최고 성능을  내주지 않아서, 이것은 소비 파워량의 증대 때문에 8800GTX에 대해 성능상으로 경쟁을 하지 못할 것이다. 400달러 이하의  그래픽 카드의 작살나는 전력 요구량은 전혀 이상적이지 못하다.

이것을 다 제외 하고서라도, R600에는 멋진 기술이 있으며, ATI는 이제 CPU 회사의 부분이기 때문에, 우리는 여느 다른 GPU  발표 행사때와는 다른 GPU에 대한 자세한 사양을 받을 수 있었다. AMD는 그래픽 부문을 아주 중요하게 여기고, 계속하여 하이엔드 그래픽 카드들을 내놓을 것을 약속함에 따라, 희안한 문제 들에 대한 뜬금없는 소문은, R600은 그래픽카드보다 R600 의 그 자체가 AMD에게 더 중요하다고 할 수 있겠다. 이 R600 프로세서로 인해 이 아키텍쳐는 AMD의 Fusion 프로세서에 쓰일  것이고, 그들의 복잡한 멀티코어 AMD 마이크로 프로세서에 쓰일 것이기 때문이다.

AMD의 1/4분기의 실패와 더불어, Fusion이 시장을 바꾸리라는 희망을 기다리기엔 너무 지쳤기 때문에, 우리는 지금의 R600 을 보고 이것이 어떻게 NVIDIA의 최근 그래픽 카드와 자웅을 겨룰 수 있는지 알아 보겠다.


돌아온 DX10.

게임이 늦게 나온다는 것은 또한 DX10 자체도 늦었다는 것이 된다; 운 좋게도 AMD에겐 DX10 타이들이 나와도 그것에 대한  별다른 대응법을 가지고 있지 않았다. - 몇몇 타이틀들은 최소 DX10 지원 패치를 한두달 안에 내놓을 것이지만, 그것이 우리가 말하려는 것이다. DX10이 도대체 DX9에서 옮겨야 할 정도의 충격적인 것을 제공할 것인가? 우리는 DX10의 대단한 품질의  데모를 Nvidia의 G80에서 보았지만, 우리는 여기엔 단지 R600의 새로운 트랜지스터들이 하게 될 일에 대한 것들만 다시 적어보겠다.

순수하게 성능상의 관점에서 보면, DX10은 DX9보다 훨씬 더 효율적인 상태와 오브젝트 관리를 하게 되어, 그 결과 API자체의 오버헤드를 더 적게 만들 것이다. 이것은 쉐이더 프로그램들에 대한 더 많은 공간을 제공해줌과 동시에, 오버헤드 감쇄  관리에 있어 중요한 역할을 하게된다. 더욱 복잡한 쉐이더 프로그램에서 DX10은 DX9보다 더 성능이 좋아야 한다.

요즘 CPU 쪽에서 뜨고 있는 논제는 가상화가 주요하며, GPU 제조사에겐 그다지 전문용어가 없음에도 불구하고 그래픽 분야 로 오면 그들 사이의 용어에 대해 말이 많다. DX10과 새로운 WDDM - windows display driver model - 은 그래픽 하드웨어에 서의 가상화를 지원하는 것을 요구하는데, 그 이유는 DX10 어플리케이션이 이제는 GPU의 배타적인 접근을 허락하지 않기 때 문이다. GPU와 이것의 자원은 3D game과 물리 연산으로 나뉠 수 있고, 또다른 방법으로는 완전 가상화 소프트웨어 셋업이라 던가, 여러개의 OS에서 GPU의 사용을 나눌 수 있다.

가상 메모리도 당연히 DX10 에서 요구를 하는데, 이것은 그래픽 카드의 메모리를 다 썼을때 GPU가 이제 시스템 메모리에서  벗어난 페이지 데이터를 사용할 수 있다는 것을 의미한다. 좋은 캐싱 알고리즘과 더불어 잘만 고나리 된다면, 가상화된 그 래픽 메모리는 게임 개발자들에게 엄청난 텍스쳐와 오브젝트를 사용할 수 있게 할 것이다. 3DLabs가 처음으로 가상화된 그 래픽 메모리를 그들의 P10 그래픽 프로세서에 2002년에 소개한 바 있다; Epic Games의 Tim Sweeney는 그래픽 카드에 대한  가상메모리에 대해 말하길 

 - "이것은 카맥과 내가 3D 카드 제조사들에게 아주 긴 시간동안 요구했던 것이다. 기본적으로 이것은 우리들에게 지금 할  수 잇는 것보다 훨씬 더 많은 텍스쳐를 사용할 수 있게 해준다. 당신은 당장에 요즘 게임에 대해 성능 향상을 못느낄 것인 데, 왜냐하면 게임은 언제나 비디오 메모리 보다 많은 텍스쳐를 사용하기를 꺼리기 때문이다. 그렇지 않으면 당신은 성능  저하와 텍스쳐 스와핑 때문에 성능이 팍 떨어지는 것을 경험할 수 있을 것이다. 가상 텍스쳐링은 스와핑 성능을 납득할만한  정도로 끌어 올릴 것인데, 왜냐하면 단지 실제적으로 그려지는 텍셀만이 비디오 메모리에 전송되기 때문이다.

그때 비디오 메모리는 캐시처럼 작동하여, 필요성이 없는 것을 가려낼 것이다. - 모든 텍스쳐가 메모리에 있는 것과 반대로 , 평균적으로 프레임버퍼, 백버퍼, 그리고 현재 신에 그려지는 텍셀 블록만 가질 수 있는 공간만 있으면 충분하다. 그러므 로, 이것은 IHV들을 성능 저하 없이 적은 비디오 램으로 구성하게 하며, 그러므로 적은 비용으로 빠른 램을 구성하게 된다.

이것은 가상메모리가 OS를 위해 렌더링 하는 것이다 : 이것은 RAM에서의 어려운 코드들에 대한 제한을 없애준다 - 어플리케 이션의 입장에서 본다면. -"

명확하게 P10은 게이밍 GPU에선 앞서나갔지만, 지금 DX10이 요구하는 것인, 가상화된 그래픽 메모리는 게임 개발자에게 꿈 을 실현시켜주고 DX10 GPU 에서 실행되는 게임의 질을 높여줄 것이다. 물론, 많은 GPU들이 지금 512MB나 더 많은 램을 보유 하고 있어서 이것은 예전엔 그렇게 큰 치명타가 되지 못했지만, 우리는 기가바이트 대의 램이 필요할 때의 게임과 시스템을   생각하고 말하는 것이다.

완벽한 3D API를 찾기 위한 성스러운 목표에 계속 도달하기 위해, DX10은 DX9때의 하드웨어 제원 표에서 더 업그레이드 되 었다. 모든 DX 10 하드웨어는 꼭 제한 사양 이상을 지원해야하며, MS는 오직 HLSL - High Level Shader Language - 이 쓰인  DX10 쉐이더만을 인정 해줄 것이다. 한가지 희망은 제한 비트제거와 쉐이더 레벨 조합 최적화는 NV30 - FX 5800 - 때와 같이 진짜 별로인 DX10 하드웨어/소프트웨어를 퇴출시킬 것이다.

DX10에서 별다른 요구사항이 없음에도 불구하고, 통합 쉐이더들은 API가 바뀐 결과의 산물이다. DX9때는 다른 정확도의 버텍스 쉐이더/픽셀 쉐이더로 있었지만, DX10에서는 통합 쉐이더를 더욱 더 어필하기 위해 모든 쉐이더는 32비트 정확도를 가진다. 같은 32비트 실행 하드웨어서, 픽셀,버텍스, 그리고 새로운 지오메트리 쉐이더를 실행시킬 수 있다 - DX에서 이미 소개되었다. - 통합 쉐이더는 하드웨어에서 아주 큰 효율을 끌어낼 수 있게 하며, DX10 을 요구하지 않는다 해도 ATI, nVIDIA 양사의 그래픽 카드는 괜찮은 성능을 이끌어 낼 것이다.마지막으로, SM4.0의 몇몇 향상된 것들이 있는데, 이것들은 단순하게 더욱 더 강한 쉐이더 프로그램과 엄청난 프로그래머의 유연성을 가지게 한다.




 마지막으로, DX10으로 옮기는 것은 단순히 DX 리비젼을 더 높은 버젼으로 옮기는 것 이지만 성능 향상율이 계속적으로 향상될 것을 바라진 말아야 한다. 미래의 DX 리비젼으로 갈수록 성능 향상은 더뎌질 것이다. 그렇지만, 오늘날에 이것은 우리에게 문제가 안된다 ; AMD의 첫 DX10 설계인 R600은 DX9 시대의 Radeon 1900 시리즈와 비교해 많은 것이 바뀌었다.


R600 보기.

개요도를 보면 우리는 G80과 같은 구조를 볼 수 있는데, 파이프라인 각각의 단계는 같은 하드웨어에서 구동되는 것 같이 비슷하다.  좀 물러서서 바라보면 많은 유사점이 있는데, 성과를 위해 같은 목표를 가진듯 하다. - 노하우를 통해 어느 설계를 해야 효율적인지 둘 다 비슷하게 아는 듯 하다 - ; 데이터가 GPU로 들어오면, 연산을 위해 셋업을 하고, 쉐이더 코드가 데이터를 처리하고, 결과물이 다른 경로의 쉐이더로 가거나 그려진 것이 프레임 버퍼로 나가게 된다.




명확한 것은 R600은 통합 아키텍쳐로써 DX10을 지원하는 것이다. 이번 DX10의 요구 사항들은 매우 엄격해서, 우리는 기본적인 단계에서 회사 자체의 변화된 사양을 볼 수 없었다. AMD와 Nvidia는 DX10 사양에서 자유로웠지만, 이 형식들은 아주 작은 트위킹 말고는 MS API를 거치면서 보여지지 않았다. AMD는 우리가 나중에 얘기할 테셀레이터 유닛 같은 것을 넣은 것 등이다. 이제는, R600의 레이아웃을 살펴보자.




처음 볼때 보여지는 것은 엄청난 양의 스트림 프로세싱 능력이다 : 320개의 스트림 프로세서들이 말해준다. 이것들은 NVIDIA의 스트림 프로세서와 약간 다른데, 다음 몇 페이지에서 왜 그런지 말 할 것이다. 우리의 블럭 다이어그램이 보여주듯 R600의 스트림 프로세서들은 작은단위로는 8개의 그룹으로 나뉘어 지고,  많은 수의 스트림 프로세서들의 묶음으로는 4개의 그룹에 산재해있다. 각개 4그룹은 그들만의 텍스쳐 유닛에 연결되어 있고, 그들은 Shader Export하드웨어와 local read/write 캐시와 연결되어 있다. 이 모든 것이 80nm 공정의 TSMC 에서 만들어졌고, 720 million 개의 트랜지스터가 이웃같이 서로 연결 되어 있다. 모든 다른 R6xx 파트는 65nm 공정으로 약간 적은 수의 트랜지스터가 있으며, 그것은 더욱 칩을 작고 에너지 효율적으로 만들어졌다. 코어 클럭은 R600 코어가 740Mhz, 메모리는 825Mhz로 구동한다.

메모리는 높은 대역폭에 비해 좀 느린데, R600은 512bit 메모리 버스를 쓰기 때문에 그렇다. 메모리에 대해 말하자면, AMD는 그들의 링버스 아키텍쳐를 재구성하였고, 나중에 깊이 파고들 것이다. 불행하게도 우리는 NVIDIA의 메모리 구조와는 비교를 할 수 없는데, Nvidia는 내부 메모리 버스에 대해 자세한 자료를 우리에게 주지 않기 때문이다.

Nvidia는 깊숙히 말할 게제가 없는데, AMD는 아주 깊숙한 레벨까지의 자세함까지 공유할 수 있는데, 캐시의 크기라던가 쉐이더 하드웨어 도구 같은 정보도 포함하고 있다. 우리는 이런것에 대해 말하는 것을 매우 행복하게 여기며, AMD로 하여금 Nvidia가 그들의 설계에 관한 자세한 것들을 열게 되는 계기가 되었으면 한다.

다른 멋진 점을 때리자면, R600은 또다른 흥미로운 특이한 형태를 가지고 있다. 테셀레이션 유닛 내장이 그것인데, 그들은 또한 하드웨어 안에 오디오 프로세서도 내장하고 있다. 이것은 오디오 스트림을 접수 하며 그들의 DVI포트로 보낼 수 있으며 특별한 컨버터를 통해 HDMI로 오디오 내장을 한 비디오 스트림을 보낼 수 있다. 이것은 특이하며, 현재 HDMI가 변환하는 것은 비디오 정보일 뿐이다. AMD는 또한 프로그래밍 가능한 AA 형식을 가지고 있어 그들의 드라이버 팀은 새로운 방법의 필터링 서브 샘플링 데이터를 만들고 있다.

R600은 또한 독림 DMA 엔진 형식을 가지고 있어 모든 메모리와 GPU간의 이동을 제어하고 관리 할 수 있는데, PCIe 채널을 넘은 주 메모리 채널로도 가능하다. 이것은 엄청난 양의 메모리 대역폭과 짬뽕이 되어 많은 양의 데이터를 원하는 어플리케이션에 진실로 도움이 될 것이다. 8k*8k 크기의 텍스쳐를 지원하는 DX10은, 이 제한은 미래의 게임에 대해 매우 흥미로울 것이라 내다보고 있다.

이정도로 표면은 됐고, 좀 들어가보자.


다른 타입의 스트림 프로세서들.

R600의 쉐이더 코어를 볼때 필요한 첫번째는 우리의 기준을 정의하는 것이다. AMD와 Nvidia는 그들의 선호에 따라 스트림 프로세서들을 만들었는데, 그들은 그것들의 숫자를 세는데 좀 어렵게 해놨다. 처음부터 끝까지 우리의 설명은, 우리가 G80에 대해 설명하던 그 게시물과 같이, 버텍스나 예전의 픽셀 쉐이더와 CPU같은 명령어의 흐름으로 설명하지 않겠다.

스트림 프로세서들 : Nvidia의 방법.

G80은 128개의 SP를 가지고 있는데 - 8800GTX는 128개, 8800GTS는 96개 - ATi에 비해서 아주 적은 숫자이다. 이들은 평범한 FP 연산을 할 수 있고, - MADD같은 - 특별 연산 명령이나, - sine 같은 - 정수 연산도 가능하다. 별난 MUL 연산같은 것을 억지로 하는 경우도 있지만, 거의 이 MUL은 하지 않는다. 각각의 SP들은 개인적인 연산 도구이다 - 버텍스나, 픽셀같은 예전 연산 라인 -

이것은 128개의 스레드가 1 클럭에 연산이 된다는 것을 의미한다. 각개의 128개의 SP가 완전히 독립적이지 않다는 것을 깨닫는 것이 중요하다. 왠말이냐 하면, 이것들은 128개의 각개 다른 스레드로 128개의 명령을 수행할 수 있으면서도 128개의 각개 다른 명령어들을 1클럭에 소화하지 못한다. 조금 더 깊이 들어가면, 어떤 쉐이더로 운용되냐에 의존하기 때문에, 같은 명령이 다수의 스레드에서 실행이 된다.

Nvidia 하드웨어에서는, 최소한 16개의 스레드 - 버텍스 연산에서 - 가 같은 명령으로 실행이 되어야 한다. Nvidia의 블록 다이어그램이 보여주길 각개 그룸의 16개 SP가 텍스쳐, 레지스터와 캐시 자원을 공유하기 때문에, 어쩔 수 없는 것이다. 픽셀쉐이더들은, 퍼포먼스 향상을 위해 더욱 중요한데, 한번에 최소 32개의 스레드가 실행 되어야 한다. 우리가 Nvidia의 그래픽 카드에서 추론해낼 수 있는 것은 8개의 다른 명령어를 1클럭에 128개의 SP에서 실행 할 수 있다는 것이다. - 픽셀쉐이더 작업이라면 딸랑 4개 -

128sp/ 클럭/명령당 16스레드 =8 버텍스 명령을 1클럭에.
128sp/ 클럭/명령당 32스레드 =4 픽셀 명령을 1클럭에.



스트림 프로세서들 : AMD의 R600

R600에서는 약간 좀 다르다. AMD가 말하기를 320개의 SP들이 있다고 하지만, G80의 128개와 직접적으로 비교하기에는 무리가 있다. 첫번째로, 대부분의 SP들은 단순하고 특별 함수 명령을 처리하지 못한다. 모든 블럭당 5개의 SP가 있는데, 오직 그중 1개가 특별 함수 명령이나 보통 FP 연산이 가능하다. 특별 함수용 SP들은 또한 1개의 정수 곱셈을 할 수 있고, 다른 sp들은 단순 정수 연산만을 할 수 있다.

이것은 뭐 그렇게 큰 일이 아닌데, 요즈음에 와서는 직접적인 부동소수 MAD나 MUL 성능은 쉐이더 퍼포먼스를 제한해버리는 요인이 되기 때문이다. 큰 차이점은 AMD는 이 5개의 sp에 1번에 1개의 스레드만 - 버텍스, 픽셀, 예전 방식 - 실행 가능 하다는 것이다.




이것은 각각의 5개의 SP가 1개의 블록으로 되어 있어 모두 다 1 스레드로 되어 명령을 처리 해야 한다는 것을 의미한다. AMD가 5개의 스칼라 명령을 병렬적으로 이 스레드에서 처리할 때, 이 명령들은 완전하게 블록마다 각각 독립적이 된다. 이것은 쉐이더 코드를 병렬 명령으로 풀어내는 AMD의 컴파일러에겐 무거운 짐이 된다. AMD의 경우 아주 긴 길이의 명령어는 블락안의 5개 SP 모두가 작업을 하게 되지만, 이런 때는 드물다.




한발짝 물러서서, 우리는 얼마나 많은 스레드를 AMD가 클럭당 처리 할 수 있는지 측정해보기로 했다. 320개의 모든 sp들이, 5개마다 1그룹으로 묶여 스레드를 처리한다면, 우리는 64개의 스레드를 클럭당 처리 할 수 있다고 나온다. 이제부터 시작하는게 진짜인데, 아까 전에 그 Nvidia의 아키텍쳐와 비교하면, 약간 더 깊게 들어가서 까발려 봐야 한다.

스트림 프로세서 실행

점점 깊게 들어간다. - 단명령 복정보

SIMD는 1개의 명령어가 여러개의 데이터를 거친다는 개념이다. 이것은 보통의 그래픽카드 하드웨어에선 일반적인 것이다; 여러개의 점들, 초기 데이터들, 픽셀들이 같은 쉐이더 프로그램을 필요로하며 실행된다. 하드웨어가 만드는 연산들은 1번 연산에 엄청난 양의 데이터를 만들어야 하고, 각각의 데이터는 매우 효율적이다.

SIMD 하드웨어에서는, 다중 연산 유닛들이 같이 묶여있다. 하드웨어는 1개의 명령을 SIMD하드웨어로 내보내고, 모든 연산 유닛들은 특정 데이터에 대해 그 연산을 실행한다. 모든 그래픽 하드웨어는 이 컨셉으로 만들어져있다. 실행되는 하드웨어는 각각의 SP들의 관리요구에 대한 어려움을 피하기 위해 데이터통과만이 아니라 명령어까지 같이 관리한다.

더 깊게 - 아주 긴 명령어

보통 우리가 프로세서의 명령을 생각할때, Add나 Multiply 같은 단연산 만을 생각한다. 그러나 당신이 여러개의 명령어를 한번에 병렬 하드웨어로 실행하길 원한다고 상상해보라. 아마 당신은 VLIW - Very long Instruction Word - 와 비슷한 기술을 생각해낼 것이며, 이것은 연산을 단순화 시킴과 동시에, 만약 각각 모두 의존적인 관계가 아니라면, 그들을 함께 뭉쳐 1개의 명령을 실행 시키게 할 수 있다.

우리가 5개의 연산 유닛을 가지고 있고 이것을 병렬 연산에 사용한다고 가정해보자. 이 하드웨어를 이용하기 위해서 우리에게 필요한 것은 각각의 5개의 유닛에 각각의 독립적인 명령어를 내는 것이다. 이것은 코드가 돌고 있을때에는 딱 정하기가 어렵다. VLIW는 우리에게 하드웨어의 명령어 의존을 통해 정할 수 있게 하고 컴파일러에 넣는다. 이 컴파일러는 이 때 아주 독립적인 연산 작업에 적합한 명령어로 이루어진 단명령을 만든다.

VLIW는 하드웨어의 복잡성의 추가 없이 병렬 연산에 혁혁한 공을 세웠지만, 의존성과의 인과관계를 따지면서 만들려면 컴파일러 디자이너는 아주 머리가 깨진다. 운이 좋게도, 그래픽 하드웨어는 이런 타입의 연산에 대해 자기에게 알맞게 맞추지만, 쉐이더는 점점 복잡해지고 우리는 더욱 더 의존적인 명령어를 보게될 것에 흥미로워진다.

AMD의 R600으로 다시 가보자.

AMD의 R600 쉐이더 코어는 4개의 SIMD 어레이를 사용한다. 이 SIMD 어레이들은 5개의 - 브랜치를 쓰면 6개 - VLIW 명령을 내놓는다. 이 VLIW 명령어들은 1번에 16 스레드의 연산을 한다. - 점, 초기정보, 픽셀 - 몇가지 더 말하자면, AMD는 2개의 다른 VLIW 명령을 다른 쉐이더로부터 SIMD 유닛의 파이프라인 사용 극대화를 하기 위해 인터리브를 사용한다. 우리가 이해하기로 이것은 첫 VLIW 명령어에서 사용되는 모든 데이터가, 다음 VLIW 명령어에서도 같은 쉐이더에서 사용 가능하게 하기 위해서이다.

이 하드웨어에 기반하여, 우리는 약간의 수학으로 R600은 4개의 VLIW 명령어 - 20개의 전혀 다른 쉐이더 연산자들 - 를 낼 수 있는 능력이 있다는 것을 알았으며, 모두 64개의 다른 스레드가 작동을 한다. 각각의 스레드는, 특정 스레드를 연산하여 VLIW 명령어를 실행하는 SIMD유닛에서 정의하는 5개의 각기 다른 연산자들로 작동할 수 있다.

픽셀 프로세싱을 위해서는, AMD는 SIMD 유닛에게 8x8 블럭 - 64픽셀 - 을 스레드로 지정하여 여러 클럭에서 연산 가능하게 하였다. 이것은 브랜치 조각들을 작게 조각낼 수 있게 하며, - 그룹 안의 64개의 픽셀들은 같은 코드 패스를 따라야 한다 - 이것은 탄탄하게 묶인 픽셀들의 근접성의 이론에 의해 충분히 늘어날 수 있다. - 다시말해서, 인접한 픽셀들은 픽셀들은 비슷한 데이터/텍스쳐를 필요로 한다. - 외관상으로는 브랜치 조각들이 128개로 늘어난 것 같은 경우로 보이지만, 우리는 이런 경우가 언제, 왜 생기는지에 대한 정보가 없다.

딱 읽어 보기에는 아주 복잡한 방법 같지만, 걱정하지 마라 ; 이것은 복잡하다. AMD는 거대한 길이의 병렬 데이터를 효율적으로 제어 하려고 하드웨어를 만들었고, 의존성은 최대 퍼포먼스에서 문제를 일으키고 있다. 컴파일러는 모든 VLIW 명령 당 5개의 명령으로 풀어내지 못할 것이다. 최악의 상황에서는, 4개의 VLIW 명령어가 주어질 때 블록 당 1개의 SP만 효율적으로 움직이는 것이다. 이것은 이 카드의 연산 효율을 320에서 64로 떨어뜨리는 결과를 가지고 온다.

밝은 면은, 아직 우리는 R600이 제일 안좋은 경우의 성능을 낼 때를 보지 못하였다. 왜냐하면 점들과 색상은 각각 4개의 부속이고, 이것은 거의 보통 상황에서 피크치에 근접하는 동작을 할 것이기 때문이다.

다음 - Nvidia의 G80

Nvidia는 그들의 칩에 녹아있는 설계에 대해 더욱 더 함구를 하고 있지만, 우리는 그들의 블럭다이어그램과 우리들이 보고 대화한것을 통해 추론이 가능하다.

G80의 쉐이더 코어는 R600과 약간은 다르다. 이것은 8개의 SIMD 유닛이 내장되어 있고 각 SIMD 유닛은 16개의 SP를 제어한다. SIMD 명령은 VLIW가 아니라, 단 스칼라 명령이며, SIMD 유닛 안에 있는 각각의 SP는 다른 스레드의 명령을 실행한다. 16sp들의 그룹이 자원을 공유하며, Nvidia의 컴파일러는 VLIW 명령에 대한 설계가 필요치 않은데, 각각 다른 스레드로 작동하는 SP 들에게 이런 SP들에 대한 의존성을 만들어 VLIW짜기는 매우 어렵기 때문이다.

이제부터 중요한 부분인데, 8개의 독특한 쉐이더 명령은 128 스레드를 모두 1번에 동작시킨다. 이것은 클럭당 스칼라 연산 128개를 1번에 끝낼 수 있거나, 완전한 4단계 벡터 오퍼레이션 128개를 가지고 있다면 한 컴포넌트당 4클럭을 사용하여 끝마칠 수 있다는 것을 의미한다.

Nvidia 하드웨어에서는, 벡터 스레드는 16개를 한 블럭으로 SIMD 유닛에 귀속시키고, 지오메트리와 픽셀 스레드는 32개를 한 블럭으로 한다. - 16 스레드를 2클럭으로 - 블럭이 작아지면, 더 좋은 성능을 얻을 수 있지만 캐시나 프리페치 작동이 나빠진다.

또 이 실행이 의미하는 것은 우리는 쉐이더 코드에 대한 의존성에 대해 걱정할 필요가 없다는 것이다. 물론, 쉐이더 코드 스스로가 병렬화를 이끌어내지는 못한다. 그러나 꾸준히 128 명령을 1 클럭에 처리 할 수 있는 장점이 있다.  이것은 특별한 경우이지만, 그래도 보통의 상황에서 성능이 떨어지는 일은 없다.

쉐이더 설계 비교 : R600 vs G80

설계 비교의 핵심은 둘다 도토리 키재기라는 것이다. 우리는 얼마나 클럭당 작업을 많이 끝 낼 수 있는지, 얼마나 클럭당 작업을 끝낼 수 있는 능력이 있는지, 그리고 일정 시간 당 얼마나 많은 양의 작업을 끝낼 수 있는지를 보는 것이 중요하다.

첫번째로, G80은 병렬로 많은 연산을 할 수 있다 : 128개는 R600의 64개와 비교된다. 한번에 더 많은 스레드를 처리하여 전체 병렬 연산의 성능 향상을 끌어내는 것이 고질적인 그래픽 카드의 과제이다. 모든 프레임에는 몇백만개의 픽셀들을  연산해야 한다면, 우리는 그에 걸맞는 하드웨어를 가지고 있어야 한다.

그러나, ATi의 64 스레드는 Nvidia의 128스레드보다 5배나 높은 잠재력을 가지고 있다. 왜냐 하면 Nvidia가 SP당 - 대부분의 경우 - 한 클럭에 1 명령어만 제어할 수 있는데 반해 R600은 5개의 병렬 연산을 실행할 수 있기 때문이다. 그러나 AMD의 하드웨어에서 성능을 극대화 하기는 매우 어려운 일이라, 우리는 실제 코드 상에서 계속적으로 최대 성능을 보기는 어려울 것이다. 제일 이상적인 경우는, R600은 G80에 비해 클럭당 2.5 배의 작업을 할 수 있는 것이다. - R600엔 320개의 연산, G80엔 128개의 연산 - 최악의 경우는 두 아키텍쳐에 대한 코드의 의존성으로 인해 G80이 R600에 비해 클럭당 2배의 성능을 얻는 경우이다 - R600엔 64번의 연산, G80엔 128번의 연산 -

정말 다른 점은 병렬화를 풀어내는 방법에 있다. 두 아키텍쳐 모두 각개 독립적인 스레드를 복수의 SIMD 유닛에 사용함으로써 나타난다. Nvidia는 그래픽 영역에서 병렬화의 극대화를 노린다면, AMD는 VLIW 사용 접근에 의해 병렬화를 명령어의 흐름에서 풀어 내려고 한다. AMD의 평균적인 경우는 코드 작동의 의존도에 따라 달라질 것인데, 많은 연산들이 벡터에 기반되어 있다 하더라도, 높은 작동률을 기대할 수 있다.

그러나, AMD 하드웨어에서 높은 사용률을 기대한다손 쳐도, G80은 높은 클럭에 대한 이득이 있다. G80의 쉐이더 코어는 1.5Ghz인데, 그래도 여전히 우리는 R600이 빠른 경우를 종종 볼 수 있지만, 거의 모든 경우에서 G80은 순수 연산 성능에서 R600의 최고 성능을 낸다.

이 오버뷰는 여전히 주목할만한 성능은 없다. 효율적인 레이턴시는 숨겨져있고, 좋은 스케쥴링, 높은 캐시 사용률, 텍스쳐 데이터의 높은 이용률, 좋은 브랜칭, 빠르고 효율적인 Z-스텐실과 색 연산 모두 좋다. 이제 우리는 가능한한 좀 더 둘러볼 것이다.

extremetech의 부연설명입니다.

http://www.extremetech.com/article2/0,1697,2128925,00.asp

R600은 4개의 텍스쳐 유닛을 가지고 있는데, 제일 최선은 이 유닛들을 유닛이라 생각하지 말고 예전 세대 제품의 TMU로 생각하면 간단한 것이다. 각각의 R600의 텍스쳐 유닛은 연산 블럭이며 폭넓은 기능을 담당한다.

1개의 텍스쳐 유닛 블록은 8개의 텍스쳐 어드레스 프로세서를 가지고 있고 텍스쳐 look-up 제어를 위한 쉐이더 명령을 실행하기 위해 존재한다. 이것은 또한 32비트 부동소수 텍스쳐 샘플러를 가지고 있으며, 각각의 유닛은 1개의 값을 클럭마다 가져올 수 있다. 마지막으로, 여기엔 4개의 부동소수 텍스쳐 필터 유닛이 있으며, 클럭당 바이리니어 필터를 64비트 컬러값으로 - 컴포넌트 텍스쳐는 16비트 - 계산할 수 있다. 128비트 값 - 32비트 컴포넌트 텍스쳐 - 은 2번의 클럭 사이클이 필요하다. 그리하여 이걸 다 합해서 보면 HD 2900XT는 텍스쳐 lookup 제어를 위한 32개의 프로세서를 가지고 있꼬, 80개의 텍스쳐 샘플을 가져올 수 있으며, 16개의 부동소수 텍스쳐를 필터링 할 수 있다고 할 수 있다. 이것은 Radeon X1950XT에 비하면 장족의 발전이다 : ATi가 주장하길 부동소수 텍스쳐 필터링은 7배나 빠르다고 주장한다. 삼선형과 anisotropic 필터링은 모든 텍스쳐 포맷에서 지원된다. anisotropic 필터링에 대해 얘기 하면, 선택적인 "높은 질:의 AF모드를 X1000 시리즈에서 선택 해야만 할 수 있다. 텍스쳐 유닛은 텍스쳐를 8k*8k 크기까지 지원하며, 각각의 텍스쳐 유닛은 1개의 필터링된 텍스쳐나 필터링되지 않은 텍스쳐를 클럭마다 가져올 수 있으며, 1개의 필터된 텍스쳐에서 4개의 필터되지 않은 텍스쳐를 갖고 올 수 있다.

부연설명 끝

텍스쳐링, 캐시, 그리고 메모리

텍스쳐링

R600은 우리가 예상 했던 것보다 적은 텍스쳐 하드웨어를 쓰고 있는데, 이것은 AMD가 연산 능력에 대한 것이 도마에 오를지라 하더라도 똑같을 것이다. 동시에, 우리가 알고 있는 정보가 없다면 아무것도 못할 것이다. 그러므로 AMD가 그들의 텍스쳐 유닛에 뭔 짓을 했는지 보도록 하자.




R600에는 4개의 텍스쳐 유닛이 있는데, 각개가 SIMD 유닛이다. 이 유닛들은 AMD의 디스패치 프로세서에 의해 독립적으로 설계되어 SIMD 유닛 내에서 서로 자원을 공유하지 않는다. 이 디스패치 프로세서는 스레드에 어떤 데이터가 필요할지 결정하는데 SIMD 유닛의 데이터 요청과 공간이 빌 것이라는 것을 기다리는 과정이 없게 텍스쳐 유닛을 실행하고 제어한다.

R600의 텍스쳐 유닛은 쉐이더가 작동할 때 필터링 되거나 필터링 되지 않은 텍스쳐 요청에 상관하지 않는다. 필터링 되지 않은 텍스쳐는 버텍스 텍스쳐, 노멀맵, 그리고 지오메트리 블럭 데이터  같은 이미지 기반 텍스쳐가 아닌 것에 대해 쓸모가 있다. 필터된 데이터의 요청은 이미지 데이터의 픽셀의 색상 등을 정하기 위해 보통 쓰인다. R600은 1클럭당 1 텍스쳐 유닛으로 필터링 되지 않은 데이터의 주소를 지정할 수 있고 필터링 된 데이터에 관해서도 동일하다. 필터된 데이터를 담당하는 유닛은 필요할 경우 필터되지 않은 텍스쳐를 요청할 수 있고, 이 경우 1개의 필터된 텍스쳐에 4개의 필터되지 않은 텍스쳐를 추가로 제공한다.

필터되지 않은 텍스쳐 요청은 - 컴포넌트 1개 당 - 4개의 FP32 텍스쳐 샘플러로 돌아올 것이며, 필터된 데이터 요청은 텍스쳐 필터링 하드웨어 결과로 4개의 필터링된 텍스쳐 샘플이 될 16개의 데이터로 올 것이다. 하드웨어는 최고 32개로 이루어진 fp16의 필터되지 않은 결과를 텍스쳐 유닛에서 1클럭당 뽑아낼 수 있다. 실제로는, 각각의 텍스쳐 유닛은 클럭당 4개의 이중선형으로 필터된 이미지와 4개의 fp16 샘플 컴포넌트를 필터되지 않은 4개의 데이터 결과물로 뽑아낼 수 있다. fp32 컴포넌트로의 텍스쳐로는, 바이리니어 필터 연산으로는 대역폭의 한계로 인해 1번에 데이터 1/2만을 갖고 올 수 있기 때문에 2번의 클럭이 요구된다.

이것이 확실히 R600에서 발전한 것으로, R5xx 칩은 부동소수 텍스쳐 필터링용 하드웨어를 가지고 있지 않다. 각각의 4개 텍스쳐 유닛이 작동하면, R600은 32개의 필터되지 않은 텍스쳐나 16개의 필터된 텍스쳐 + 16개의 필터된 텍스쳐 - fp16이나 바이리니어 필터링보다 적은 비트를 썼을 경우 16개를 더한다 - 를 처리할 수 있다.

G80은 4개의 텍스쳐 어드레싱 유닛으로 16SP들로 구성된 블락당 8개의 텍스쳐 필터로 구성되어 있다. 모두 합해, 이것은 Nvidia의 하드웨어는 32개의 필터된 텍스쳐 샘플을 클럭당 생산한다는 말이다. - 다시 말하지만, fp16이고 바이리니어 필터링 됐을때의 이야기이다 - 물론, Nvidia는 클럭당 2배의 많은 스레드를 연산하고, 이것은 추가 필터된 데이터에 대해 좀 더 많은 이익을 얻을 수 있다고 상상할 수 있다.

우리는 이제 AMD의 필터되거나 되지 않은 텍스쳐의 병렬 처리에 대한 접근 방식이 어떤 것인지 느긋히 지켜 봐야 한다. 픽셀 쉐이더의 보통 경우는, 클럭당 더욱더 많은 필터된 이미지를 보여줘야 하지만, 버텍스와 지오메트리 쉐이더가 같이 짬뽕이 된다면 하드웨어 공간을 줄이면서 더 많은 텍스쳐링 위력을 보여줄 것이다. 최종 텍스쳐링 노트에, AMD는 깊이 스텐실 텍스쳐를 위한 필터 하드웨어를 "percentage closer" 라는 도구로 언급 했다. 이것은 개발자에게 소프트 쉐도우를 빠르게 하는 도구가 될 것이다.

최종 : 캐시 사이즈에 대한 잡설

우리는 Intel과 AMD CPU에 대한 캐시 크기에 대해 여러 말을 하였다. 그러나 그래픽 하드웨어에서는 딴나라 이야기였다. 몇번 우리가 많이 물어보긴 했지만, 다른 싸이트는 그때 지금까지 알려진 지식에 의해 추측해서 곧 나올 쉐이더 코드가 얼마나 데이터가 다이에서 맞느냐를 따질 뿐이었다. 오늘날 우리는 R600 캐시에 관해 당신에게 모든걸 알려주게 되어 기쁘다.

4개의 텍스쳐 유닛은 2레벨의 캐시들에 연결되어 있다. 필터되지 않은 데이터들은 - 필터되지 않은 데이터인 - 버텍스 캐시로 곧장 요구를 하며 필터된 데이터의 요청은 l1 캐시를 쓰게 한다. 각각의 캐시 크기는 32kB이고 읽기만 가능하다. 모든 텍스쳐 유닛은 이 캐시를 공유한다.




이 두 L1 텍스쳐 캐시와 버텍스 캐시는 256kB의 L2 캐시로 연결이 되어 있다. 이것은 칩에서 가장 큰 캐시이고, 8k*8k 사이즈의 텍스쳐의 이동도 잘 제어할 수 있을 것이다.

쉐이더 하드웨어에게는, SIMD 유닛과 8kB 읽기/쓰기 캐시로 연결되어 있다. 이것은 필요하다면 레지스터 공간을 가상화하는데 쓰이거나, 스트림 아웃 버퍼에서 데이터를 뽑아낸다. -  이것은 어떤 종류의 스레드에서든 가능하며 필요하면 ROP에서 그릴 데이터를 바이패스 할 수도 있다 - 이 캐시는 또한 버텍스 버퍼로 그리는 것에 대해 가속을 한다.




대부분의 R600의 쓰기 캐시는 이 캐시들이 write-back이 아니라는 어떠한 사양도 받지 못했음에도 불구하고 write-back 캐시라고 한다. - exclusive방식, AMD CPU에도 쓰이는 방식. Intel은 write-through - 인상적인 것은 어떠한 유닛이 쓰기 캐시에 연결된 메모리쪽으로 데이터를 써야 하는 일이 생기면 쓰기 조합의 버스 사용률을 최대화 시켜, 쓰기 지연시간을 숨기고, 짧은 시간에 재사용을 한다. 우리는 쉐이더 캐시 - AMD가 쓰기/읽기 캐시라고 부르는 것 - 도 또한 write-back 인것으로 추측한다.

우리가 정보를 모르는 캐시는 오직 Z 스텐실 캐시와 ROP쪽에 연결되지 않은 컬러캐시 뿐이다.

메모리와 데이터 이동

R600의 내부 캐시 대역폭은 180GB/sec이며, 2차 링버스는 x1k 시리즈때의 기술이며, 100GB/sec의 쓰기/읽기 대역폭을 가져다 준다. 메모리는 110GB/sec 대의 대역폭을 제공하고, AMD는 내부 버스가 외부 버스와 잘 매치된 탓에 오버헤드를 줄일 수 있다고 언급 하였다. 중요한 것은 모든 데이터의 입출력이 아주 빠르게 이동된다는 것이다.

우리가 언급했듯이, R600은 다시금 링버스를 부활시킨 것으로 보이는데 이것은 - x1k 시리즈에서는 링버스에서 읽기만 가능하고 쓰기는 크로스바를 통해서만 가능했던 것과 달리 - 이제 읽기와 쓰기 데이터를 둘 다 제어 할 수 있다. 독립적인 DMA 컨트롤러가 여러개의 링 정류소를 관리한다. 1쌍의 메모리 채널이 1개의 링 정류소로 구성되며, 각각의 링 정류소에 연결된 2개의 256bit 대역의 연결이 있다. 이 링 버스는 1024개의 선으로 되어 있어 읽기와 쓰기를 각각 링으로 연결된 또다른 메모리로 최소 경로로 이동할 수 있다.




이 링 버스는 PCIe 버스를 통해 다른 기기들을 또다른 메모리로 인식한다. DMA 하드웨어는 모든 트래픽을 관리하고 온보드되거나 시스템 메모리도 같은 방법으로 관리 하여, GPU상의 메모리 클라이언트가 왈가왈부할 사항이 없다. 링버스는 84개의 읽기와 70개의 쓰기 인자를 가지고 있다.




외부 메모리 인터페이스는 512bit인데, X1k의 최대 대역폭인 256bit의 2배이자 G80의 384bit메모리보다도 크다. 메모리 속도는 전세대 AMD 하이엔드 하드웨어보다 낮지만, 총 대역폭은 더 높다. 이 결과는 AMD가 G80의 메모리 대역폭에 비해 약간 더 앞서는 결과이다.

512bit 메모리 인터페이스의 실행에 있어서, AMD는 또다른 I/O를 넣는것을 원하지 않았다. 그들은 그들이 쓰던 I/O 패드 디자인을 썼다. 불행하게도, 실행에 대한 자세한 사항은 모호하고 다른 고주파수의 I/O가 있는데도 불구하고 클럭을 높게 유지하는 형태 자체도 왜 그런지 모르겠다.

쉐이더를 넘어서 - 픽셀에 색 입히기

우리는 최근 렌더링 파이프라인의 행보를 무시 못하는데, AMD가 역시나 - Nvidia의 ROP와 비슷하게 - 화면에 각각의 색을 입힌 최종 픽셀을 뿌릴 역할을 담당하는 그들의 ROP를 업데이트 했기 때문이다. 이것의 다음에는, ROP가 압축과 해제를 제어하고, 텍스쳐기능에 의한 렌더를 하고, MRT들, 프레임 버퍼 포맷, 그리고 AA를 실행한다.

다시말해, 중요한것 중 하나인 ROP를 R600은 4개를 가지고 있다. 이것은 클럭이 최대화 되어도 1클럭에 16픽셀만을 볼수 있다는 것이며, R580과 다른게 없다. 그러나, AMD는 Z스텐실 하드웨어를 2배 강화 시켜 Z 스텐실은 총 32개의 결과를 ROP에서 뽑아낼 수 있다. 순수 필레이트는 이제 문제가 되질 않으나, Z 스텐실 능력은 중시된다. 그러나 ROP 4개가 과연 충분할까?




ROP의 효율이 증대되어오긴 했으나, 쉐이더 하드웨어에서 클럭당 64스레드를 완료하는 잠재력이 있다면, 그들은 ROP를 좀 더 개선을 해야 할 것이다. R600은 보여지는 부동소수 포맷을 11:11:10에서 128비트 부동소수로 바꿀 수 있다. DX10은 8개의 MRT를 필요로 하기에, 이들은 달성 해냈다. 이것으로 인해 더욱 복잡한 효과에서도 더욱 빠른 연산을 통해 더 효율적인 텍스쳐 생성을 가능하게 한다.

Z 스텐실 하드웨어

Z 스텐실 하드웨어가 신경 쓰였었으나, 압축이 16:1까지 지원되어 8:1을 지원하는 X1k 보다 향상되었다. 깊이 테스트는 스텐실 쉐도우의 속도를 높이기 위해 프로그램적으로 제한된 범위에서밖에 사용하지 못한다. 우리의 Z 버퍼는 24비트보다 높아진 32비트 부동소수이다. AMD는 또한 Hierarchical 스텐실 버퍼를 추가시켜 이런 구성에 원래 렌더링에서 도움을 주지 못했던 상황에서의 Hierarchical Z 제어를 향상 시켰다.

AMD는 Re-Z라고 불리우는 것을 소개 했는데 이것은 Early-Z가 가진 업데이트된 Z 데이터를 쉐이더가 제어할 수 없었던 문제를 해결하기 위해 디자인 되었다. R600은 Z 값을 검사하여 쉐이더가 변형된 후의 Z 데이터를 쉐이더에 잘 적용할 수 있게 할 수 있다. 이것은 AMD가 계산을 위해 ROP에 다시 시점의 변경을 보내지 않고 업데이트를 하는 것이 가능하다.

만약 우리가 이 셋업 과정을 G80과 비교한다면, 텍스쳐 처리 능력에 대해서는 걱정하지 않는다. G80은 클럭당 - 6개의 ROP에서 ROP당 4픽셀씩 -  24픽셀을 완료시킬 수 있다. R600과 같이, G80은 Z만의 성능은 2배를 할 수 있는 능력이 있어 48Z 스텐실 연산을 AA 적용 상태에서 실행할 수 있다. AA가 적용되지 않는다면, 하드웨어는 클럭당 192개의 Z 샘플을 처리한다. ROP들의 스레드 작동 비율은 G80보다 R600이 나쁘다. 동시에, G80은 성능이 좋은 클럭당 픽셀 처리 능력과 클럭 스피드로 더 높은 전체 필레이트를 제공한다.

CFAA와 해결못한 하드웨어 문제

맞다. R600은 ROP 차원에서의 MSAA를 지원하는 기능을 갖추지 못하였다. - MSAA에 관련된 작업은 ROP가 서브픽셀을 계산하고 압축하는 데에 관여하기만 한다. 모든 AA는 쉐이더 하드웨어의 성능을 좌우한다. 확실히, AMD는 그들의 쉐이더 하드웨어 도구에 대한 정돈되게 커스텀 필터 변화에 대한 설명을 해주길 원할 것이지만, 우리는 먼저 깊이 생각해서 말할 것이다.

AMD가 앞서 언급하길, 프로그램 가능한 샘플 패턴을 허용한다고 했었는데, 미래의 DX 버젼들이 이런 커스텀 필터 변화를 지원할 것이다. 이것은 왜 R600이 AA샘플 변화를 쉐이더 하드웨어에서 하는지를 이해하게 하는 것이다. AMD는 우리에게 갖고 놀 수 있는 여러개의 다른 필터 변화를 주었는데, 이것에 대해 이야기 해보자. 그러나 이 때 그래픽 제조사에서의 최초의 DX10 하드웨어를 본다면, 이 때의 경쟁사의 하드웨어의 성능은 아주 좋아서, 우리가 따로 어떤것에 손을 들어줄지에 대한 결정은 안해도 될듯 하다.

상황이 어떻든지간에, R600은 그들의 픽셀을 ROP에서 쉐이더 하드웨어로 보내 서브 픽셀 데이터를 혼합하여 최종 픽셀의 색을 결정한다. 사족을 더하면 전통적인 '박스' 필터는, - 1개의 픽셀 주변의 서브 픽셀을 사용 하는 것 - 새 드라이버에서는 이웃하고 있는 픽셀에서 텐트 필터로 - 서브 픽셀의 색상 결과는 거리에 따라 비중을 둔다 - 추출한 서브픽셀 데이터를 사용한다. AMD는 이것을 커스텀 필터 AA, 즉 CFAA라고 부른다.




AMD는 현재 2/4/8x 의 픽셀 영역에 대한 멀티샘플링 도구로 좁고 넓은 텐트 필터를 모두 제공한다. 더 많은 필터 옵션은 드라이버 업데이트를 통해 제공되며, 이 드라이버의 중요한 역할은 쉐이더 프로그램을 담당하는 것이다. 여기 아래에 필터의 종류에 따른 각각 픽셀들의 변화에 쓰이는 몇몇 샘플들이 있다.






한가지 효과적인 것은 이 텐트 필터들은 또한 AA 안쪽의 픽셀들만 수용하는 것이 아니라, 1개 이상의 삼각영역 이상을 적용한다는 것이다. 이것은 AA가 필요없는 영역에서의 AA를 하지 않을 수 있는 효과를 얻는다.

텐트 필터가 AA 향상을 위한 매우 흥미있는 생각인데, 결점도 없지 않다. 첫번째로, 텐트 필터에게는 안쪽 서브픽셀 데이터가 이웃 서브픽셀 데이터보다 중요한 경우 흐리멍덩하게 만들 수도 있는데, 예를 들면 매우 밝고 세밀한 가는 텍스트의 경우가 그렇다. 텐트 필터가 안쪽 픽셀의 AA를 할 수 있을 때, AA가 필요치 않은 장면 중의 세밀한 화면도 블러효과를 일으키듯 흐리멍덩하게 만든다.

가장자리 인식

텐트 필터가 보통의 가장자리를 AA할때는, 이미지 퀄리티적인 면에서 확실히 칭찬할만 하여, AMD는 향후 이것을 더 발전시키고 AA에 adaptive 방식을 더 많이 넣어 이것은 장점은 부각 시키고 약점은 상쇄시킬 것이다. 이것은 가장자리 인식 알고리즘을 이용해 프레임버퍼에서 가장자리에 대한 더욱 더 공격적인 AA를 적용하게 될 것이다.

가장자리 인식은 픽셀 압축을 통해 속도 향상이 된다는 것을 알아냈다. 만약 1개의 조각의 모든 서브 픽셀들이 같은 색이라면, 압축률은 최고가 될 것이며 그 픽셀에는 가장자리가 없을 것이다. 이 정보를 이용한다면, 우리가 말한 이 알고리즘은 높은 주파수의 데이터 - 높은 색대비를 가지는 가장자리 - 를 찾기 위해 직접적인 파생 계산을 이용하는 포토샵의 알고리즘과 같은 방법이라고 할 수 있다.

텐트 필터와 가장자리 인식의 조합은 2개의 추가 옵션을 준다 : 12x의 좁은 텐트필터와 가장자리 인식과 24x의 넓은 텐트 필터와 가장자리 인식이 그것이다. 이 필터들은 성능을 희생하더라도 아주 좋은 이미지 품질을 보장한다. 우리는 R600 하드웨어를 분석하며 이미지 퀄리티와 성능을 볼 것이다.

테셀레이션과 이것의 미래

R600은 AMD의 2세대 통합 쉐이더 아키텍쳐라는 것은 놀랄만한 일도 아니다. Xbox360 안에는 그들의 통합 쉐이딩의 첫 번째 시도물이 들어가있으며, R600은 그것에서 진화되었다. Xenos - Xbox 360의 GPU - 라는 전통적인 하드웨어가 아닌 것에서 R600이 나왔다는 것은 당연한 것이다.

AMD는 그들의 하드웨어에 테셀레이터를 포함하였는데, 이것은 지오메트리 데이터가 버텍스 쉐이더를 통과하기 전에 증폭시켜주는 역할을 한다. 이것은 MS가 차후 Direct X에 포함시킬 예정이지만, 지금은 개발자는 또다른 별도 과정을 거쳐야 이 하드웨어를 사용할 수 있다.




테셀레이터의 기본적인 지식은 지오메트리의 세분화에 있다. 이 연산 과정을 제어하기 위해서는 여러 알고리즘이 있어야 하는데, R600의 테셀레이터는 개발자의 특별한 요구에 부응할 수 있다. 테셀레이터는 폴리곤을 입력받아 이것을 작은 삼각형으로 나누고, 특정 오브젝트에 대해 더 많은 점을 만들어낸다. 이것만 보면 이것은 전혀 유용하지 않지만, 이 개념은 개발자가 현재 원하는 더욱 더 동적인 표면을 표현하기 위해 폴리곤을 다시 재조정해 테셀레이트시키는 디스플레이스먼트 매핑과 똑같다.

적은 폴리곤 모델과 많은 픽셀 쉐이더가 있으면, 노멀 맵과 텍스쳐는 더 복ㅈ바한 지오메트리와 비슷하게 보일 수 있다. 그러나 우리는 아주 거친 오브젝트의 실루엣 가장자리에 부딪힌다. 더 많은 지오메트리는 또한 더 많은 픽셀 쉐이더를 사용하여 지오메트리 자체의 허상을 만들려고 노력하는 것 보다 지오메트리를 더 향상 시킬 수 있다.

우리는 그래픽 카드에게 캐릭터당 몇백만개의 폴리곤을 보낼 수 없다. 이것은 카드가 연산 요구량을 제어할 수 없기 때문에 불가능한 것도 있지만, 그것보단 대역폭과 모든 데이터를 하드웨어로 보낼때의 오버헤드 레이턴시가 너무 높은것이 더 크다. 테셀레이션과 디스플레이스먼트는 통합 쉐이더에서의 폴리곤 갯수의 제한과 오버헤드 생성을 제거함으로써 진정한 버텍스 쉐이더의 능력을 사용할 수 있을 것이다.

지오메트리 쉐이더가 증폭에 쓰이고 테셀레이터가 지오메트리 쉐이더같이 쓰이면, 연산은 현재 프로그램이 가능한 하드웨어에서는 너무 느리게 된다. AMD의 테셀레이터는 15배 많은 데이터를 테셀레이팅 할 수 있는 능력이 있으며 이것은 지오메트리 쉐이더보다 같은 작업을 좀 더 효율적이고 빠르게 할 수 있다. 다음 버젼의 DX는 모든 GPU에 테셀레이터 하드웨어를 포함하게 할 것이며, 개발자들은 지오메트리 쉐이더의 사용에 좀 더 중점을 두고 흥미를 가지게 되어야 한다.

AMD 하드웨어를 목적으로 한 개발자들에겐 심지어 이 유닛으로 Xbox 360 게임을 포팅하는 것도 쉽다. 대부분의 하드웨어들은 아직도 특징이 없어서, 더욱 더 일반적인 방법이 쓰일 것이지만, 무엇이 먼저 됐든 간에 일반적인 방법을 따르지 않을 명분은 없다. 이런경우, R600은 다른 하드웨어보다 성능상의 이점을 가진다.

불리한 면은, Xbox 360을 통해 테셀레이터를 작업하지 않아 건드려보지 않은 개발자들에게 구미가 당기지 않을 것이다. 확실히 작살나는 세밀함과 높은 성능을 명확히 보여줄 것이지만, 이 특징들을 - 이 세대의 그래픽 카드로 - 이용해 게이머들에게 작은 것들을 느끼게 하는 것은 시간을 좀 써야 할 것이지만 모두에게 게임을 좀 더 재밌게 즐기게 할 것이다.

우리는 하드웨어든 소프트웨어든 미지의 공간에 첫 발을 내딛어 비상하는 것에 대해 언제나 환영하지만, R600이 테셀레이터로 인해 큰 매출을 낼 것이라 생각지는 않는다. 이 기술은 대단하고, 우리도 이것에 대해 환영하지만, 이 제품의 가치가 얼마냐에 대해 기다려야 한다.




출처: http://www.anandtech.com/video/showdoc.aspx?i=2988&p=1


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