케플러 (마이크로아키텍처)

right|섬네일|건축물의 이름의 유래인 요하네스 케플러의 초상화
**케플러**(Kepler)는 엔비디아가 개발한 GPU 마이크로아키텍처의 코드명으로, 2012년 4월 소매 시장에 처음 출시되었으며 페르미 마이크로아키텍처의 후속작이다. 케플러는 에너지 효율에 중점을 둔 엔비디아 최초의 마이크로아키텍처였다. 대부분의 지포스 600 시리즈, 대부분의 지포스 700 시리즈, 일부 지포스 800M 시리즈 GPU가 케플러 기반이었으며, 모두 28&nbsp;nm 공정으로 제조되었다. 케플러는 SoC인 테그라 K1의 GPU 구성 요소인 GK20A, 쿼드로 Kxxx 시리즈, 쿼드로 NVS 510 및 테슬라 컴퓨팅 모듈에 사용되었다.

케플러는 맥스웰 마이크로아키텍처의 뒤를 이었으며 지포스 700 시리즈 및 지포스 800M 시리즈에서 맥스웰과 함께 사용되었다.

이 아키텍처는 17세기 과학 혁명의 핵심 인물이자 독일의 수학자인 요하네스 케플러의 이름을 따서 명명되었다.

## 개요
섬네일|지포스 GTX 타이탄 카드에 내장된 GK110 A1 GPU의 다이 샷
엔비디아 이전 아키텍처의 목표는 컴퓨트 및 테셀레이션 성능 향상에 중점을 둔 설계였다. 케플러 아키텍처에서는 효율성, 프로그래밍 용이성 및 성능에 초점을 맞추었다. 효율성 목표는 통합 GPU 클럭 사용, 단순화된 정적 명령어 스케줄링 및 와트당 성능 강조를 통해 달성되었다. 이전 GPU 설계에서 볼 수 있던 셰이더 클럭을 포기함으로써, 더 높은 성능 수준을 달성하기 위해 추가 코어가 필요함에도 불구하고 효율성이 향상되었다. 이는 코어가 더 전력 효율적이기 때문일 뿐만 아니라(엔비디아 수치에 따르면 케플러 코어 2개가 페르미 코어 1개 전력의 90%를 사용), 통합 GPU 클럭 방식 변경은 해당 영역에서 전력 소비를 50% 감소시킨다.

프로그래밍 용이성 목표는 케플러의 하이퍼-Q, 동적 병렬 처리 및 다수의 새로운 컴퓨트 케이퍼빌리티 3.x 기능을 통해 달성되었다. 이를 통해 GK GPU는 더 높은 GPU 활용도와 단순화된 코드 관리를 달성하여 케플러 GPU 프로그래밍의 유연성을 높일 수 있었다.

마지막으로 성능 목표는 추가 실행 리소스(더 많은 CUDA 코어, 레지스터 및 캐시)와 케플러가 7 GHz 메모리 클럭 속도를 달성할 수 있는 능력으로 달성되었으며, 이는 이전 엔비디아 GPU에 비해 케플러의 성능을 향상시킨다.

## 기능
GK 시리즈 GPU는 이전 페르미 세대와 새로운 케플러 세대의 기능을 모두 포함한다. 케플러 기반 모델은 다음 표준 기능을 추가한다.
* PCI 익스프레스 3.0 인터페이스
* 디스플레이포트 1.2
* HDMI 1.4a 4K x 2K 비디오 출력
* 퓨어비디오 VP5 하드웨어 비디오 가속(최대 4K x 2K H.264 디코딩)
* 하드웨어 H.265 디코딩
* 하드웨어 H.264 인코딩 가속 블록 (NVENC)
* 최대 4개의 독립적인 2D 디스플레이 또는 3개의 스테레오스코픽/3D 디스플레이(NV 서라운드) 지원
* 차세대 스트리밍 멀티프로세서(SMX)
* 폴리모프-엔진 2.0
* 단순화된 명령어 스케줄러
* 바인드리스 텍스처
* CUDA 컴퓨트 케이퍼빌리티 3.0 ~ 3.5
* GPU 부스트 (GK110에서 2.0으로 업그레이드)
* TXAA 지원
* TSMC에서 28&nbsp;nm 공정으로 제조
* 새로운 셔플 명령어
* 동적 병렬 처리
* 하이퍼-Q (하이퍼-Q의 MPI 기능은 테슬라 전용)
* 그리드 관리 장치
* 엔비디아 GPUDirect (GPU Direct의 RDMA 기능은 테슬라 전용)

