벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] NVIDIA가 차세대 GPU아키텍처 Kepler의 베일을 벗겨

tware 2012. 3. 22. 20:00


아키텍처를 대혁신하고 성능 효율이 비약한 Kepler


 NVIDIA가 차세대 GPU 아키텍처 "Kepler (케플러)"를 발표했다. 베일을 벗은 Kepler 아키텍처는 놀라운 내용이었다. G80 이후의 NVIDIA GPU 아키텍처의 특징을 싹 없앤 대변혁 이었기 때문이다.

 먼저 GeForce 8800 (G80)부터 하드웨어에 의한 명령 스케줄링을 상당 부분 옮기고 마찬가지로 G80 이후의 NVIDIA의 특징이었던 긴 파이프 라인 연산 코어를 짧은 파이프 라인으로 대체했다. 즉, 컨트롤 하드웨어 및 파이프 라인의 오버 헤드를 크게 줄일 아키텍처를 취한 것이다. 그 결과 완성된 것은 획기적인 정도로 고효율 GPU 아키텍처다. Fermi 세대의 하이엔드 GeForce GTX 580 (GF110)와 Kepler 세대의 하이 엔드 GeForce GTX 680 (GK104)를 비교하면, 그것을 잘 알 수 있다.


Kepler의 다이 레이아웃


GeForce GTX 680의 스펙



 데스크탑 하이 엔드 GPU의 다이 크기 (반도체 본체의 면적)는 40nm 공정인 Fermi 세대의 GF110의 520 제곱 mm에서 28nm 공정의 Kepler 세대의 GK104의 294 제곱 mm로 약 56%로 축소됐다. 트랜지스터 수의 증가는 GF110의 3B (30억)에서 GK104의 3.54B (35.4 억)으로 불과 18% 증가했을뿐. 그런데 탑재하는 CUDA 코어 (단정밀도 적화산 + 정수 연산 유닛)는 Fermi GF110의  512 코어에서 Kepler GK104는 1536 코어와 3배나 늘었다.

 피크 성능은 GF110이 1,581GFLOPS (쉐이더 코어 클럭 1.544GHz시)에 비해 GK104은 3,090GFLOPS (베이스 클럭 1.006GHz시) 이상으로 약 2배에 올랐다. 그런데 보드 소비 전력은 GF110의 최대 244W에서 GK104의 195W로 80%로 떨어졌다.

 즉, Fermi에서 Kepler에서 다이 크기는 0.56 배, 트랜지스터 수는 1.18 배, 연산 유닛 수는 3배, 성능은 2배, 보드 소비 전력은 0.8배 증가했다. 대충 말해서, 성능 / 와트는 Kepler는 Fermi의 2.5 배 향상된 것이다.

Kepler와 Fermi의 비교


공정이 1세대 미세화 된 것으로 이론적으로는 다이는 선형으로 0.7 배, 면적으로 0.5배 수축되지만, Fermi에서 Kepler의 숫자 업은 그렇게 설명이 되지 않는다. 공정 기술 분 뿐이라면, 다이가 0.​​56 배라면 단순 계산으로는 연산 유닛은 1.1 배, 성능은 1.1 배 밖에되지 않기 때문이다.



아키텍처의 개량으로 GPU의 효율을 향상시키는 NVIDIA 로드맵


 일목요연하게 Fermi에서 Kepler는 공정 기술의 향상 분을 훨씬 웃도는 성능 향상이 이루어지고 있다. 이것은 마이크로 아키텍처의 향상에 따른 것이다. NVIDIA는 Kepler는 Fermi에서 완전히 GPU의 마이크로 아키텍쳐를 일신했는데 그 효과는 극적이다.

 특히 놀라운 것은 2.5 배나 GPU 성능 / 와트의 향상이다. NVIDIA는 2018 ~ 2020년까지 GPU 성능 / 와트를 10배로 끌어 올리려 한다. 따라서 GPU의 세대마다 성능 효율을 몇 배씩 증가한다 설명해왔다. GK104의 성능 효율을 보는 한, NVIDIA는 Kepler 세대는 그 공약을 완수하고 있는 것 같다.






 Kepler 아키텍처의 고효율화는 GPU 컴퓨팅의 성능 향상도 계산한 것이다. 그러나 고효율화는 그래픽에서도 유리하게 작동한다. 최근 1 ~ 2년, N​​VIDIA는 PC 그래픽에서는 기세가 약했다. 그 원인은 그래픽의 성능 / 전력 효율이 AMD에 비해 낮았던 점에 있었다.

 그러나 이번 Kepler는 돌변해, NVIDIA는 그래픽 성능 효율도 크게 향상시켰다. 따라서 AMD에 열세였던, PC 그래픽의 기세를 만회할 기회가 있다. 다이가 작아진 것으로, 원가 경쟁력도 더했다. 실제로 이번에는 AMD와 NVIDIA에서 데스크탑의 최고급 GPU의 다이 크기 (반도체 본체의 면적)가 역전되고 있으며, AMD 쪽이 크다. 그러나 NVIDIA는 진정한 하이엔드인 GK100 클래스를 아직 발표하지 않았다.


