TeraScale
1. 개요
AMD/ATi의 '''두 번째 통합 셰이더''' 마이크로아키텍처. VLIW SIMD 방식을 사용했으며, NVIDIA의 첫 번째 통합 셰이더 모델인 G80 아키텍처부터 DirectX 11을 지원하는 페르미 아키텍처까지 경쟁했다. 인텔에도 '''Tera-Scale'''이란 연구 프로그램이 있어 혼동될 수 있으니 주의.
2. 상세
2.1. 배경
하드웨어 내부적으로는 2007년 R600부터 해당되는게 맞지만, 그 당시에는 그냥 R600 아키텍처로 알려져 있었다. 그러다가 2008년 RV770이 나오고 좀 지난 시점에 지금의 아키텍처 이름으로 발표되었다. HD 4800 시리즈에서 1 TFLOPS의 FP32 연산 성능을 달성한 것에 따온 이름인 듯 하다.
2.2. TeraScale의 전신
사실 통합 셰이더 구조의 마이크로아키텍처로써는 2005년 11월 22일에 출시된 7세대 콘솔 게임기인 Xbox 360의 GPU인 Xenos가 최초였다. 비록 그래픽 파이프라인이 DirectX 10 이후 버전이 아닌 9.0c 기반이지만, DirectX 10의 통합 셰이더와 DirectX 11의 정식 기능이 된 하드웨어 테셀레이션 기능이 일부 담겨진 9.0c 확장 버전에 가까운 특이한 구조를 지니고 있다. 하지만 개발 당시 둘 다 DirectX에 정식으로 반영되지 않은 비표준 기능이라서 널리 활용되지 못 했다.
2.3. 세대별 TeraScale 일람
2.3.1. TeraScale 1 (gfx300, R600)
- 커맨드 프로세서
이전 세대의 커맨드 엔진에 해당하는 유닛. 이전 세대와 마찬가지로 CPU의 명령을 받아 각 하부 구조에 명령을 발행한다.
- 셋업 / 그래픽스 엔진
그래픽에 필요한 가장 기본적인 고정 유닛들이 모여있는 블록. 초대 3D 그래픽카드부터 존재했던 Vertex Assembler, Rasterizer, Scan Converter, Hierarchical-Z는 물론이고, 2001년 TRUFORM부터 존속되어 프로그래밍 할 수 있는 하드웨어 테셀레이션인 Programmable Tessellator, DirectX 10부터 도입된 지오메트리 셰이더가 하드웨어로 구현된 Geometry Assembler까지 모두 포함되어 있다.
- 울트라 스레디드 디스페치 프로세서
R520부터 도입된 울트라 스레딩 디스페치 프로세서에서 계승된 하드웨어 블록으로, 셋업 / 그래픽스 엔진에 수행된 명령어 및 데이터들을 스레드 단위로 수많은 연산 코어들이 뭉쳐진 SIMD 엔진에 적절하게 분배해준다. 연산 비중이 커진만큼 관리해야 할 스레드 개수도 이전 세대보다 훨씬 많아졌기 때문에 스레드 스케줄링의 중요성이 매우 커졌다.
- 통합 셰이더로 변경된 4개의 SIMD 엔진
TeraScale 아키텍처의 핵심 기능으로 그동안 분리되어 있었던 픽셀 셰이더와 버텍스 셰이더의 고정적인 파이프라인에 벗어난 구조로 변경되었다. 이러한 통합 셰이더 기능은 VLIW5 방식의 SIMD로 처리하며, 통합 셰이더 역할을 담당하는 SIMD 코어에는 10개의 스트림 프로세싱 유닛, 스트림 프로세싱 유닛에는 5개의 스트리밍 프로세서가 포함되어 있다. 5개의 스트리밍 프로세서 중에 4개는 각각 FP32 연산과 정수 연산을 지원하지만 나머지 1개는 FP32 연산과 정수 연산은 물론 특수 기능 연산(SFU)까지 지원한다.
- 텍스처 유닛
픽셀 셰이더를 사용하여 텍스처를 필터링하는게 아닌 별도의 샘플 그리드와 샘플 포인트를 사용하여 처리한 방식으로 변경되었다.
- 렌더 백엔드
4개의 ROP으로 구성된 유닛. 기본적인 기능은 이전 세대와 큰 차이 없지만 Z/스텐실의 성능이 2배 향상되었다.
- 테셀레이터
일반적으로 테셀레이션이라고 부르면 DirectX 11의 주요 기능으로 널리 알려져 있지만 개념적으로나 하드웨어적으로는 이미 오래전부터 존재했던 기능이다. 초창기 하드웨어 테셀레이션 기능은 2001년 R200에 사용된 라데온 8500의 TRUFORM으로 거슬러 올라가는데, 당시 행사에서 처음 시연되었을 땐 정교한 곡면 표현력을 보여주었지만 기술력 한계로 정확도가 다소 떨어지는 점과 경쟁 모델이었던 NVIDIA 지포스 3, 4 Ti 시리즈에는 존재하지 않는 기능이었고 결정적으로 DirectX 정식 기능이 아니었기 때문에 이를 채택한 게임이 많지 않았다. 당시 ATi가 제공하는 별도의 SDK를 통해서만 구현할 수 있었기 때문. Xbox 360의 Xenos와 TeraScale 1 기반 GPU들도 마찬가지다. DirectX 11을 지원하는 TeraScale 2에 들어서야 정식으로 활용할 수 있게 되었고, 아키텍처가 변경된 GCN부터는 '지오메트리 프로세서'라는 용어로 명명되었다.
- CFAA
기존 MSAA 성능을 높이고 CFAA라는 새로운 안티에일리어싱 기능이 추가되었으나 ROP이 아닌 스트림 프로세서에서 처리하기 때문에 셰이더 리소스 처리량이 많은 게임에서는 CFAA를 처리해줄 연산 유닛이 부족해져 성능 저하가 발생하는 단점을 지니고 있다.
- 링 버스 메모리 컨트롤러
R520부터 도입된 양방향 링 버스가 계승된 구조로, 부분적으로 크로스 바 구조가 남아있는 이전 세대와는 다르게 이번에는 완전한 링 버스 구조로 변경되었다. 512비트 메모리버스를 가진 라데온 HD 2900XT의 경우는 읽기 512비트 + 쓰기 512비트 해서 총 1024비트의 양방향 링 버스 구조를 가진다. 해당 메모리버스 채널은 64비트의 메모리 채널 단위로 구성되어 있는데 앞에 서술한 라데온 HD 2900XT는 8개의 메모리 채널, 저가형 모델인 라데온 HD 2400 PRO는 1개의 메모리 채널로 이루어져 있다.
가장 먼저 나온 R600이 아닌 하위 라인인 RV630, RV610부터 도입된 미디어 가속 전용 하드웨어로, H.264, WMV, VC-1 모두 하드웨어 디코딩이 가능해서 VC-1 하드웨어 디코딩이 안 되었던 당시 경쟁사보다 우위 요소였다. 하지만 VC-1 동영상 자체가 널리 사용되진 않아서 큰 셀링 포인트가 되지 못 했다.
- 배정 밀도 부동소수점(FP64) 실수 연산
HD 3800 시리즈에 사용된 RV670부터 도입된 연산 포맷으로, 이론적으로는 기존 FP32 연산의 1/5 성능. 별도의 전용 연산 유닛 없이 기존의 스트림 프로세서를 이용하여 동작하기 때문에 트랜지스터를 절약할 수 있지만, 다른 연산 포맷과 동시에 동작하면서 성능 저하를 막기 어려운 단점이 있다. FP32 연산의 1/5 성능이기 때문에 최상위 GPU만 지원한다.
- PowerPlay
HD 3000 시리즈부터 도입된 전력 관리 기술. 불필요한 전력 소모를 절감해주고, 특히 유휴 상태의 소비 전력이 크게 절감되었다.
2007년 5월에 등장한 초대 TeraScale 마이크로아키텍처로, 라데온 HD 2000 시리즈부터 사용되었다. DirectX 10을 정식으로 지원함에 따라 통합 셰이더 및 지오메트리 셰이더 기능이 본격적으로 활용되기 시작했지만, 경쟁사의 최상위 라인과 경쟁할 수도 없을만큼 실성능이 처참했다. 그것도 모자라 90nm 공정으로 제조되어 6개월 먼저 등장한 경쟁사의 G80과는 다르게 80nm 공정이라는 좀 더 앞선 하프 노드 공정을 채택했음에도 전력 대비 성능 비가 그다지 뛰어난 편은 아니었다. 비효율적인 구조로 인해 GPU 내부적으로도 병목 현상이 심해진 것이 주요 원인으로 꼽혔다.2007년 11월에 등장한 라데온 HD 3000 시리즈부터는 전 라인 55nm 공정으로 미세화되어 실리콘 다이 사이즈가 크게 줄어들었다. 전력 소모의 주범 중에 하나였던 메모리 버스 구조를 최대 512-bit에서 256-bit로 대폭 하향되어 메모리 대역폭이 40% 넘게 축소되었다. 그 대신 GPU 클럭을 높여 동급 내지는 10% 넘는 게이밍 성능을 보여주었다. 단, 메모리 대역폭이 크게 축소되었기 때문에 고해상도 환경에서는 성능이 하락되는 경우도 있으나 평균적으로는 엎치락뒤치락 수준. 미세화된 공정답게 전성비도 크게 개선되었다.
2.3.2. TeraScale 1 (gfx300, R700)
- 최대 10개의 SIMD 엔진
4개의 SIMD 엔진이었던 이전 세대보다 최대 2.5배나 확장되어, 단일 GPU에서도 FP32 연산 성능이 1.2 TFLOPS까지 구현했다.
- 로컬 데이터 셰어, 글로벌 데이터 셰어 메모리 추가
이전 세대에서는 별도의 셰이더 공유 캐시 메모리만 존재했으나, SIMD 엔진에 16 KB 로컬 데이터 셰어(LDS) 하나씩 탑재되고 기존의 셰이더 캐시 메모리가 16 KB 글로벌 데이터 셰어(GDS)로 대체되었다.
- 텍스처링 성능 개선
텍스처 유닛의 면적 대비 성능이 최대 70% 향상되었고, 텍스처 캐시 메모리 구조적으로도 L1 텍스처 캐시 메모리가 전체 32 KB에서 SIMD 엔진당 16 KB로 변경되었다. L1 텍스처 캐시 메모리 대역폭도 240 GB/s에서 480 GB/s로 2배 확장되어 텍스처링 성능과 성능 효율 둘 다 잡았다.
- 렌더 백엔드 성능 개선
ROP 개수는 이전 세대와 동일하여 MSAA 없는 32비트 컬러 기준으로는 동일한 렌더링 성능이지만, MSAA 적용시의 렌더링 성능이 2배 향상되었고 Depth Stencil 샘플링 성능도 2배 향상되었다. 이 덕분에 특히 안티에일리어싱 옵션이 적용된 게임만큼은 이전 세대와의 성능 격차가 크게 두드러졌다.
- 허브 메모리 컨트롤러
완전한 링 버스 구조였던 이전 세대와는 다르게 허브 구조로 변경되었다. 크로스 바 구조보다 낮은 복잡도이면서 링 버스 구조보다 균일한 메모리 레이턴시가 절충된 특징을 지니고 있다.
2008년 6월에 등장한 라데온 HD 4000 시리즈부터 도입된 마이크로아키텍처로, 이때부터 FP32 연산 성능이 1 TFLOPS를 돌파해서 그런지 마이크로아키텍처 이름을 TeraScale로 명명되었다. 이에 따라 이전 세대도 똑같이 TeraScale로 소급 적용되었기 때문에 이전 세대와 구분할 때 기존 명칭대로 R600, R700으로 구분하는 편이다.R600의 비효율적인 구조를 뜯어 고쳐서 병목 현상을 완화하는 것이 주안점. SIMD 엔진 개수가 비대해졌는데 최대 렌더 백엔드 4개, ROP 16개로 이전 세대와 똑같아서 병목 현상이 심할 것처럼 보이지만, 실제로는 많은 개선 사항 덕분에 병목 현상이 그다지 심하지 않고 경쟁사의 최상위 GPU였던 G80과 G92를 능가하는 성능을 보여주었다.
2.3.3. TeraScale 2 (gfx400)
- 최대 20개의 SIMD 엔진
SIMD 엔진이 이전 세대보다 2배 증설되어, 단일 GPU 기준 FP32 연산 성능이 2.7 TFLOPS까지 구현되었다.
- 래스터라이저 2개로 증설
기존의 셋업 엔진이라고 알려진 명칭이 그래픽스 엔진으로 바뀌면서 래스터라이저가 2개로 증설되었다. 래스터라이저 뿐만 아니라 Hierarchical-Z도 2개로 증설되었으며, 공식 블록 다이어그램에는 보이지 않지만 항상 짝 지어서 존재했었던 Scan Converter도 정황상 2개로 증설된 것으로 추정되고 있다.
- 렌더 백엔드 2배 증설
래스터라이저가 2개로 늘려서 전체적인 그래픽스 파이프라인의 밸런스를 유지하기 위해 ROP 4개씩 구성되는 렌더 백엔드도 2배로 확장되었다.
- 로컬 데이터 셰어, 글로벌 데이터 셰어 용량의 확장
로컬 데이터 셰어(LDS)가 16 KB → 32 KB로 2배 확장되었고, 글로벌 데이터 셰어(GDS)도 16 KB → 64 KB로 4배 확장되었다.
- SIMD 엔진마다 연산용 L1 캐시 메모리 8 KB 추가
SIMD 엔진 내부의 연산용 캐시 메모리는 로컬 데이터 셰어 말고도 연산용 L1 캐시 메모리 8 KB가 추가되었다.
- L2 캐시 메모리 2배 증설
렌더 백엔드가 2배 증설됨에 따라 함께 짝 지어 구성되었던 L2 캐시 메모리도 최대 256 KB → 512 KB로 2배 확장되었다. 대역폭도 384 GB/s → 435 GB/s로 약 13% 확장되었다.
- 6세대 테셀레이터
기존에 비표준 기능으로 존재했던 테셀레이터가 DirectX 11 정식 기능에 맞게 대응되었고, 아티팩트도 줄였다.
- 7세대 테셀레이터 (라데온 HD 6800 시리즈 한정)
라데온 HD 6800 시리즈에 사용된 Barts에서 도입되었으며, 10 이하의 팩터 기준으로 테셀레이션 성능이 라데온 HD 5870 대비 1.5배에서 최대 2배까지 향상되었다.
2009년 9월에 등장한 라데온 HD 5000 시리즈와 2010년 10월부터 등장한 HD 6800 시리즈 이하에 적용된 마이크로아키텍처. 연산 구조는 VLIW5 방식으로 이전과 동일하며, 체급이 커진 것 빼고는 구조적으로 이전 세대와 비슷하다. 얼핏보면 이전 세대 구조의 확장판 느낌. 다른 점이라면 테셀레이터가 DirectX 11에 대응되어서 그동안 비표준으로 독자 SDK에 의존해야 하다보니 제대로 써먹지 못 했던 것에서 제대로 써먹을 수 있게 된 것이 가장 큰 차이점이다. 그 외에도 디스플레이 엔진이 발전되어 2560×1600 해상도의 각각 4배 또는 6배를 지원하며, Eyefinity를 지원하게 되었다. 해당 아키텍처는 HD 6800 시리즈 이하 라인, APU인 온타리오, 자카테, 라노에도 채택되었다.1개의 메모리 컨트롤러 안에는 32비트 메모리 채널에서 64비트 메모리 채널로 다시 확장되었고, FMA(Fused Multiply-Add), MAD(Multiply-Add), IEEE 754-2008 표준, SAD(Sum of Absolute Differences) 등의 지원이 추가되었다.
2.3.4. TeraScale 3 (gfx500)
- 듀얼 그래픽스 엔진
이전 세대에서는 래스터라이저, Hierarchical-Z, Scan Converter만 2개였던 것이 이번에는 Vertex Assembler, Geometry Assembler, 테셀레이터까지 모두 2개로 증설되어 완전히 이원화되었다.
- 8세대 테셀레이터
테셀레이터가 더욱 발전되어 라데온 HD 5870 대비 팩터가 높은 상태에서도 2배 정도 향상되었고, 팩터가 낮은 상태에서는 최대 3배 향상되었다.
- 듀얼 울트라 스레디드 디스페치 프로세서
그래픽스 엔진이 2개로 늘린 것에 맞춰서 울트라 스레디드 디스페치 프로세서도 2개로 이원화되었다.
- 스트림 프로세싱 유닛의 재구성
그동안 스트림 프로세싱 유닛이 4개의 스트리밍 프로세서와 SFU까지 추가된 1개의 스트리밍 프로세서로 구성된 상태에서 SFU가 빠진 4개의 스트리밍 프로세서만으로 간소화되었다. SFU 기능을 수행하려면 3개의 스트리밍 프로세서가 동원되어야 할 정도로 성능 효율이 크게 떨어지는 단점이 있지만, 대부분의 게임에서는 잘 이용하지 않기 때문에 스트림 프로세싱 유닛이 간소화됨에 따라 SIMD 엔진의 크기도 작아져 최대 24개의 SIMD 엔진이 탑재되었다. FP64 연산 성능도 FP32 연산 성능의 1/5에서 1/4로 변경되었다.
- ROP 성능 효율 개선
- PowerTune
동적 주파수 스케일링 기술. PowerPlay의 발전형으로, 필요할 때만 클럭을 높혀 제한된 TDP 내에서 발열, 소음, 전력 소비를 최소화해준다.
2010년 12월, Northern Islands 제품군 중 라데온 HD 6900 시리즈 한정으로 도입되었다. 기존의 하나의 명령어 포트를 공유하는 5-way VLIW, 즉 4개의 ALU와 1개의 SFU(Special Function Unit)[1] 에서 4개의 ALU인 4-way로 변경되었으며, SFU는 3개의 ALU를 사용해 작동하도록 바뀌었다. 이러한 변화로 인하여 동일 면적에 10%더 많은 SIMD 엔진을 탑재할 수 있게 되었으며, DirectX 11과 OpenCL에서의 성능 향상이 존재한다. 그래픽스 엔진에서는 래스터라이저 말고도 테셀레이터를 비롯한 다른 하드웨어 블록들도 2개로 완전히 이원화되었고, 울트라 테셀레이션을 적극적으로 활용한 고사양 게임의 성능이 크게 향상되었다. 단, HD 6800 시리즈 이하 모델은 HD 5000 시리즈와 동일한 TeraScale 2 기반이다. 해당 아키텍처는 APU인 트리니티, 리치랜드에도 사용되었다.3. 관련 항목
[1] ALU 역할도 수행할 수 있다.