### 차세대 스트리밍 멀티프로세서 (SMX)
섬네일|GTX 780 PCB 및 다이 - 초기 680보다 GK110과 더 유사한 후기 개정 케플러
케플러는 SMX라고 불리는 새로운 스트리밍 멀티프로세서 아키텍처를 사용한다. CUDA 실행 코어 수는 16개의 SM당 32개에서 8개의 SMX당 192개로 증가했다. 레지스터 파일은 각 SMX당 65,536 x 32비트로 두 배로 늘었지만 전체 비율은 낮아졌다. 이러한 변경 사항 및 다른 타협점에도 불구하고, 전체 CUDA 코어 수가 3배 증가하고 클럭이 증가했음에도 불구하고(680 대 페르미 580), 대부분의 작업에서 실제 성능 향상은 3배 미만이었다. 전용 FP64 CUDA 코어가 이전처럼 FP32 코어 2개를 단일 단위로 취급하는 대신 사용되었으며, 소비자 모델에는 매우 적은 수만 포함되어 FP32에 비해 1/24의 속도로 FP64 계산이 이루어졌다.

HPC 모델인 GK110/210에서는 SMX 수가 제품에 따라 13~15개로 증가했으며, 더 많은 FP64 코어가 포함되어 컴퓨트 비율이 FP32의 1/3까지 증가했다. GK110에서는 스레드당 레지스터 제한이 페르미보다 4배 증가하여 255가 되었지만, 이는 여전히 레지스터의 절반만 사용하는 스레드가 각 SMX의 1/4로 병렬화될 수 있도록 할 뿐이다. 동시에 출시된 GK210은 레지스터 제한을 512로 늘려 이러한 높은 레지스터 압력 상황에서의 성능을 향상시켰다. 이전 세대에서 읽기 전용 버퍼로 컴퓨트에 이미 사용되었던 텍스처 캐시는 크기가 증가하고 데이터 경로가 최적화되어 이 방법을 사용할 때 더 빠른 처리량을 제공한다. 레지스터 파일을 포함한 모든 메모리 레벨도 단일 비트 ECC이다.

또 다른 주목할 만한 특징은 페르미 GPU는 한 번에 하나의 CPU 스레드만 액세스할 수 있었지만, HPC 케플러 GPU는 다중 스레딩 지원을 추가하여 코어 수가 많은 프로세서가 32개의 연결을 열고 컴퓨트 성능을 더 쉽게 포화시킬 수 있도록 했다.

### 단순화된 명령어 스케줄러
데이터 위험 방지를 처리하는 복잡한 하드웨어 블록을 제거하여 추가적인 다이 공간 감소 및 전력 절약을 달성했다.

### GPU 부스트
GPU 부스트는 CPU의 터보 부스트와 대략적으로 유사한 새로운 기능이다. GPU는 항상 "베이스 클럭"이라고 하는 최소 클럭 속도로 실행되도록 보장된다. 이 클럭 속도는 최대 부하에서도 GPU가 TDP 사양 내에 머무르도록 보장하는 수준으로 설정된다. 그러나 부하가 낮을 때는 TDP를 초과하지 않고 클럭 속도를 높일 여지가 있다. 이러한 시나리오에서는 GPU 부스트가 단계적으로 클럭 속도를 점차 높여 GPU가 기본적으로 170W의 사전 정의된 전력 목표(680 카드 기준)에 도달할 때까지 높인다. 이러한 접근 방식을 통해 GPU는 동적으로 클럭을 올리거나 내려 TDP 사양 내에 머무르면서 가능한 최대 속도를 제공한다.

전력 목표 및 GPU가 취할 클럭 증가 단계의 크기는 모두 타사 유틸리티를 통해 조정 가능하며 케플러 기반 카드를 오버클럭하는 수단을 제공한다.

