Radeon HD 4870과 4850 : AMD는 199달러와 299달러에서 승리하다.

1페이지

...그리고 지구는 멸망했다.

아니면 최소한 이런 느낌일 것이다. 지난 몇주간 엄청나게 떠들석하였고, 잠을 못이루었으며, 흥분은 도를 넘었다. 우리가 그래픽 카드를 일정한 가격으로 자유로이 팔고 사서 시가 안정을 꾀하는 도중에 AMD와 Nvidia는 각기 하드웨어에 대한 포기를 시작하여 모든것을 날려버리는 것을 시작 한 듯 하였다. 그리고 우리는 새로운 아키텍쳐와 상상도 못한 다이 공정의 세밀화는 꿈도 꾸지 못했지만, 새로운 선도자가 좌청룡 우백호처럼 양쪽에 포진해있다.

처음에는 GT200으로써, 이것은 Geforce GTX 280과 Geforce GTX 260의 형태로 나타났다. 물론, 이 두가지 모두 (할 마음만 먹으면) SLI나 Tri-SLI로 돌릴 수 있지만, 이 SLI로 인해 최소한 1200W의 PSU를 필요로 하며 이것으로 3개 카드를 시도 한다면 약간 걱정스러운 수준이다. 이런 때에 우연히도 Radeon HD 4850의 우연한 발매가 일어났으며 몇시간 뒤에 우리는 9800GTX에서 다이 공정을 줄이고 클럭을 높인 9800GTX+가 발표되어 7월에 구입 가능할 것이라는 것을 들었다.

그리고 현재 우리는 GT200에 대한 작업을 끝낸 후로 또다른 것을 가지게 되었다. : 영광의 RV770이 그것이다. 이것은 이미 우리가 성능을 본 4850을 포함하여, Radeon HD 4870 : 테라플롭 카드를 실현하여 Nvidia의 GT200보다 이론적인 성능은 더 앞서는 것이 있다. 그러나 이론적인 성능과 실제와는 동떨어지며, 모든 명령어가 곱셈-덧셈이나 곱셈-덧셈과 곱셈의 혼합이 아니라면 이 수치는 이루어질 수 없어, 마케팅에서는 큰 숫자 놀음을 좋아하여 우리는 사람들이 실제로 이 하드웨어로 즐기는 게임으로 테스팅을 하는 것을 선호한다.

그러나 일단 우리가 성능을 측정하기에 앞서, 보통 그랬듯이, 우리는 이 아키텍쳐를 가능한한 깊게 파헤쳐보고 싶어한다. 우리는 GT200에서와 했던 것과 같이는 RV770을 그렇게 깊게 파고들 수 없는데, 그 당시에는 Nvidia와 Nvidia의 외부 두 곳에서 많은 정보를 접하여 그들의 아키텍쳐를 배우는 데에 도움이 되게 했기 때문이다. 동시에, 우리는 Nvidia나 AMD가 그들의 카드의 정보를 공개하기를 꺼리기 때문에 두곳의 실 설계 모두 수박 겉핥기 식으로만 알고 있을 뿐이다.

그러나 이것도 길게 가지는 않을 것이다. 우리가 GPU에 무거운 연산 어플리케이션을 부여하는 것은, 개발자는 원치 않을 것이라서 - 그들은 로우레벨의 설계상의 정보를 원하게 될 것이다. 당신이 타이밍, 레이턴시, 캐시 크기, 레지스터 파일들, 자원 공유, 이런 종류의 세부사항을 정확히 알지 못한다면 그 해당 아키텍쳐에 대해 정확히 코드를 최적화 시키는 것은 불가능하다. 지금, 이 세대에서, 우리는 Nvidia로부터 어떻게 해야 그들의 아키텍쳐에 적절한 프로그램을 만들 수 있는지에 대한 정보를 확실히 많이 받고 있으며, 우리는 여전히 AMD나 Nvidia 모두에게 더 많은 정보를 얻고 싶어한다.

그리고 현재, 나머지 이야기들

지난주는 사람 놀리는 것 같았다. - 뭔지도 알려주지 않고 제품을 준 것이다.

현재로써는 Radeon HD 4850이 Best Buy에서 199달러에 게시되어 있다는 것을 알지만, 오늘 우리는 더 빠르고 더 비싸게 소개된 자매품 : Radeon HD 4870에 대해 파헤쳐 볼 것이다.

ATI Radeon HD 4870 ATI Radeon HD 4850 ATI Radeon HD 3870
Stream Processors 800 800 320
Texture Units 40 40 16
ROPs 16 16 16
Core Clock 750MHz 625MHz 775MHz+
Memory Clock 900MHz (3600MHz data rate) GDDR5 993MHz (1986MHz data rate) GDDR3 1125MHz (2250MHz data rate) GDDR4
Memory Bus Width 256-bit 256-bit 256-bit
Frame Buffer 512MB 512MB 512MB
Transistor Count 956M 956M 666M
Manufacturing Process TSMC 55nm TSMC 55nm TSMC 55nm
Price Point $299 $199 $199

299달러의 Radeon HD 4870은 Radeon HD 4850에 비해 20%의 클럭이 향상되었으며 81%의 메모리 대역폭이 증가되었다. GPU 클럭 속도의 향상은 간단히 4870이 2슬롯 쿨러의 더 나은 쿨링을 달고 선적되는 현상을 초래하게 되었다. 메모리 대역폭 향상은 Radeon HD 4870이 4850과 3870에서 쓰이던 GDDR3 대신 GDDR5의 사용에 있다.; 이것으로 하여금 데이터 속도율이 메모리 클럭 속도의 4배가 되어 3.6Gbps가 되었다. Radeon HD 4870rhk 4850은 모두 이전의 3870과 같이 256비트의 메모리 버스를 사용하지만, (Nvidia에서의 경쟁자 Geforce 9800GTX 도) 4870의 전체 메모리 대역폭은 GDDR5의 사용으로 인해 115.2GB/s까지 증가하였다. 이 대역폭은 GDDR3를 사용하는 Geforce GTX 260의 더 넓은 448비트 메모리 버스폭보다 더욱 큰 대역폭이라는 것에 주목할 필요가 있다.

NVIDIA GeForce GTX 280 NVIDIA GeForce GTX 260 NVIDIA GeForce 9800 GTX ATI Radeon HD 4870 ATI Radeon HD 4850 ATI Radeon HD 3870
Memory Size 1GB 896MB 512MB 512MB 512MB 512MB
Memory Technology GDDR3 GDDR3 GDDR3 GDDR5 GDDR3 GDDR4
Memory Bus Width 512-bit 448-bit 256-bit 256-bit 256-bit 256-bit
Memory Clock 1107MHz 999MHz 1100MHz 900MHz 993MHz 1125MHz
Memory Data Rate 2.2Gbps 2.0Gbps 2.22Gbps 3.6Gbps 1.99Gbps 2.25Gbps
Memory Bandwidth 141.7GB/s 111.9GB/s 70.4GB/s 115.2GB/s 63.6GB/s 72.0GB/s

GDDR5의 사용은 AMD로 하여금 Geforce GTX 260 급의 메모리 대역폭을 핀 숫자를 늘리지 않고 448 비트 메모리 인터페이스의 사치를 부리지 않으면서 제공하도록 하였다. GDDR5는 실제적으로 병렬 기반 메모리 기술을 여전히 남기면서 Rambus 같은 경로 지정과 신호 기술을 도입하였는데, 이 결과 신뢰성을 유지하면서 고용량 솔류션에서 핀당 엄청난 대역폭을 전달할 수 있음을 보여주었다.

AMD는 GDDR5를 시장에 이르게 도입하는 위험을 감수하였으며, 우리는 Nvidia 또한 이 대세를 따라갈 것이라 예상하였는데, 최소한 AMD는 빠르고 적절하게 획득한 GDDR5의 풍부한 대역폭으로 올라가면서 나오는 이득을 간단하게 즐기는 듯 하다. 55nm로 공정을 미세화한 GT200이 256비트의 GDDR5 메모리 인터페이스를 적용할 날도 그리 멀지 않을 듯 한데, 이것은 Nvidia로 하여금 가격대를 300달러 레벨까지 떨어트리게 할 수도 있을 것이다. (최소한 GTX 260 이라도.)