GPU 다이 사이즈 및 공정 기술


 메모리 인터페이스는 GF110의 384-bit 폭에 비해 GK104는 256-bit 폭으로 좁아져 보드의 메모리는 2GB가 되었다. 이것은 칩 자체가 작아진 것으로, 메모리 인터페이스를 좁게하지 않을 수 없게 됐기 때문이다. 지원 메모리 종류는 GDDR5 이지만 지금까지의 GTX 580은 4Gtps 였던 전송 속도가 GTX 680은 6Gtps 지원으로 가속화 되고 있다. 따라서 메모리 대역은 GTX 680은 192.26GB / sec로 GTX 580 192.4GB / sec에서 거의 변하지 않는다.

 텍스처 유닛은 GF110가 64 유닛이었던 것이, GK104는 배인 128 유닛으로 늘었다. 그래픽 코어 클럭이 GF110의 772MHz 에 비해 GK104는 베이스 1.006GHz로 올랐기 때문에 텍셀 필 레이트는 GF110의 49.4GPixel / sec에서 GK104에서는 128.8GPixel / sec로 3 배 가까이 뛰어 올랐다.



파이프라인과 명령 스케줄링의 2부분 대폭 변경


 어떻게 NVIDIA는 Kepler에서 매직 같은 성능 효율의 향상을 달성 할 수 있었는지. 그 비밀은 마이크로 아키텍처에있다.

 NVIDIA의 GPU 아키텍처는 단일 쉐이더 이후는 크게 3세대가 된다. 1세대 Tesla (테슬라) 계 아키텍쳐가 GeForce 8 (G8x)과 확장된 GeForce 200 (GT2xx) 시리즈, 2세대 Fermi (페르미) 아키텍처가 GeForce 400 (GF1xx)와 GeForce 500 (GF11x) 시리즈 . Kepler는 3 세대가 된다. Tesla 아키텍처와 Fermi 아키텍처는 크게 다르지만, 그래도 시작 부분에서 언급한 긴 파이프 라인과 하드웨어 스케줄러 양대 특징은 공통이었다.

 그런데 Kepler는 프로세서 아키텍처의 근본에 관한 이 부분이 크게 변화되었다. 즉, Kepler 세대는 NVIDIA 아키텍처가 지금까지 없을 만큼 변혁되었다. 그리고 이 변혁은 Tesla / Fermi 계로 부터 Kepler 계로 설계 사상의 근본 부분이 바뀐 것을 의미하고 있다. 그것은 성능 최적화 설계에서 성능 효율 최적화로 설계 사상의 변화라고 NVIDIA는 설명한다.