### 마이크로소프트 Direct3D 지원
지포스 600 시리즈의 엔비디아 페르미 및 케플러 GPU는 Direct3D 11.0 사양을 지원한다. 엔비디아는 원래 케플러 아키텍처가 Direct3D 11.1 경로를 포함하는 전체 DirectX 11.1을 지원한다고 밝혔다. 그러나 다음 "모던 UI" Direct3D 11.1 기능은 지원되지 않는다.

* 대상 독립 래스터화 (2D 렌더링만).
* 16xMSAA 래스터화 (2D 렌더링만).
* 직교선 렌더링 모드.
* 비-픽셀 셰이더 단계에서의 UAV (비정렬 액세스 뷰).

마이크로소프트의 정의에 따르면, Direct3D 피처 레벨 11_1은 완전해야 하며, 그렇지 않으면 Direct3D 11.1 경로는 실행될 수 없다.
케플러 아키텍처의 통합 Direct3D 기능은 지포스 400 시리즈 페르미 아키텍처의 기능과 동일하다.

### 다음 마이크로소프트 Direct3D 지원
지포스 600/700 시리즈의 엔비디아 케플러 GPU는 Direct3D 12 피처 레벨 11_0을 지원한다.

### TXAA 지원
케플러 GPU 전용인 TXAA는 게임 엔진에 직접 구현되도록 설계된 엔비디아의 새로운 안티앨리어싱 방법이다. TXAA는 MSAA 기술과 사용자 정의 해상도 필터를 기반으로 한다. 이는 깜박임 또는 시간적 앨리어싱으로 알려진 게임 내 주요 문제를 해결하기 위해 설계되었다. TXAA는 움직이는 장면을 부드럽게 하여 게임 내 모든 장면이 앨리어싱 및 깜박임 없이 깨끗하게 보이도록 한다.

### 셔플 명령어
GK110은 성능을 더욱 향상시키기 위해 소수의 명령어를 추가했다. 새로운 셔플 명령어를 통해 워프 내의 스레드가 데이터를 공유할 수 있게 되었는데, 이는 이전에는 두 번의 지역 메모리 액세스가 필요했던 저장 및 로드 작업을 한 번의 명령으로 완료하여 지역 데이터 저장을 사용하는 것보다 약 6% 더 빠른 프로세스를 제공한다. 원자적 연산도 개선되어 일부 명령어의 속도가 9배 증가했으며, 더 많은 원자적 64비트 연산, 즉 min, max, and, or, xor가 추가되었다.

### 하이퍼-Q
하이퍼-Q는 GK110 하드웨어 작업 대기열을 1개에서 32개로 확장한다. 이는 작업 대기열이 하나뿐이었던 페르미가 때때로 유휴 상태에 있을 수 있다는 점이다. 즉, 모든 SM을 채울 만큼 충분한 작업이 대기열에 없었다. 32개의 작업 대기열을 갖는 GK110은 많은 시나리오에서 유휴 SMX에 다른 작업 스트림을 배치할 수 있어 더 높은 활용도를 달성할 수 있다. 하이퍼-Q의 단순한 특성은 HPC에서 자주 사용되는 일반적인 메시지 전달 인터페이스인 MPI에 쉽게 매핑된다는 사실로 더욱 강화된다. 원래 다중 CPU 시스템을 위해 설계되었지만 잘못된 의존성으로 인해 병목 현상이 발생했던 레거시 MPI 기반 알고리즘이 이제 해결책을 갖게 되었다. MPI 작업 수를 늘림으로써 이러한 알고리즘에 하이퍼-Q를 사용하여 코드를 변경하지 않고도 효율성을 향상시킬 수 있다.

### 동적 병렬 처리
동적 병렬 처리 능력은 커널이 다른 커널을 디스패치할 수 있도록 하는 것이다. 페르미에서는 CPU만 커널을 디스패치할 수 있었는데, 이는 CPU로 다시 통신해야 하는 일정량의 오버헤드를 유발했다. 커널에 자체 자식 커널을 디스패치할 수 있는 능력을 부여함으로써 GK110은 CPU로 다시 돌아가지 않아 시간을 절약하고, 그 과정에서 CPU를 다른 작업을 처리할 수 있도록 해방시킨다.