우리의 Radeon HD 4850 프리뷰에서도 언급하였듯이, Radeon HD 4870이나 4850 모두 8채널 LPCM 오디오 출력을 HDMI를 통해 출력하는 것을 지원한다. AMD는 지금 막 Radeon HD 4870을 통해 8채널 LPCM 드라이버를 보내어 우리는 이 기능을 짧게나마 테스트할 것이다. 우리가 4850 프리뷰에서도 언급 하였듯이 :

"모든 AMD의 Radeon HD 그래픽 카드들은 그들 고유의 오디오 코덱을 보유하였지만, Radeon HD 4800 시리즈 군의 카드들이 마침내 8채널 LPCM 출력을 HDMI로 출력하는 기능을 추가하게 되었다. 이것은 HTPC 매니악들에게는 아주 매력적인 것인데 왜냐면 이제 메인보드에서 불가능했던 HDMI를 통한 8채널 출력을 할 수 있게 되었기 때문이다. 우리는 여전히 비트 스트리밍 TrueHD/DTS-HD MA 지원책을 갖고 있지 않으며 GPU 계 에서 이것이 올해 안에는 나올 것 같지 않지만, 2008년에는 몇몇 다른 솔류션이 나올 것이다."

이 Radeon HD 4870은 비록 AMD가 우리에게 이미 약간의 카드들이 채널을 통해 존재하고 있다는 것을 말해 주었음에도 불구하고 이른 7월 즈음이라는 애매모호한 기간으로 구매가능 시기가 계획되어 있다. 4870이 새로운 메모리 기술에 의존하기에, 우리는 Radeon HD 4850같이 급속도로 제품이 퍼져나가는 시기가 언제인지는 자신있게 말하지는 못한다. 시시때때로 지켜보되 4850이 큰 문제 없이 199달러 이하인 것에 대해 큰 문제가 없었듯이, AMD는 소매상들의 손에서도 4870 카드가 299달러 선에서 팔리게 할 것으로 보고 있다.

2페이지

AMD의 "작은 다이" 전략

우리는 AMD의 새로운 GPU 전략을 우리의 Radeon HD 4850 프리뷰 기사에서 윤곽을 만들었지만, 요약하자면 AMD는 GPU 설계를 메인스트림 199달러-299달러 부문에서 하기로 태도를 굳혔으며 간단히 (멀티 GPU) CrossFire를 통하여 높은 수준의 시장을 점유할 것이다. 한편 Nvidia는 업계에서 선구자 적인 위치를 고수하기 위해 계속적으로 아주 큰 단일 GPU를 만드는 것을 계속할 것이다. 두 종류의 접근 모두 다 치하할 만 하며 필요한 것인데, 그들은 단순히 각기 다른 시장을 목표로 할 뿐이다.

우리의 GT200 리뷰에서 Nvidia는 극도로 크고, 높은 병렬성의 마이크로 프로세서를 설계 했다는 것에 주안점을 맞추었다. 14억개의 트랜지스터와 576 제곱밀리미터의 다이 크기로, Nvidia의 GT200은 엄청나다는 말 외에는 달리 할 말이 없다.

이전 페이지의 표는 AMD의 RV770을 보여주고 있는데, 비록 메인스트림 게이머 가격대 (199달러 ~ 299달러) 를 겨냥하고 있으면서도, 또한 아주 크다. 9억 5천 6백만개의 트랜지스터로, RV770은 RV670보다 44%의 트랜지스터를 가지게 되었으며 Nvidia의 GT200의 68% 수준이다. 우리는 Nvidia의 다이사이즈와 RV770의 비교를 위해 단순히 그 위에 그려 놓아보았다.

1.JPG
우리가 알고 있는 Nvidia의 다이 크기에 기반을 두어, 실제크기 비교가 가능하다.

심지어 AMD의 다이가, 날씬하고 알맞은 크기로 설계되었다 하더라도, 이것은 크다. - 특히 TSMC에서 생산된 것 치고는. Nvidia는 TSMC에서 생산된 것 중 가장 큰 다이라는 왕관을 유지하고 있지만, AMD는 우리에게 더욱 메인스트림에의 접근에는 많은 트랜지스터가 여전히 필요하다고 보여주고 있다. 우리가 우리의 4850 프리뷰에서도 언급 하였듯이 :

"AMD의 새로운 GPU인 RV770들 쌍으로, 1개의 GT200보다 더 많은 전력을 소모한다. - 더 작은 55nm 공정으로 제조 하였음에도.

이들 RV770들의 쌍은 GT200 1개 가격 650 달러보다 적은 400달러만의 가격이지만, 이 부분에서는 제조 공정상의 차이로 추측된다. Nvidia가 만약 GT200에 대한 위험 부담을 가지지 않고 55nm로 제조하였다면, (변호하는 것이 아니라, 단순히 가정하는 것이다.) 가격차는 더 작아졌을 것이다. - GT200이 싱글 카드로 제조되었기 때문에 Nvidia의 편을 들어주는 것이 아니라면.

명확히 한다면, AMD의 전략은 단순히 GPU를 대량생산하여 이것으로 성능을 올리거나 내린다는 것이다. Nvidia는 그들의 GPU를 몇세대동안 같은 방법으로 제조한다면, 처음엔 컸다가 나중에 작아질 것이다.

AMD는 Nvidia보다 GPU 제조 설계에 대해 급진적인 다른 관점을 취하고 있지 않은데, 그들은 단순히 시장을 한단계 낮추어 제조할 뿐이다."

우리는 이 기사에서, AMD의 다이가 눈에 띌 정도로 Nvidia의 그것보다 작더라도 AMD와 Nvidia간의 효율에 대해 많은 논의를 할 것이다. - 당신이 Radeon HD 4850을 이전에 보았을 때 - 여기에는 RV770이 Nvidia의 맘모스 GT200과 급을 같이 할 많은 기회가 있다는 것을 알 수 있을 것이다.

3페이지

RV770의 제조

우리는 이것을 Nvidia의 GT200에서 한 적이 있으며 아주 반응이 좋았기 때문에, 이제 AMD의 RV770에 대해 거의 기본 레벨부터 시작하도록 하자. Stream Processing Unit을 만나보자.:

2.JPG

AMD의 Stream Processing Unit 은 G80/G92/GT200 에서의 Nvidia의 SP와 아주 유사하므로, 이런 사실로 인해 같은 방법으로 그들을 그렸다. 명심해야 할 것은 이들 유닛의 실제적인 내부 작업은 이런 3개 ALU로 그려넣은 것보다 훨씬 복잡하지만 간단하고 일관성있게 이렇게 그린 것을 알아야 한다. (실제 하드웨어는 FP MUL + ADD유닛이지만, 누가 신경 쓰겠는가.) AMD는 연산자 블럭 안에 이들 Stream Processing Unit 을 4개 갖고 있으며 그들을 x, y, z와 w 유닛으로 부르고 있다.

5번째 유닛은 t 유닛(t는 초월수를 뜻하는데, 가능한 연산 수행의 종류를 의미한다.)

3.JPG

이 t 유닛은 x,y,z나 w 유닛이 할 수 있는 일 모두 뿐만이 아니라, 초월수 연산도 가능하다. (위의 다이어그램 중 SFU 블럭으로 표현되었다.) Nvidia는 같은 기능을 하는 것을 갖고 있으며, 이것은 단순히 다른 방법으로 표출되는 것을 선택했을 뿐이다. (나중에 잠시 다룰 것이다.) AMD는 이들 (x,y,z,w와 t) 유닛의 각개를 프로세싱 유닛으로 고려하여, RV770은 이들을 800개를 보유하고 있다. (RV670은 320개)

AMD는 이들 스트림 프로세서 4개와 (x,y,z와 w) t 유닛을 묶으며 이것을 한개 블럭에 놓았는데, 이것이 우리가 Streaming Processor (SP)라고 부르는 것이다. :

4.JPG