Kepler와 Fermi 아키텍처 비교




 자세한 내용은 이후의 기사에서 설명하지만, NVIDIA가 기본적으로 행한 두 가지 대책이다. 하나는 컨트롤 로직의 오버 헤드를 줄이고, 다른 하나는 파이프 라인 단수 감소에 의한 파이프 라인 오버 헤드 감소. 이 두 가지가 기존 NVIDIA GPU의 성능 효율을 낮추고 있던 것이 Kepler 아키텍처에 의해 입증되었다.

 결과적으로 다이 (반도체 본체)의 컨트롤 로직의 비율이 크게 낮아져 그만큼을 연산 유닛에 할애했다. GK104은 트랜지스터 수가 20% 정도 밖에 증가하지 않았는데, GF110의 3배의 연산 유닛을 탑재 할 수 있는 이유 중 하나는 이것이다. 또한 Kepler에서는 파이프 라인 단수 감소의 결과 개별 연산 유닛의 소비 전력이 크게 떨어졌다. 따라서 연산 유닛을 늘려도 전력 향상이 억제되었다.

 물론 제조 공정이 TSMC의 40nm에서 28nm로 이행한 효과도 있다. TSMC의 28nm 공정은 "High-K Metal-Gate (HKMG) '를 채용한 것으로, 누설 전류 (Leakage)가 어느 정도 억제 될 수 있다. 그러나 NVIDIA는 비록 동일한 공정 기술이었다 해도, Kepler가 퍼포먼스 효율이 훨씬 높다고 아키텍처 측면의 혁신을 강조하고 있다.



명령 스케줄링의 일부를 CPU 측의 컴파일러로 이행


 Kepler와 Fermi에서는 명령 스케줄링의 근본이 다르다. Kepler는 Fermi까지 NVIDIA GPU에서 하드웨어에 의한 복잡한 명령 스케줄링 기구를 간소화하고 드라이버 소프트웨어 (컴파일러) 기반의 프리 스케줄링으로 전환했다. 지금까지, NVIDIA GPU의 프로세서 단위 인 "SM (Streaming Multiprocessor)"안에 있는 명령 유닛이 하드웨어로 전부 명령 스케줄링을 해 왔다. 레지스터 스코어보딩에 의해 레지스터를 모니터링 하여 데이터가 타당하면 명령에서 실행하는 구조다. 이 구조는 활성 스레드 수가 증가함에 따라 막대한 자원을 필요로 하게 된다.



Kepler의 명령 스케줄링



 Kepler에서는 이 구조를 일신. 스코어보드에서 관리하는 명령은 로드와 텍스처 페치와 같은 긴 지연 명령으로 제한했다. 그 이외의 명령은 CPU 측에서 돌리는 드라이버 소프트웨어 컴파일러의 사전 예약으로 전환하기로 했다. 연산의 레이턴시는 각 GPU 아키텍처로 정해져 있다. 이는 컴파일러는 커널 명령을 GPU 네이티브 명령으로 변환 할 때 지연 시간 정보와 명령간의 의존성 정보를 네이티브 명령에 묻어 버린다. GPU 하드웨어 측면은 그것을 확인하고 실행할 수 있는 타이밍에서 명령을 선택 할 뿐이다.

 이 구조로, NVIDIA는 GPU의 명령 스케줄링 하드웨어를 단번에 간소화 했다. 말하자면 GPU에 시키고 있던 것을 CPU로 돌리는 것으로, GPU를 가볍​​게 한 것이다. 물론 부작용도 있어, Kepler 세대가, CPU 측에서 돌리는 드라이버가 어느정도 무거워진다. 그러나 GPU는 코드 크기가 상대적으로 작고, 데이터 크기가 거대하기 때문에 CPU 측의 코드 스케줄링이 늘어도 전력 효율적으로 알맞다 평가한 것으로 생각한다.

 여기서 재미있는 것은, 라이벌 AMD가 기존의 VLIW (Very Long Instruction Word) 코어의 GPU에서는 드라이버 컴파일러 소프트웨어 스케줄링을 행하고 있던 것을 새로운 GCN (Graphics Core Next)에서 스코어보드에 의한 하드웨어 예약으로 전환한 것이다. 명령 스케줄링에 관해서는 마치 AMD와 NVIDIA의 관계가 바뀐 것으로 보인다.


기존의 AMD GPU의 VLIW5 아키텍처 명령 발행