### 그리드 관리 장치
동적 병렬 처리를 활성화하려면 새로운 그리드 관리 및 디스패치 제어 시스템이 필요하다. 새로운 그리드 관리 장치(GMU)는 실행될 그리드를 관리하고 우선순위를 지정한다. GMU는 새로운 그리드 디스패치를 일시 중지하고 보류 중이거나 중단된 그리드가 실행될 준비가 될 때까지 대기열에 넣어 동적 병렬 처리와 같은 강력한 런타임을 활성화하는 유연성을 제공한다. 케플러의 CUDA 작업 분배기는 디스패치할 준비가 된 그리드를 보유하며 32개의 활성 그리드를 디스패치할 수 있으며, 이는 페르미 CWD 용량의 두 배이다. 케플러 CWD는 GMU와 양방향 링크를 통해 통신하여 GMU가 새로운 그리드 디스패치를 일시 중지하고 필요할 때까지 보류 중이거나 중단된 그리드를 유지할 수 있도록 한다. GMU는 또한 케플러 SMX 장치와 직접 연결되어 동적 병렬 처리를 통해 GPU에서 추가 작업을 시작하는 그리드가 새로운 작업을 우선순위를 지정하고 디스패치하기 위해 GMU로 다시 보낼 수 있도록 한다. 추가 워크로드를 디스패치한 커널이 일시 중지되면 GMU는 종속 작업이 완료될 때까지 비활성 상태로 유지한다.

### 엔비디아 GPUDirect
엔비디아 GPUDirect는 단일 컴퓨터 내의 GPU 또는 네트워크를 통해 다른 서버에 위치한 GPU가 CPU/시스템 메모리를 통과할 필요 없이 직접 데이터를 교환할 수 있도록 하는 기능이다. GPUDirect의 RDMA 기능은 SSD, NIC, IB 어댑터와 같은 타사 장치가 동일 시스템 내의 여러 GPU의 메모리에 직접 액세스할 수 있도록 하여 GPU 메모리로/에서 MPI 메시지를 보내고 받는 대기 시간을 크게 줄인다. 또한 시스템 메모리 대역폭에 대한 요구를 줄이고 다른 CUDA 작업에 사용되는 GPU DMA 엔진을 확보한다. 케플러 GK110 다이는 피어 투 피어 및 GPUDirect 포 비디오를 포함한 다른 GPUDirect 기능도 지원한다.

### 비디오 압축/압축
#### [[엔비디아 NVDEC|NVDEC]]

#### [[엔비디아 NVENC|NVENC]]

NVENC는 코덱을 가져와 디코딩, 전처리 및 H.264 기반 콘텐츠를 인코딩할 수 있는 엔비디아의 전력 효율적인 고정 기능 인코더이다. NVENC 사양 입력 형식은 H.264 출력으로 제한된다. 그러나 NVENC는 제한된 형식을 통해 최대 4096x4096 인코딩을 지원할 수 있다.

인텔의 QuickSync처럼 NVENC는 현재 독점 API를 통해 노출되지만 엔비디아는 CUDA를 통해 NVENC 사용을 제공할 계획이다.

## 성능
케플러 GPU의 이론적인 단정밀도 처리 능력은 2 (주기당 CUDA 코어당 FMA 명령어당 연산) × CUDA 코어 수 × 코어 클럭 속도 (GHz)로 계산된다. 이전 세대 페르미와 마찬가지로 케플러는 테슬라가 할 수 있었던 이중 발행 MAD+MUL에 의한 처리 능력 증가의 이점을 얻을 수 없다.

케플러 GK110/210 GPU의 이론적인 배정밀도 처리 능력은 단정밀도 성능의 1/3이다. 그러나 이 배정밀도 처리 능력은 전문가용 쿼드로, 테슬라 및 고급 타이탄 브랜드 지포스 카드에서만 사용할 수 있으며, 소비자용 지포스 카드 드라이버는 성능을 단정밀도 성능의 1/24로 제한한다. 저성능 GK10x 다이도 유사하게 단정밀도 성능의 1/24로 제한된다.

## 케플러 다이
**케플러**

**케플러 2.0**
* GK208
* GK210
* GK20A (테그라 K1)

## 같이 보기
* 엔비디아 NVDEC

## 각주

분류:엔비디아 마이크로아키텍처
분류:그래픽스 마이크로아키텍처