빨강 영역 이 실제적인 SP이지만, Nvidia의 SP 1개와는 다르게, AMD의 1개는 동시에 5개의 명령어까지를 조종할 수 있다. 여기에 제약사항이라곤 모든 5개 유닛이 같은 스레드에서 작업해야 한다는 것이다.

AMD는 이들 SP 16개를 SIMD 코어라고 부르는 것 같은 것에 집어 넣었다. (AMD는 좀 덜 혼란스럽겠지만, Nvidia가 그들의 설계 요소에 짓는 이름보다는 좋지 않다.)

5.JPG

SIMD 코어는 몇몇 예외사항을 제외하고는 Nvidia의 SM과 아주 비슷하다.

1) AMD의 SIMD 코어에는 더 많은 SP들이 있다. (16 대 8)
2) 이 SP들은 더 넓으며 연산 가능한 폭은, 최대 Nvidia의 SP에 비해 5배의 명령어 갯수이다.
3) 명령어와 불변 캐시들은 SIMD 코어에 포함되어 있지 않으며, AMD는 이것들을 더 앞쪽에 배치시켰다.
4) AMD는 SIMD 코어 레벨에서 그들의 SP의 텍스쳐 유닛과 텍스쳐 캐시를 묶었는데, Nvidia는 이것들을 앞쪽에 배치시켰다.
5) Nvidia의 SM에서 2개의 SFU가 보이는가? Nvidia가 2개의 아주 빠른 특수 함수 유닛을 그들의 SM에 넣었는데, AMD는 각개 SP에 그들 고유의 SFU를 장착시켰다. 명령어 지연시간이나 각기 SFU의 처리량이 주어지지 않아 이들 중 어떤 접근 방식이 실제적으로 빠른지는 명확하지 않다.

여기서 주목할 점은, RV770은 (Radeon HD 3870에 쓰이는) RV670과 하등 다른점이 없다는 것이다. AMD와 Nvidia의 차후 계획은 확실히 갈라진다. ; Nvidia의 GT200이 3개의 SM을 취하여 1개의 그룹으로 하여 Texture/Processing Cluster (TPC)로 넣어 10개의 TPC를 그들의 칩 상에 배열시킨 데 반해, AMD는 단순히 10개의 SIMD 코어를 혼합하였다.

6.JPG
AMD의 RV670

7.JPG
AMD의 RV770에는 10개의 SIMD 코어가 분포되어 있는데, 이것이 경쟁자에게서 멀어지며, 위협을 최소화 하는 방법이다.

8.JPG
Nvidia의 GT200 Streaming Processor Array (SPA)는, 극소수의 실행 자원을 가지고 있지만, 훨씬 캡슐화가 되어 있어, 여기에서의 중점은 스레드 유지관리이다.

RV770의 10개의 SIMD 코어들은, RV670보다 2.5배수의 실행 유닛을 갖고 있다. 이것은 심지어 이론적으로는 Nvidia의 GT200보다 훨씬 더 높은 연산력을 지니고 있다. 단지 RV770 대 GT200에서 동시에 실행되는 명령어의 갯수만을 본다면, RV770의 800 개 프로세서는 GT200의 240개 프로세서와 (+60 SFU들) 전혀 게임이 되지 않는다.

NVIDIA GT200 AMD RV770 AMD RV670
SP 발행 폭 1-way 5-way 5-way
SP 수 240 160 64
최저 경우 의존 명령어 처리량 240 160 64
최대 스칼라 명령어 처리량 480* 800 320

Nvidia의 60개의 SFU는 몇몇 스칼라 명령어 처리량에서나, 물론 특정 상황에서는 "도움"이 될 수 있다.

다음 페이지에서는 효율과 자원 사용률에 관하여 말을 나눌 것이지만, 바로 당신은 (이전에 나왔던 R600과 RV670같이) RV770의 위력은 Nvidia의 아키텍쳐보다 느리거나, 부하량을 가중시키는 명령어나 스레드량에 의존하여서 확실히 빠를수도 있다. Nvidia의 아키텍쳐는 (SP당 1개의 스레드) 대량의 단순 스레드를 선호하는 반면, AMD의 아키텍쳐는 고부하의 스레드를 갖는 명령어를 원한다. (이것은 한 번에 한 개의 스레드에서 5개의 명령에 대해 작업할 수 있기 때문이다.)

9.JPG
NVIDIA의 GeForce GTX 280

10.JPG
AMD의 Radeon HD 4870

완전한 GPU는 아주 인상적이다. :

1) 명령과 불변 캐시가 위로 간 것이 보이는가? Nvidia는 각기 SM에 포함한데 반해 AMD는 SIMD 코어 클러스터의 바깥으로 이들을 내장한 듯 보인다.
2) RV770은 오직 4개의 64비트 메모리 컨트롤러를 갖고 있어 8개를 가진 GT200과 비교된다.
3) 프로그램 가능한 테셀레이터는 Xbox 360의 GPU (그리고 R600/RV670) 에서의 것을 따왔는데, 불행하게도 이것은 어떠한 DirectX도 아직 지원하는 것이 없기 때문에 대부분의 개발자들에게서 쓰이지 않는다.
4) AMD는 속성 보간자 하드웨어를 분리하였는데, 이것은 Nvidia의 하드웨어에서는 그들의 특수 함수 유닛(SFU)에서 공유하는 것이다.

우리가 위에서 언급한 것보다 다른 차이는, AMD의 아키텍쳐는 Nvidia와 비슷하게 보이는 듯 하지만, 두개의 동떨어진 설정에서 단지 유용할만한 선택을 했을 뿐이다. Nvidia는 G80/G92 아키텍쳐를 취하여 이것을 크게 만들었고, AMD도 RV770으로 같은 짓을 하였다. - RV670을 취하였으며 이것의 실행 자원을 2배 이상으로 늘렸다.

AMD는 RV670에서 RV770으로 Nvidia가 G08/G92에서 GT200으로 한 것보다 아주 큰 도약을 하였으나, 현재로써 AMD는 최근 세대에서보다 훨씬 더 경쟁적이 되었다는 것이 합당하다.

4페이지

말도 안되는 연산 : 텍스쳐 비율

GT200 GPU에서, Nvidia는 연산 자우너을 거의 90% 가까이 증가 시켰으나 텍스쳐 연산은 25% 정도밖에 증가시키지 않았는데, GPU 제조에 있어 계속되는 추세에서 조명받는 것은 더욱 강력한 연산력이다. 여기에 GT200의 텍스쳐 주소와 필터 유닛을 보는 다른 시각이다. :

11.JPG

10개로 이루어져 있는 각개 TPC는, 8개의 주소와 8개의 필터 유닛을 갖고 있다. 이제 RV770을 보자.:

12.JPG

4개 주소와 4개 필터 유닛인데, AMD는 Nvidia가 하듯 주소 대 필터 비율을 같은 1:1로 관리하여 , RV770에서의 연산대 텍스쳐 비율은 확실히 높아졌다.

AMD RV770 AMD RV670 NVIDIA GT200 NVIDIA G92
SP 갯수 160 64 240 128
Texture Address/Filter Units 40 / 40 16 / 16 80 / 80 64 / 64
텍스쳐 비율 계산 4:1 4:1 3:1 2:1

위의 표는 Nvidia의 연산 대 텍스쳐 비율이 늘어나는 추세를 그리고 있는데, G92에서 2:1 이었던 것이 GT200에서는 3:1로 늘어나고 있는 것을 볼 수 있다. AMD는 확실히 RV670에서 4:1의 비율로 정한 것은 너무 과한 것이어서 RV770에서 이것을 바꿀 필요가 없었다. RV770이 4:1로 여전히 남아 있어도, AMD의 비율은 여전히 Nvidia보다 연산 능력에 대해서는 더욱 공격적인 태세이다. 이것은 텍스쳐가 과도한 게임에서는 Nvidia의 하드웨어가 우월할 것인 반면, (최소한 비례하다.) 더욱 연산에 치중하는 겡미은 RV770이 더 나을 것이다.