딥 파이프 라인의 오버 헤드를 극적으로 감소


 NVIDIA는 G80 설계시 쉐이더 연산 코어의 파이프 라인을 깊게하는(길게) 것으로, 쉐이더 배속으로 동작시키는 설계를 했다. Fermi 계도 설계를 계승하고 있으며, 파이프 라인 단수가 깊고, FO4 (Fanout-Of-4) 딜레이가 상당히 적은 고주파수 동작이 가능하게 되어 있다. CPU에 비유하면 Pentium 4의 NetBurst 아키텍처인 고주파 발상으로 만들어져 있었다. 따라서 NVIDIA GPU는 쉐이더 프로세서 코어를 1.6GHz 이상의 높은 주파수로 돌릴 수 있었다. 이전 GPU 코어에 대해 파이프 라인 단수를 2배 정도 늘린 것으로 보인다. (지포스 400,500 시리즈는 쉐이더 클럭이 높죠. 이러한 방향의 제품들 펜티엄4, 페르미,불도저의 공통된 특징은? 전력과 발열이 크다. 펜티엄4 ALU는 2배속으로 작동. 케플러도 그렇고, 콘로도 펜4와 반대로 만들고 전력/성능이 향상됐다는 공통점이 있죠. 절대성능 역시 향상 됐구요. 같은 65나노 펜티엄D 듀얼코어 프레슬러와 비교해도 그렇고, 이전 공정에서도 콘로의 조상격인 베니어스,도선,요나와 같은 공정의 펜4를 비교해도 그렇죠.)


파이프 라인이 2배로 깊은 경우


 이 아키텍처 선택에는, 단위 다이 면적당 성능을 높일 수 있다는 장점이 있다. 하지만 단점도 있다. 파이프 라인을 세분화는 것으로 래치 (Latch) 회로가 늘고 배 클럭으로 작동하기 때문에 전력 소비가 증가하고 성능 / 전력이 저하된다. NetBurst가 안고 있던 것이 이 문제다.

 NVIDIA는 Kepler 아키텍처의 설명에서 래치 증대 문제를 알리며, Kepler는 파이프라인 단수를 크게 줄여, 파이프 라인 안의 래치를 줄였다고 했다. 아래의 그림이 NVIDIA의 설명을 바탕으로 일으킨 Kepler와 Fermi의 파이프 라인 아키텍처의 차이 개념도다.


래치회로는 아래 글을 참고

[분석정보] CPU 고속화의 기본 수단 파이프라인 처리의 기본 1/2




Kepler의 파이프 라인


 Kepler는 Fermi에 비해 파이프 라인 단수는 절반 정도 동작 주파수의 상한도 그만큼 떨어진다. 따라서 NVIDIA는 Kepler 세대에서는 코어 수를 늘리는 것으로 성능의 균형을 잡겠다는 발상에 있다. 코어 수를 2배로 늘리면 다이 면적은 1.8 배 (2 배되지 않는 것은 래치가 줄어들기 때문에)로 늘어난다. CPU는 사실 래치와 클러킹 전력 소비의 비중이 매우 크다. 따라서 전력 소비는 1개의 고주파 코어보다 2개의 저주파 코어 쪽이 줄어든다. Kepler에서 CUDA 코어 수가 증가해도 전력이 낮은 것은 이러한 이유에 따른다.

 또한 Kepler는 Tesla / Fermi 프로세서 코어의 배속 동작을 종료했다. GPU 전체 (I / O를 제외하고) 같은 동작 주파수에서 동작한다. 이것은 서로 다른 클럭 레인 간의 조정이 불필요하다는 것을 의미한다.



크게 확장된 SM (Streaming Multiprocessor)의 내부


 Kepler에서는 이러한 아키텍처면에서 대폭적인 개혁이 이루어졌기 때문에, GPU 코어의 구성도 크게 바뀌었다. NVIDIA GPU는 SM (Streaming Multiprocessor)을 프로세서의 최소 단위로 구성한다. 이 SM이 Kepler는 크게 확장되어 "SMX"라는 구조로 재편되었다. X는 일반적으로 익스트림의 약자이므로, SM Extreme을 의미 할 가능성이 높다. SMX의 큰 특징은 크기가 커지고, 안에 갖춘 CUDA 코어 수가 급증하고, 명령 발행 수가 크게 늘어난 것이다. Fermi 세대 GPU의 SM과 비교하면 차이를 잘 알 수있다.


Kepler의 SMX 블록 다이어그램


GF100의 Streaming Multiprocessor


GF104의 Streaming Multiprocessor



 기존의 Fermi의 SM은 소규모 였지만, Kepler의 SMX는 유닛 수가 많다. Kepler도 Fermi도 CUDA 코어는 16유닛씩 1그룹으로 정리되어 있다. 이것은 NVIDIA GPU의 실행 단위가 32 쓰레드를 묶은 WARP이기 때문이다. 32 스레드의 WARP에 같은 명령을 실행하는 이 기본은 Kepler도 변하지 않았다. 16 유닛 그룹으로, 2사이클 (명령에 따라 2사이클 이상)에 걸쳐, 32 스레드의 WARP의 명령 발행을 행한다.

 Fermi에서는 SM에서 CUDA 코어 x16 그룹이 GeForce GTX 480 (GF100) / GeForce GTX 580 (GF110) 계에서는 2 그룹, GeForce GTX 460 (GF104) / GeForce GTX 560 Ti (GF114)은 3 그룹이다. 반면, Kepler에서는 CUDA 코어 x16 그룹이 12개나 배치되어 있다.

 이 밖에 초월 함수 등을 실행하는 Special Function Unit (SFU)의 x16 유닛 그룹이 2개, 메모리에서 데이터의 읽기 / 쓰기를 수행하는 로드 / 스토어 유닛의 x16 유닛 그룹이 2 개 구비되어 있다 . 이러한 연산과 메모리 계의 유닛 그룹만으로도 합계 16 그룹이다. 이 밖에 텍스처 유닛이 16 유닛 배치되어있다.

 16+ 알파의 실행 유닛 그룹에 Kepler의 SMX의 명령 유닛은 최대 8 명령 발행이다. 반 수의 명령 발행 수로 실행 유닛을 풀 가동시킬 수 있는 것은 실행 유닛 측이 WARP 단위로 실행되기 때문에 2사이클에 한번밖에 명령을 받아 들일 수 없기 때문이다.

 Kepler의 SMX의 규모를 크게 할 수 있었던 이유 중 하나는 명령 스케줄링 하드웨어가 간소화 됐기 때문이다. 오버 헤드를 줄이고, 명령 유닛을 늘려도 조달 할 수 있게 되었다. 또한 Kepler SMX에서는 레지스터 수는 2배로 인플라이트로 제어 가능한 WARP 수는 64WARP으로 증가하고 있다. 그러나 상대적으로 로드 / 스토어에 대한 연산 유닛의 비율은 증가하고 있다. 메모리 대역에 대한 연산 성능 비율 bytes / flops 비율도 떨어지고 있어 기존보다 더 레지스터 간의 연산의 비율을 높일 필요가 있다고 추측된다. 덧붙여서, 메모리 계층의 구성은 Fermi에서 변함 없다.


Kepler의 메모리 계층


 또한 SMX는 테셀 레이터를 포함 지오메트리 파이프 라인 계의 고정 기능 유닛 군 "PolyMorph Engine (폴리 모프 엔진)"이  탑재되어 있다. 이 처리량도 2배 향상되었다고 NVIDIA는 설명하고 있다.




GPU 전체 구조는 Fermi 세대의 상속


 NVIDIA GPU는 멀티 코어적인 구성을 취하고 있어 GPU 전체 하위 GPU 코어인 여러 "GPC (Graphics Processing Cluster)"로 구성되어 있다. 그래픽 처리에서는 각각의 GPC가 구분된 지역의 렌더링을 담당한다. 이 구성 자체는 Kepler도 Fermi도 마찬가지다 SM이 SMX로 대형화 한 것으로, 꽤 내용이 변화하고 있다.


Kepler GK104 전체도



GF104의 전체도


GF100의 전체도



 기존의 Fermi에서는 각 GPC 안에 4개의 SM이 담겨 있었다. 각 SM에 32 개의 CUDA 코어가 배치되어 있기 때문에 GPC 전체 128 개의 CUDA 코어 구성된다. 반면, Kepler는 2 개의 큰 SMX이 들어갈 수 있으며, CUDA 코어는 각 SMX 192 개로 총 384 개가 된다. SMX 측에 테셀레이터가 있고, GPC 측에 래스터 라이저가 배치된 구성도 Fermi 이후 변경되지 않았다.

 각 SMX는 기가 스레드 엔진에서 작업이 분배된다. 그래픽 이외의 컴퓨팅 처리의 경우, 개별 SM에 각각 다른 커널 (GPU가 실행하는 프로그램)을 지정할 수있다. 각 SMX는 양방향 크로스바 스위치로 4개의 메모리 클러스터에 연결되어 있다. 각 메모리 클러스터는 각각 64 bit의 메모리 인터페이스를 가지며, 128KB의 L2 캐시가 구비되어있다. GK104는 4 클러스터의 합계로 L2 캐시는 512KB가 된다. L2 캐시와 메모리 컨트롤러는 ROP (Rendering Output Pipeline) 장치도 연결되어있다.