AMD는 또한 그들의 텍스쳐 유닛 또한 몇몇 개량을 하였다. 그들이 우리에게 말하지 않는 어떠한 "물건"으로, 그들은 제곱밀리미터 당 성능을 70%까지 향상시켰다. 텍스쳐 캐시 대역폭 또한 두배 증가하여 480GB/s가 되었는데 L1캐시와 l2 메모리 간의 대역폭은 384GB/s이다. L2 캐시는 4개의 인터리브된 채널의 메모리 채널에 정렬되어 있다. (그리하여 8개의 L2 캐시가 나오게 된다.)

현재 텍스쳐 유닛은 특정 SIMD코어와 각개 L1 텍스쳐 캐시에 연계되어 있는데, RV770에서는 늘어난 SIMD 코어로 인하여 전체 텍스쳐링 능력이 향상되게 된다. 이것은 클럭당 우리가 8비트의 텍스쳐 요소를 불러와서 이등방성 필터를 할 수 있는 횟수를 2.5배 늘려주지만, FP16 텍스쳐에는 1.25배 증가만 한다. (FP16은 1/2 속도로 동작하며 FP32는 1/4 속도로 동작하기 때문에) 우리가 이해하고 있는 바로는 R600에서 FP16 텍스쳐를 전속도로 동작 시킬 수 있으므로, FP16 데이터의 텍스쳐 비율이 성능 상 1.25배 늘어난다는 것은 합당한 말이 된다.

심지어 FP32 가 1/4 속도로 동작한다 하더라도, 필요로 할 때 이런 종류의 텍스쳐를 불러오는 것은, AMD가 말하기를 텍스쳐 필터링 하드웨어의 제한에 걸리기 전에 외장 메모리 대역폭 제한에 먼저 걸릴 것이라 말한다. 만약 이런 경우, 설계 상 높은 비트 깊이의 텍스쳐에 대한 비율 감소의 결정도 합당하다.

  AMD RV770 AMD RV670
L1 Texture Cache 10 x 16KB (160KB total) 32KB
L2 Texture Cache I can has cache size? 256KB
Vertex Cache ? 32KB
Local Data Share 16KB None
Global Data Share 16KB ?

비록 AMD가 우리에게 L1 캐시 크기를 말해주지 않더라도, 우리는 몇몇 힌트와 데이터 추출을 비교분석하여 R600에서부터의 정보로 인해 충분한 정보를 가질 수 있다. 우리는 RV770이 10개로 분리된 16k 캐시를 갖고 있다고 결정하였다. 이것은 R600 상에서 1개의 공유 32k L1 캐시를 가진것과 상반되며 총 160k의 L1 캐시를 부여하게 된다. 우리는 R600의 L2 캐시가 256k라고 알고 있으며, AMD는 우리에게 RV770은 더 큰 L2 캐시를 갖고 있다고 귀띔해주었지만, 우리에게 더이상의 힌트는 주지 않았다.

5페이지

Derek이 다시 기술적인 설명으로 : Warps, Wavefronts 와 SPMD

우리의 GT200 리뷰에서, 우리는 Nvidia 하드웨어의 스레드 조직과 스케쥴링에 대해 약간의 지식을 얻었다. AMD에서 우리는 비슷한 방법으로 문제를 푸는 접근 방식을 취하는 것이 가끔씩 도움이 된다는 것을 밝혀냈다. Nvidia같이, AMD는 4사이클동안 실행 할 스레드를 (AMD는 wavefronts라고 부르는) 그룹단위로 스케쥴링 하게 된다. (AMD가 말하기로는) 동시에 RV770이 16개의 5개 폭의 (당신이 무엇이라 부르든 각각의 연산과정은 한개의 "stream"이나 스레드로 불리워지는) SP들을 가지며, 우리는 AMD는 1개 wavefront 안에 꼭 병렬로 실행 해야 할 64개의 스레드를 구성한다는 결론을 얻을 수 있게 되었다. GT200 이후, 우리는 Nvidia의 그룹 워프들이 스레드 블럭으로 진행한다는 것을 알았으며, 우리는 AMD 하드웨어 내에서는 2개 레벨의 조직이 더 존재한다는 것도 배웠다.

Nvidia같이, AMD는 wavefront 당 상황을 관리한다. : 레지스터 공간, 명령어 흐름, 전역 상수, 그리고 로컬 저장공간들이 모든 스레드 내의 동작중인 wavefront와 데이터 공유 간 공유되며 동기화는 스레드 블럭 내에서 완료된다. 스레드 블럭의 증대그룹화는 전역 데이터 저장을 이용한 전역 데이터 공유로 가능하지만, 우리는 이것에 대한 정확한 명칭이나 사양을 알지 못한다. RV770에서 (최대 5개 연산자를 가진) 1개의 VLIW 명령어는 고유한 특정 데이터 셋과 레지스터 파일의 부분 상에서 동작하는 각개 SP들에 전파된다.

Nvidia의 아키텍쳐와 옆에 놓고 본다면, 우리는 표에 같이 정렬하여 SM/SIMD 배열 당 자원에 대하여 알 수 있다.

NVIDIA/AMD 특징 NVIDIA GT200 AMD RV770
SM/SIMD 코어 당 레지스터 16K x 32-bit 16K x 128-bit
칩 상 레지스터들 491,520 (1.875MB) 163,840 (2.5MB)
로컬 저장장치 16KB 16KB
전역 저장장치 None 16KB
칩 상 최고 스레드 30,720 16,384
코어에서의 최대 스레드 1,024 > 1,000
Warp/Wavefront당 최대 스레드 960 256 (with 64 reserved)
칩 상 최대 Warps/Wavefronts 512 모르겠다.
SM/SIMD 코어 당 최대 스레드 블럭 8 AMD가 말을 안해줘

그래 맞다, AMD는 2.5MB의 레지스터 공간을 가지고 있다.

우리는 이 모든 데이터를 가지게 된 데에 감사하며, Nvidia의 CUDA 프로그래밍 가이드와 AMD의 CAL SDK에서의 문서로 인해 엄청난 저레벨 정보를 제공받았다. 그러나 문제는 코드를 정밀하게 조작하는 사람들에게는 그들의 어플리케이션을정확히 조정하기 위해 더 많은 정보를 필요로 한다는 것이다. 더 나아가자면, 그래픽에서는 스스로가 처리를 하므로, 다른 방법으로 일어나게 하는 각기 다른 방법이 아주 많이 존재한다. GPU 컴퓨팅에서의 선구자인 GPGPU에서는, 얼마나 자원 할당이 스레드 발행 속도에 영향을 끼치느냐와 외장/내장 메모리 대역폭에 대한 최상의 사용법을 만들기 위해 얼마나 정확한 페치와 데이터 프리페치를 하는가에 따라 아주 많은 저레벨 데이터가 필요하게 된다.

그러나 현재로써, 이들 세부사항은 몇몇은 우리가 가지고 있으며, 우리는 엄청난 데이터 병렬 코드로 프로그래밍을 하는 프로그래머들이 아키텍쳐를 볼 수 있는 능력을 갖추어 전에는 데스크탑 상에서 불균일 컴퓨팅의 장점을 취하기 위해 업계 표준의 방법을 따랐어도 그들의 아키텍쳐로 무엇인가를 하기를 바란다.

이것이 우리에게 재밌는 점을 제공하는 것이다.

Nvidia는 우리에게 그들 SM의 설계를 위해 좀 웃긴 약자를 강요하기를 원하였다. : SIMT(single instruction multiple thread)가 그것이다. 첫번째로, 이것은 일반적인 명령어와 스레드를 이해하는 데에 기반하여서 혼란스러운 약자이다. 게다가, Nvidia와 AMD 모두 SPMD, 또는 single program multiple data라는 실제적으로 하드웨어 내에서 멋지게 맞아떨어져 동작하는 프로그래밍 모델이 이미 존재한다. 이 설명은 분산 메모리 시스템과 대량의 클러스터들에 첨가되는 경우가 대부분이지만, 현재로써는 여기에서 사용되고 있다.

현대의 그래픽 아키텍쳐는 (그래픽 내의 쉐이더 프로그램이나, GPU 컴퓨팅을 말할 때에는 커널 같은) 1개 프로그램에서 (버텍스나 픽셀과 이것의 속성같은) 다수의 데이터 셋을 연산하는데 이것은 다수의 "코어들"과 "코어"의 그룹 모두에서 독립적으로 동작한다. 기능적으로 판단 당 1개의 명령어 흐름(프로그램)이 관리되며 복수개의 판단은 독립적으로 같은 프로그램에서 돌아갈 수 있다는 사실이 전제되며 이것이 다수의 데이터 셋에 적용된다. 분산 SPMD 시스템에서는, 프로그램의 모든 사본이 동시에 동작하지 않는다 : 다수의 워프나 wavefront들은 같은 프로그램은 지원 장벽 동기화에서는 각기 다른 스테이지에서 실행될 수 있다.

SPMD 프로그래밍 모델에 대한 더 자세한 설명을 알고 싶다면, 어떻게 GPU가 SPMD에 알맞는지는 아직 기재되지 않았어도 위키피디아가 이것에 대해 양질의 정보를 가지고 있다.

http://en.wikipedia.org/wiki/SPMD

(솔직히) GPU는 분산 시스템에서는 취하지 못하는 SPMD의 속성의 장점을 취한다. : 데이터가 다수의 스레드에서 나오는 정교하게 조정된 자원을 SIMD 프로세싱과 공유하는 것이 그것이다. 같은 코드에서 동작하는 스레드는 실제적으로 같은 명령어와 데이터 캐시를 물리적으로 공유하며 그들 각자는 로컬 저장장치를 통해 데이터에 빠르게 접근할 수 있다. 커지는 시스템에서 각기 시스템이 고유한 방법으로 그들의 고유한 데이터를 고유한 페이스로 조종하기 위해 모든 것의 사본을 얻는것과는 상반된다. (그리고 이것의 메시징과 통신은 더욱 비동기되고, 아슬아슬 해지며 복잡해진다.)

AMD는 SPMD 패러다임을 (RV670에서는 없던) 전역 저장 장치를 관리함으로써 모든 스레드가 그들이 필요하다면 결과 데이터를 전역적으로 공유하는 장점을 제공하게 된다. (이것은 Nvidia가 지원하지 않는 것이다.) 이 기능은 알고리즘 도입에 훨씬 유연성을 유도하며 몇몇 어플리케이션에는 성능상의 이점을 제공한다.

요약하면, 실제로 GPGPU 컴퓨팅은 SPMD 프로그래밍 모델을 조종하기 위한 이상적인 기계의 하드웨어 내의 도입이 되어 왔다. 비트와 조각들은 SIMD, SMT, TMT, 그리고 우리가 그들이 원래 지원하는 프로그래밍 모델을 기념하여 SPMD 하드웨어로 분류되어야 한다고 생각하는 아키텍쳐를 만들기 위한 다른 마이크로 아키텍쳐 적 특징에서 가져왔다. 우리는 이미 충분한 약자를 컴퓨터 세상에서 쓰고 있으며, 같은 것을 위해 또다시 새로운 단어를 만드는 것을 멈추어야 한다고 생각한다.

6페이지

ILP상에서의 Quick Primer

Nvidia는 명령어 레벨 병렬화(ILP, Instruction Level Parallelism)을 폐기해버린데 반해 AMD는 이것에 관심을 보였다.
http://en.wikipedia.org/wiki/Instruction_level_parallelism

ILP는 병렬화로써 1개의 명령어 스트림에서 추출해낼 수 있다. 예를들어, 만약 이전 명령어와 의존적이지 않은 많은 수학 문제를 가지고 있다면, 모든 수학 문제를 병렬적으로 실행시키는 데에 알맞다는 말이다.

내 상상의 아키텍쳐 상의 예제로, 명령어 포맷은 :

LineNumber INSTRUCTION dest-reg, source-reg-1, source-reg-2

This is compiled code for adding 8 numbers together. (i.e. A = B + C + D + E + F + G + H + I;)

1 ADD r2,r0,r1
2 ADD r5,r3,r4
3 ADD r8,r6,r7
4 ADD r11,r9,r10
5 ADD r12,r2,r5
6 ADD r13,r8,r11
7 ADD r14,r12,r13
8 [몇몇 완전한 독립적 프로그램]
...

(※ 여기에서 add x, y, z 라면 x에 y와 z를 더하는 것이라 보시면 될 듯.)

1,2,3,4번째 줄은 하드웨어가 가능하다면 병렬 처리가 가능하다. 5번째 줄은 1,2번째 줄을 기다려야 하며, 6번째 줄은 3,4번째 줄을 꼭 기다려야 하며, 7번째 줄은 모든 연산이 끝나기 전까지 실행되지 못한다. 8번째 줄은 언제나 하드웨어상에서 사용 가능한 줄로 한다.

이 위의 예제로, 2개 폭의 하드웨어가 우리가 얻을 수 있는 최적의 처리량을 나타낸다. (읽은 후의 쓰기 위험의 전 속도 조종을 무시하기로 한다.) 우리가 AMD의 5개 폭 의 하드웨어를 본다면, 따라 나오는 코드가 훨씬 더 ILP에서 추출할 기회를 부여하지 않는다면 최적의 처리량을 달성하지 못할 것이다. 왜냐면 :

위의 블럭에서, 우리는 한번에 5개의 연산을 즉시 실행할 수 있다고 하였다. : 1, 2, 3, 4번째와 8번째 줄을. 다음, 우리는 2개의 연산을 함께 실행할 수밖에 없다. : 5, 6 번째 줄. (3개의 실행 유닛은 비사용된다.) 마지막으로, 우리는 7개의 명령어를 실행시켜야 하는데 4개의 실행 유닛은 비사용 상태로 두게 된다.

이 ILP 추출의 제약은 자체는 프로그램 자체 (독립적인 것과 의존적인 명령어의 혼합) 에서, 하드웨어 자원 (같은 명령어 스트림에서 얼마 만큼을 한번에 처리할 수 있는가) 에서, 컴파일러 (얼마나 컴파일러가 기본 블럭을 하드웨어가 ILP에서 최적으로 추출할 수 있는 무언가로 잘 구성 시키는지) 에서 그리고 스케쥴러 (독립적인 명령어를 취하는 하드웨어와 명령어들을 동시에 실행할 수 있게 스케쥴한다)에서 존재한다.

ILP 추출은 컴퓨팅 영역에서 가장 중요하게 연구 되어왔던 것 중 하나이며 멀티코어 하드웨어의 도래 전까지 CPU 설계에서 주된 초점이었다. 그러나 이것은 여전히 엄청나게 풀기가 어려운 문제이며 실행되는 프로그램에 기반하여 이득이 아주 다양하다.

13.JPG

윗 그림은 명령어 스트림이 AMD와 Nvidia SP로 보내졌을 때를 그린 것이다. 가장 최상의 경우 시나리오에서, 명령어 스트림은 AMD의 SP로 들어 갔을 때 Nvidia의 SP의 경우보다 1/5 길이로 줄어들지만 (여기서, AMD는 SP마다 5개 연산을 실행 하는데 반해 Nvidia는 SP당 1개 연산) 여기 예제에서 볼 수 있듯이, 명령어 스트림은 Nvidia의 행에 비해 대충 1/2 정도의 길이에 머물고 있다. ILP AMD가 명령어 스트림에서 추출을 많이 할수록, 그들의 하드웨어가 수행할 수 있는 작업률은 향상된다.

AMD의 RV770 (그리고 R6xx 기반 하드웨어) 는 그들의 하드웨어에서 최대한의 성과를 뽑아 내려면 모든 클럭에서 스레드당 5 개의 연산이 스케쥴 되어야 한다. 이것은 확실히 아주 멋진 컴파일러 작업과 내부 하드웨어 스케쥴링을 요구하는데, Nvidia는 두가지 다 필요하지 않다. 왜그런지 약간 시간을 들여 설명 하겠다.

Instruction Issue Limitations 과 ILP vs. TLP Extraction