쉐이더 코어 이외에도 확장 점이 많은 GeForce GTX 680 (GK104)


 이러한 프로세서 아키텍처면에서의 특징과 더불어 GK104에서는 다양한 특징을 받아 그 중에는 그래픽 처리를 향상시키는 것도 있다.

 GK104은 디스플레이 파이프 라인이 확장되어 이미지 출력을 최대 4 디스플레이까지 지원한다. 또한 H.264 하드웨어 비디오 인코더 "NVENC "가 구현되었다. 최근 CPU와 마찬가지로 GPU의 동작 주파수를 끌어 올리는 부스트 기능도 갖춘다. 또한 화면의 찢어짐을 제거 Adaptive VSync 기술을 탑재 렌더링 이미지 품질을 향상 새로운 안티 앨리어싱 모드 "TXAA"를 지원한다 (쉐이더 구현이므로 이전 GPU에서 지원된다). 호스트 인터페이스는 PCI Express Gen3를 구현. 또한 데스크톱 버전뿐만 아니라 노트북 PC 버전까지 같은시기에 투입된다.





GPU 부스트는 CPU 터보 부스트와 비슷하다. 낮은 부하에서 칩의 소비 전력이 낮은 경우 동작 클럭을 높이는 기능이다. 전력이 TDP (Thermal Design Power : 열 설계 전력)에 미달하는 경우 모든 GPU의 클럭을 올린다.

 GK104의 기본 클럭은 1,006MHz 이지만 전형적인 응용 프로그램에서 1,058MHz까지 클럭을 끌어 올린다. 기본 부스트 폭은 5% 정도에 불과하지만 많은 응용 프로그램에서 1.1GHz 또는 그 이상으로 인상 될 경우가 있다고 한다. 여기에 더해 GPU는 중요한 오버 클럭에 대해서도 GPU 부스트에 씌우는 형태로 지원한다.





 Kepler 아키텍처를 개관하면 Kepler가 NVIDIA의 전환점이 되는 대개혁임을 알 수 있다. 설계 사상을 성능 / 전력의 최적화로 돌아선 것으로, 높은 성능을 기대할 수 있는 구조가 되었다. 이것은 공정의 미세화가 진행되어 성능 / 다이 영역에 너무 집중 할 필요가 없는 것과도 관련있다.

 NVIDIA는 이번 하이엔드 80 번대에 해당하는 GeForce GTX 680 브랜드에 본래라면 미드 레인지를 나타내는 4 시리즈의 코드명 GK104의 다이 (반도체 본체)을 사용했다. Fermi 세대에서는 미드 레인지 성능 GPU 인 GeForce GTX 560 Ti가 GF114에서 같이 끝나는 4의 코드 네임이었다. 이 클래스는 300 제곱 mm 전후의 다이 크기로 256-bit 폭 메모리 인터페이스의 계열이다.

 이것은 Kepler 계에서 더 상위의 GK100를 예상한다. 400 제곱 mm 이상의 다이 크기에서 384-bit 폭 이상의 메모리 인터페이스 제품 카테고리이다. HPC 시장에서는 이번 GeForce GK104보다 메모리 대역폭이 더 넓고 내장 메모리도 많고 더 컴퓨팅을 위한 제품이 요구되고 있다고 추측된다. 다만 향후는 HPC 및 PC 그래픽 기본 아키텍처는 공통화하면서도 제품으로의 분화는 진행될지도 모른다.



2012년 3월 22일 기사



[분석정보] NVIDIA 차세대 GPU 아키텍처 Fermi를 발표



[정보분석] 엔비디아 세계 최다 트렌지스터 칩 GK 110 공개