그래픽 코드에서 상당량을 차지하는 것은 병렬적인 방법으로 무수히 일어나는 벡터 같은 벡터 위치(x,y,c,w)나 색(r,g,b,a)을 다루는 것이다. 이것은 그래픽쪽에서 개발하기에는 아주 정교하고 논리적인 양상을 띄지만, 병렬화 추출이라는 관점으로 온다면 이것은 하드웨어의 사용률 최대화를 (역시, 모든 신은 그려지기 전에 렌더되어야 한다.) 이루면서 지연시간을 숨기는 것으로 간단히 해석된다. 물론, GPU 제조는 병렬화 추출에 있어 모든것이 아닌데, AMD나 Nvidia 둘 모두 제곱 밀리미터 당 성능, 와트당 성능, 그리고 여기에서 작동 시킬 코드에 대한 적합성 같은 것에 대해 고려하고 있다.

Nvidia는 전적으로 TLP (thread level parallelism)에 의존하고 있으며 AMD는 TLP와 ILP 모두를 이용하고 있다. TLP 추출은 ILP 보다 훨씬 훨씬 쉬운데, 내부 스레드 충돌에 대해 우려할 시기는 오직 데이터를 공유할 때 뿐이기 때문이다. (이것은 한개 스레드에서 의존적인 코드를 처리하는 것보다 훨씬 적은 빈도로 일어난다.) 그래픽 아키텍쳐에서, 프레임당 몇백만 스레드를 작동시킬 필요가 있을 때에, 하드웨어의 실행 유닛에 채워 넣어야 할 풍부한 양의 스레드가 있으므로, 하드웨어의 처리 폭에 TLP를 사용하는 것은 괜찮은 사용률을 위해 모든 Nvidia 하드웨어가 필요로 하는 것이다.

AMD 아키텍쳐의 경우라 하더라도 이득을 제공한다. 왜냐면 AMD는 가능한 경우마다 wavefronts에서 판단 전환을 하지 않으며 ILP를 추출할 수 있기 때문에, Nvidia 하드웨어보다 동작중인 활성 스레드의 수에 약간 둔감할 수 있다. (그러나 두 회사 하드웨어 모두 다 지연시간을 숨기려면 많은 수의 스레드가 활성화 되어야 하기는 하다.) Nvidia에서 우리가 아는 한 정확히 지연시간을 숨기기 위해, 우리는 G80 상에서 SM당 6개의 워프를 발행해야 하는데, (GT200에서는 현재로썬 정확한 숫자를 모른다.) 이것은 G80을 계속적으로 부하를 주기 위해 이 때 3천개가 넘는 스레드를 요구해야 하는 결과를 초래하게 된다. 우리는 AMD에서는 비슷한 세부사항을 갖지 못했지만, 만약 쉐이더 프로그램이 충분히 길고 성능 저하를 야기시키지 않는다면, AMD는 1개 프로그램에서 직렬적으로 코드를 실행 시킬 수 있다. (Nvidia는 그들의 명령어 지연시간을 줄이는 것으로 인해 처리량을 줄이지 않는 한 불가능 한 것이다.) AMD의 하드웨어가 확실히 엄청난 수의 동작 중인 스레드를 한번에 조종할 수 있으며 다수의 스레드 동작으로 인해 지연시간을 줄이는 데에 도움을 줄 때, 이 유연성은 직렬성 코드에서 작업할 때 더욱 효율적이 되어 몇몇 상황에서 장점으로 작용할 수 있다.

ILP는 Nvidia의 아키텍쳐에서는 완전히 무시되는데, 한번에 스레드당 1개의 연산만이 수행되기 때문이다. : (정황 당) 스칼라 싱글 이슈 아키텍쳐 상에서 ILP를 사용할 수 있는 방법이 없다. 모든 명령들이 어떻게든 처리되어야 하기 때문에, TLP를 사용함으로써 명령어와 메모리 지연시간을 숨기게 되며 가능한 실행 유닛에 연산을 채우게 되어 훨씬 덜 복잡한 방법으로 실행되게 한다. 우리는 그래픽 코드를 실행할 때 엄청난 양의 TLP로 처리하게 된다. 프레임 당 연산할 수천개의 점과 수백만 개의 픽셀이 있겠으며, 초당 많은 프레임이 존재 하는데, 이것은 실행 해야 할 엄청난 양의 스레드를 말하는 것이다.) 이것은 직렬 실행에 대한 관심을 약화시키며 TLP로 굳어버린 상황에서 ILP로는 정신나간 생각이 아니라, 확실히 나올 수 있는 생각이다.

병렬화 추출에 대한 시각에서는, 우리는 Nvidia의 아키텍쳐가 좀 더 알맞은 솔류션이라고 볼 수 있다. 우리가 왜 이렇게 말할 수 있는가? 이론적인 최대 성능에 대해 근접한 비율을 얻을 수 있기 때문이다. 물론, Radeon HD 4870은 1.2 테라 플롭스의 연산력이 있으나, (800 실행 유닛들 * 2 플롭/유닛 (multiply-add에서) * 750MHz) 대부분의 경우에, Nvidia의 Geforce GTX280은 933.12기가 플롭스로 최상의 성능을 내게 된다. ((240 SP들 * 2 플롭/유닛 (multiply-add에 대해) + 60 SFU들 * 4 플롭/유닛 (SP들 상에서 동작하는 MAD와 4개의 스칼라 MUL들이 묶여질 때)) * 1296MHz)

그러나 이것이 Nvidia의 아키텍쳐가 필수적으로 AMD의 아키텍쳐보다 "좋다"는 것은 아니다. 성능을 좋게 하는 원인은 여전히 다른 곳에도 많이 있으며, 이것이 실제 성능에 무조건 영향을 미치는 것이 아니기 때문이다. 그러나 우리가 이것을 알기 전에, 또다른 중요한 요점이 있다. 효율.

7페이지.

AMD의 RV770 과 Nvidia의 GT200 : 어떤것이 더 효율적인가?

고수준의 성능과 다른 것들을 떠받들 수 있는 한가지가 효율이다. AMD의 아키텍쳐는 Nvidia에 비교해 명백히 영역당 효율이 뛰어나다.

현재로써는, RV770이 55nm공정으로 제조되고 GT200이 65nm 공정으로 제조되었다고 소리치지 말라 : 우리는 이것 또한 고려 대상으로 넣었다. GT200의 다이 크기는 576 제곱밀리미터지만, 55nm로 공정을 낮춘다면, 완벽하게 크기를 비교하여 412 제곱밀리미터라는 계산이 나온다. 이것이 비록 엄청나게 크다고 해도, TSMC의 55nm 하프 노드 프로세스는 누구나 예상할 수 있는 것보다 훨씬 더 다이 크기를 비효율적으로 줄이게 된다. 현재로서는 이것으로 비교를 하며 Nvidia에게 약간의 이점을 주는 것으로 만족하기로 하자.

처음으로 우리는 제곱밀리미터 당 기가플롭스를 (영역 당 성능) 사용하여 최대 이론적 성능에 대한 영역 효율을 볼 것이다. 기억할 것은, 이것은 단지 설계와 성능 양상의 비율일 뿐이다. ; (operation / (s * mm * mm))이 진정 무엇을 의미하는지는 묻지 말 것. :)
 

  표준화한 다이크기 GFLOPS GFLOPS/mm^2
AMD RV770 260 mm^2 1200 4.62
NVIDIA GT200 412 mm^2 933 2.26

이 표는 우리에게 Nvidia의 아키텍쳐가 AMD의 이론적 최대 성능과 같은 수준을 유지하기 위하여 2배의 다이 크기를 요구한다는 것을 보여준다. 물론 이론적인 성능이 특히 우리가 이전에 다루었던 병렬화 추출 면에서는 모든것을 의미하지는 않는다. 그러므로 영역 당 실 성능을 보도록 하며 Bioshock, Crysis와 Oblivion 같은 몇몇 특정 벤치마크에서의 결과를 보도록 하자. 우리는 Bioshock에서 RV770이 GT200과 호각을 이루는 비슷한 성능을 내며 Oblivion에서 가장 나쁜 성능을 냈기 때문에 골랐다. (RV770은 실제로 bioshock에서 GT200을 뛰어 넘는데 GT200은 Oblivion에서 RV770을 짓밟아 버린다.) Crysis를 포함시킨 이유는 이것의 엔진이 아주 유명하며 스트레스를 많이 주는 벤치마크라 테스트 중 우리가 보기에 RV770과 GT200 사이에 성능 차이를 bioshock와 oblivion의 중간 정도에서 확인할 수 있기 때문이다.

이 숫자들은 제곱센티미터 당 성능의 수치이다. (왜냐면 수치에 100을 곱했을 때 숫자가 좀 더 괜찮아 보이기 때문이다.) 다시한번 말하지만, 이것은 실제적으로 적용이 되는 수치가 아니다. -- 이것은 아키텍쳐를 비교하여 사용할 수 있는 비율일 뿐이다.

다이 영역 당 성능 cm^2로 표준화한 다이 크기 Bioshock Crysis Oblivion
AMD RV770 2.6 27 fps/cm^2 11.42 fps/cm^2 10.23 fps/cm^2
NVIDIA GT200 4.12 15.51 fps/cm^2 8.33 fps/cm^2 8.93 fps/cm^2

모든 것이 진짜는 아니라도, AMD가 취할 수 있는 성능이 좀 더 영역 당 고효율이라는 것은 명백하자. 제발 이들 숫자가 직접적으로 말하는 것은 없으며 설명하기 쉬워서 하는 것이라는 것을 알아두어야 하는데, 그래서 이 부분을 그래프를 쓰지 않고 표를 그린 것이다. (fps/cm^2 차이는 큰 뜻이 없다.) 그러므로 높은 숫자는 AMD가 훨씬 더 영역 효율이 좋다는 것을 보여주며, 이 데이터는 AMD가 진정으로 갖고 있는 장점을 보여주는 것의 아니다. 특히 크기를 표준화 하며 미세 벤치보다 게임 성능을 본 것 때문이 이것 때문이기도 하다.

몇몇 이 효율은 설계상에서 올 수도 있는데, 레이아웃을 최적화 한 데 따른 결과일 수도 있다. AMD는 그들의 하드웨어에 대해 영역 당 최적화에 약간의 시간을 썼다고 하며, 이것이 그들이 트랜지스터 수를 두배로 늘리거나 웃길 정도의 엄청나게 큰 다이를 제조하지 않고서도 SP를 2배 넘게 늘릴 수 있었던 이유의 한 부분일 수도 있겠다. 우리는 이제 트랜지스터 밀도를 보도록 하겠지만, AMD와 Nvidia에서의 트랜지스터 갯수는 추정 수일 뿐이며 아주 오차가 클 수도 있으며 이것이 유용할 이유는 없다.

우리는 이제 또다른 종류의 효율에 대해서도 말할 수도 있다. 전력 효율이다. 이것은 전력 단가가 올라가면서 훨씬 더 중요해졌는데, 컴퓨터는 더욱 전력을 먹게 되며, 전세계적으로 자연보호에 대한 압박이 심화되고 있는 실정이다. 전력 효율을 살펴보는 정확한 방법은 프레임을 그리는데에 있어 드는 에너지 양을 보는 것이다. 이것은 이전의 이상한 행위보다는 훨씬 쉬운 개념이다. 이것은 계산하기에 어려운 것도 아니다.

이 데이터를 얻기위해 우리는 벤치마크 동작 시 두 카드의 프레임 레이트와 소모 전력을 기록하였다. 그리고 우리는 평균 프레임 레이트 (frames per second) 와 평균 소비 전력(joules per second) 을 보았다. 우리는 평균 전력을 평균 프레임 레이트로 나누어 : 평균 일률 / 프레임으로 나타내었다. 이것이 주어진 벤치마크에서 정확히 우리가 원하는 프레임당 에너지를 볼 수 있게 하는 방법이 되겠다. 우리는 여기서 Bioshock, Crysis와 Oblivion으로 체크하였다.

프레임당 평균 소비 전력 Bioshock Crysis Oblivion
AMD RV770 4.45 J/frame 10.33 J/frame 11.07 J/frame
NVIDIA GT200 5.37 J/frame 9.99 J/frame 9.57 J/frame

이것도 또한 흥미롭게 만드는 것이다. AMD와 Nvidia는 이전에 보여주었던 테스트와는 반대로 전력 효율을 맞바꾼 것 같이 보인다. 우리의 벤치마크에서 BioShock에서는 RV770이 평균 프레임을 그리는데 더 적은 에너지를 요구하는 것을 볼 수 있다. 확실히 Obilvion에서는 반대가 되며, Nvidia는 Crysis에서도 전력 효율 면에서 우위를 점하고 있다. 그렇다. RV770은 Crysis와 Oblivion에서 떨어지는 성능으로 더 적은 전력을 사용하지만, 더 많은 전력을 사용하면 Nvidia는 당신에게 더 많은 것을 주게 된다. 그러나 RV770은 Bioshock에서 낮은 전력으로도 GT200을 성능 상에서 앞서고 있는데, 이것이 RV770의 위력이 되겠다.

이런 각기 다른 상황 하에서 와트 당 성능에 대한 두 아키텍쳐의 잠재력을 보여주는 작은 테스트는 시간이 지나면서 게임이 출시 되면, 두 아키텍쳐의 최적화가 아주 중요해질 것이라는 것을 의미하는 것이다. (실 성능은 제쳐두고) Bioshock는 훌륭한 와트당 성능비를 두 플랫폼에서 보여주고 있다. Crysis는 그래픽 기능 면에 있어 두 진영 모두 괜찮은 성능이며 Bioshock에 비해 더 낮은 전력 효율을 보여주며 Oblivion은 일정하게 성능과 전력 효율 면에서 (보증된 것은 아니더라도) 괜찮은 성능을 내고 있다.

8페이지

아키텍쳐와 효율 논쟁을 끝내자.

엔지니어링은 모든것을 밸런스와 맞바꾸게 한다. 한개 영역에서 능력을 올리는 선택을 하면 또다른 곳에서 성능이 떨어질 우려가 있다. 기능의 추가는 가격에 비해 제 성능이 나지 않을 수도 있다. 최악의 경우, Intel이 NetBurst를 발견 했듯이, 아키텍쳐가 천성적으로 흠이 많아 가면 갈수록 최상의 솔류션에 멀어지기 시작할 때도 있다.

현재 Nvidia와 AMD 사이에는 엄청난 수의 유사점이 있다. 이 둘은 메모리와 명령어 지연시간을 숨기기 위해 실행중에는 엄청난 수의 스레드를 관리하는 것을 요구하고 있다. 이 둘은 판단을 공유하는 스레드의 큰 블럭 내에서 스레드를 관리하고 있다. 캐싱, 공백 메모리 읽기와 쓰기, 그리고 자원 할당 조종은 실행 유닛에 공급을 하기 위하여 조심스럽게 관리되어야 한다. GT200과 RV770은 브랜치 실행을 방향의 동적 예측으로 실행하는데 스레드는 브랜치가 아니다. (만약 워프나 wavefronts 브랜치 내의 스레드가 다른것들과 틀리다면, 그룹 내의 모든 스레드는 각개 코드 패스에서 실행되어야 한다는 것을 의미한다.) 두 가지 모두 명령어와 상수 캐시를 하드웨어를 통해 공유하며 이것은 SPMD 프로그래밍 모델에 알맞게 1개 판단에서 다수의 스레드를 서비스하여 SPMD 하드웨어에 효과를 주는 SIMD의 특성이다.

그러나 GT200과 RV770의 심장은, SPA (Steaming Processor Array) 와 DPP (Data Parallel Processing) 배열인데, 확실히, 이것들은 다르다. Nvidia가 취하고 있는 한번에 스레드 당 1개의 연산을 이용하는 스칼라적 접근은 5개 폭의 VLIW 접근을 그들의 아키텍쳐에 집적한 AMD와는 확실히 다르다. 두가지 모두 다 천성적으로 SIMD이지만, Nvidia는 더욱 S(operation)MD이며 AMD는 S(VLIW)MD이다.

14.JPG
AMD의 RV770은, 잘 정돈되어 제조되어 있다.

연산 유닛을 집적 시키는 것이 도전이지만 Nvidia에게는 더욱 일관적으로 보이는 반면, RV770이 GTX 280을 성능에서만이 아니라 전력 효율면에서도 압박하는 (Bioshock 같은) 경우를 보면 AMD 하드웨어의 경우에는 더욱 효율적인 듯 하다. 영역 효율 면은 확실히 AMD가 휘어잡고 있는데, 이것은 그들의 성능당 단가가 Nvidia들 것보다 훨씬 낮다는 것이다. (제조에 관한 것이지 -- 기술개발에 관한 것은 아니다.)작은 IC는 생산부문에 있어 단가의 절감을 의미하기 때문이다.

15.JPG
NVIDIA의 GT200은, 위압적인 태세이다.

쉐이더/커널 길이가 (FP의 비율과 특히 곱셈-덧셈 연산으로 높은 수준의 성능으로 끌어 올리기 위해 필요한 다른 코드들을 제외 하고는) GT200 상에서는 그렇게 중요하지 않기 때문에, 길어진 프로그램은 ILP에서 추출하기에는 AMD의 컴파일러에게 유리하다. RV770과 GT200은 자원 사용률에 대해 균형적인 스레드 발행을 해야 하지만, RV770은 GT200이 지연시간을 제대로 숨기지 못하는 상황에서 ILP가 쉐이더/커널 코드를 추출하여 상황을 진전 시키는데 도움을 주어 성능을 더 높일 수 있는 상황이 있다.

우리는 CUDA 포럼과 몇몇 우리의 독자에게서 찾아낸 정보에 기반한 G80의 SP가 22 스테이지 파이프라인을 가져 GT200도 또한 비슷한 깊이의 파이프를 가졌다고 믿으며, AMD는 그들의 파이프라인이 확실히 이것보다 얕지만 실제 길이는 얼마인지 알려주지 않았다. 말할 필요도 없이, 짧아진 파이프라인과 다수의 스케쥴링 사이클에서의 1개 wavefronts의 실행을 할 수 있는 능력이 의미하는 것은 엄청난 양의 TLP가 명령어 지연시간을 덮어버리는 것 외에는 필요치 않다는 것을 의미한다. 엄청난 양의 TLP가 메모리 지연시간을 덮는 것에도 일조하긴 하지만, RV770에서 엄청난 양의 내부 계산을 가진 쉐이더 프로그램 또한 이것을 도울 수 있다.

이 모든 사실을 종합하면, DX10의 재림에도 불구하고 이들 두 아키텍쳐는 많은 양의 독립 스레드를 빠르게 실행함에 있어 아주 좋은 성능을 보이는데, GT200과 RV770은 몇몇 경우에는 극도로 다른 접근 방식을 요구하기도 한다. RV770은 증가된 ILP가 추출할 수 있는 능력으로 인해 긴 쉐이더에서 이득을 얻을 수 있는 반면, 긴 쉐이더의 늘어난 자원의 사용은 GT200에서는 적은 스레드가 발행되어 낮아지는 성능을 야기할 수도 있따. 물론 다른 종류의 정책 또한 반대의 효과를 가질 수 있다. 캐시와 자원 가용/유지보수도 다른데, 이것은 언제 어떻게 데이터가 페치되고 사용되는지에 대해서 기회비용과 선택이 좌우된다. 고정 함수 자원도 다르며 텍스쳐 필터같은 것의 사용량의 최적화와 다른 셋업 엔진에 대한 효과 또한 성능 상의 파급 효과가 크게 될 수 있다.

우리는 아직 두 플랫폼에 모두 사용가능한 간단한 쉐이더 코드를 사용하여 나오는 효과에 대해서는 쓰지 않았다. 현재로써 보통의 성능은 GT200에서 나오겠지만, 얼마나 코드가 하드웨어에 맞느냐에 따라 성능의 가변폭이 큰 것은 RV770일 것이다. G80 (과 Nvidia의 아키텍쳐) 은 R600이 업계에 나오기 전까지 우위를 점해 왔으며, RV670까지도 AMD는 진정한 경쟁자를 시장에 내놓지 않았었다. 이런 것도 AMD 하드웨어 상에서 사용 가능한 연산을 모두 사용하는 타이틀을 보기 힘든 이유가 될 수가 있다. 그러나 이번 출시로, AMD는 그들의 시장 위치를 고착시켰으며, 이제 일어나는 일을 아주 흥미롭게 볼 수 있을 것이다.

9페이지

음, 어, Hub가 세상을 지배하나?

R500에서 AMD는 메모리 대역폭의 소비자와 메모리 컨트롤러 그 자신 사이의 데이터 이동을 위해 설계한 그들의 첫 링버스, 고속, 고 대역폭의 버스를 소개하였다. 이 R600 GPU에서는 링버스를 향상시켜, 내부적으로 데이터의 이동을 100GB/s까지 끌어올렸다.

16.JPG

R600 링버스는 2개의 512비트 링크로 인해 진정한 이방향성 수행으로 (데이터는 버스의 양방향으로 보내질 수 있었다.) 구성되었으며 총 100GB/s의 내부 대역폭을 제공하였다. 이 링 버스는 괴물이었으며 AMD가 엄청나게 자랑스러워 하는 것이었으나, 더 좋은 와트 당 성능이라는 과제 때문에, AMD는 이 링을 스스로 없애고 더욱 편리한 전환 허브 아키텍쳐로 교체하게 되었다.

17.JPG

링버스 데이터는 한 링 스탑에서 다른 곳으로 옮겨가며 모든 클라이언트가 전 대역폭으로 접근하기 위해 이 데이터가 필요가 있든 없든 계속적으로 전진해야 한다. (UVD2나 디스플레이 제어 데이터 같은) 낮은 대역폭으로도 충분한 데이터들은, 링버스에게는 전력 낭비만을 부추길 뿐이었다.

RV770에서 이것은 단순한 전환된 허브로 존재하게 되는데, 이것은 데이터를 디스플레이 제어기나, PCie나 (AMD의 비디오 디코드 엔진인) UVD2로 보낼 때 전력소모 면에서 훨씬 절약된다는 것을 의미한다. 링버스를 사용 함으로써 나오는 부작용은 데이터가 링을 돌아가는것 보다 점대 점으로 이동하기 때문에 지연시간이 낮아진다는 것이다. 허브로 옮겨감에 따라, AMD는 그들의 내부 버스 폭을 2048비트로 늘리게 되었다. 최대 대역폭은 (4870에서) 192GB/s로 늘어났지만 클럭 스피드에 의존하는 것이다.

내부 대역을 2배로 늘리는 것과 점대 점 통신 시스템으로, 메모리 클라이언트 간의 지연시간은 줄어들었으며, 엄청난 양의 데이터가 칩 부문 사이를 이동할 수 있게 되었다. 확실히 GPU 상의 800 개의 실행 유닛에 충분한 정보를 공급 하는 것은 주된 임무였으며 AMD는 이 것을 도입하기 위해 많은 것을 해야 했다.

CrossFire Sideport

비록 AMD가 아직까지 얘기하고 있지는 않지만, CrossFire Sideport는 RV770 아키텍쳐에 있어 새로운 기능인데도 RV770에서 아직까지 쓰이고 있지 않다. 미래에, 싱글 카드 멀티 GPU 솔류션(R700...쿨럭쿨럭) 에 이 인터페이스가 GPU간의 통신에 쓰일 것이다. - 이론적으로 이것은 Crossfire보다 더 좋은 수용성을 나타낼 것이다. 우리는 AMD가 빠르게 R700이라는 코드명 아래 그들의 듀얼 GPU RV770 카드를 준비하는 대로 테스트를 해 볼 것이다.

한가지 확실한 것은, AMD는 어떻게든 CrossFire의 구성에 대해 신뢰할만한 도움을 줌으로써 고사양 영역에서 경쟁해야 하는 데 걸림돌이 되는 장애물을 없애고 있다는 것이다. 이것이 정말로 확 달라진 모습을 보인다면 아주 흥분될 것인데, 현재의 CrossFire는 지금까지 행해왔던 것과 하등 다를 것이 없기 때문이다. : 두 카드에서의 프레임 버퍼에 그려진 출력물을 혼합하는 것으로. 실제 GPU-GPU간 통신에 무엇을 추가하는 것으로 그들의 몇몇 문제를 푸는 데에 도움이 될 것이다.

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

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