Kepler (微架構)

克卜勒（Kepler）是英偉達在2012年4月發布的圖形處理器微架構的代號，是費米架構的繼承者。Kepler是英偉達第一款專注於節能的微架構。大多數GeForce 600 系列、GeForce 700 系列和部分GeForce 800 系列顯卡基於Kepler架構，均使用28納米製程。Kepler架構也應用於Tegra K1 SOC上的圖形處理器GK20A以及NVIDIA Quadro Kxxxx系列顯卡、Quadro NVS 510顯卡和NVIDIA Tesla計算卡。Kepler的後繼者為麥斯維爾，並且和Maxwell架構一併用於GeForce 700 系列和GeForce 800 系列顯卡。

Kepler架構的命名來自17世紀科學革命使其的著名德國數學家約翰內斯·克卜勒（Johannes Kepler）。

## 概覽

在Kepler的前一代架構Fermi中，英偉達主要專注於提升計算與曲面細分的性能。然而在Kepler架構中，英偉達轉向了提升效率、可編程性與性能。效率的提升來自採用了統一的GPU時鐘、簡化的靜態指令調度和更加優化的每瓦性能。儘管廢棄過去GPU中採用的著色器時鐘需要額外的核心來達到高性能，但通過這麼做依然得以使效率提升。這不僅是因為新的核心更加節能（根據英偉達的數據，兩個Kepler核心的功耗相當於一個Fermi核心的功耗的90%），同時也是因為統一GPU時鐘使得這部分的功耗降低了50%。

可編程性是通過引進Hyper-Q技術、動態並行和多個新的Compute Capabilities 3.x功能實現的。通過這些改進使得在GK系列GPU中實現GPU的高利用率和簡化的代碼管理，從而使得針對Kepler系列GPU的編程更加靈活。

在性能上，額外的執行資源（更多的CUDA核心、寄存器和緩存）以及Kepler架構支持的6 GHz記憶體速度使得Kepler架構的性能較過去的英偉達GPU顯著增強。

## 功能

GK系列GPU包含了來自老的Fermi架構的和新的Kepler架構的功能。但Kepler架構的GPU包含了以下額外的基本功能：

- PCI Express接口
- DisplayPort 1.2
- HDMI 1.4a 4K x 2K影片輸出
- NVIDIA PureVideo硬體解碼加速（最大解碼 4K x 2K H.264）
- 硬體 H.264 編碼加速模塊（NVENC）
- 支持最大 4 路獨立的二維顯示器，或3路環繞/3D顯示器（NV Surround）
- 下一代流處理器（SMX）
- Polymorph-Engine 2.0
- 簡化指令調度器
- Bindless Textures
- CUDA版本3.0到3.5
- GPU Boost（在GK110上升級到了2.0）
- TXAA支持
- 台灣積體電路製造28 nm製程
- 新的shuffle指令
- 動態並行
- Hyper-Q（Hyper-Q的MPI功能只有Tesla支持）
- Grid管理單元
- NVIDIA GPUDirect（GPU Direct的RDMA功能只有Tesla支持）

### 下一代流處理器（SMX）

Kepler架構使用了新的流處理器架構「SMX」。SMX因為採用了統一的GPU時鐘而成為了Kepler架構節能的主要原因。儘管採用了統一時鐘的SMX表現出的效果為多個低主頻的Kepler的CUDA核比多個高主頻的Fermi的CUDA核的功耗低90%，Kepler架構需要更多的處理單元來在每個時鐘執行一組wrap（線程束）。將每組CUDA陣列的數量從16個翻倍至32個解決了wrap的執行問題。同時SMX前端也將wrap的調度器和分配器翻倍，而寄存器堆也被翻倍到64K條來滿足額外的執行單元的需要。面對晶片面積暴增的風險，SMX的PolyMorph Engine並沒有也隨其他部分翻倍，而是升級到了2.0版本使得它能夠在更少的周期內地繪製多邊形。專用的雙精度CUDA核心被用來彌補Kepler CUDA核心為了節省晶片面積而放棄的雙精度計算能力。英偉達在SMX上做的改進帶來了GPU在性能和效率上的提升。GK110上的48KB材質緩存可被用於計算負載。在計算負載中，材質緩存變為了一個只讀數據緩存，專供非對齊的記憶體訪問負載使用。同時，錯誤糾正功能也使得需要ECC的負載能更加安全地運行。在GK110中每個線程的寄存器數也翻倍到了255個。

### 簡化指令調度器

額外的晶片面積是通過將複雜的硬體調度器簡化為軟體調度器帶來的。通過軟體調度，wraps的調度被放在了編譯階段。同時因為簡化後GPU的計算流水線的延遲固定，英偉達在線程級並行之外也實現了指令級並行。由於指令是被靜態調度的，通過採用固定延遲的指令可以實現一致性，且靜態調度的編譯器降低了一層複雜度。

### GPU Boost

GPU Boost是一個基本類似於CPU睿頻的新技術。GPU總是能以一個最低的頻率運行，稱之為「基礎頻率」。這個頻率是通過測試在最高負載下也能保持在TDP以內的方法得出的。然而當負載較低時，將存在一定空間來提升頻率而不超過TDP。這種情況下，GPU Boost將會一級級逐漸提高GPU頻率，直到GPU達到了一個預設的功耗（默認為170W）。通過這種方法，GPU將會動態提高或降低自己的頻率，從而使得它能夠在TDP規範哪提供最大的速度。

預設功耗和每一級提升的頻率均可通過第三方工具調整，並且提供了給基於Kepler架構的GPU超頻的方法。

### Microsoft Direct3D支持

基於Fermi和Kepler架構GPU的GeForce 600系列支持Direct3D 11.0規範。英偉達原本聲稱Kepler架構完整支持DirectX 11.1，包括Direct3D 11.1。

然而以下「Modern UI」 Direct3D 11.1功能並不被支持：

- 目標獨立光柵化（僅限2D渲染）
- 16xMSAA光柵化（僅限2D渲染）
- 正交線渲染模式
- 非像素著色階段的UAV（Unordered Access View）

根據微軟的定義，Direct3D feature level 11_1必須完備，否則無法執行Direct3D 11.1 Kepler架構內置的Direct3D功能和採用Fermi架構的GeForce 400系列顯卡一致

### 下一代Microsoft Direct3D支持

基於Kepler架構的GeForce 600/700系列顯卡支持Direct3D 12 feature level 11_0。

### TXAA支持

TXAA是英偉達設計的新的抗鋸齒技術，需要遊戲引擎直接實現在其中，且僅限於Kepler系列GPU。TXAA基於多重採樣抗鋸齒和定製的濾鏡。TXAA被用來解決一個遊戲中的關鍵問題：閃爍或temporal aliasing。TXAA通過柔化動態場景來確保遊戲內的場景不包含任何的鋸齒和閃爍。

### Shuffle指令

在底層，GK110擁有額外的指令和操作來進一步提升性能。新的shuffle指令允許在一個wrap內的線程在不訪問記憶體的情況下共享數據，使得整個過程比原來的load/share/store方式更加迅速。原子操作也被重新設計使得原子操作的速度得以提升。同時還添加了一些原本只針對單精度浮點的操作的雙精度支持。

### Hyper-Q

Hyper-Q將GK110的硬體工作隊列從原本的唯一一個提升到32個。在Fermi架構中，有時唯一的工作隊列被占據時工作量其實並不夠讓每個流處理器都有工作。而擁有32個工作隊列，GK110在很多情形下可以使得原本空閒的SMX工作起來從而達到更高的利用率。Hyper-Q的這種特質還因為它能夠被更輕易地映射到MPI——一個常見的在高性能計算中使用的通訊接口——而被進一步增強。傳統的為多個處理器系統設計的基於MPI的演算法所面臨的錯誤依賴問題通過Hyper-Q得到了解決。通過增加MPI工作的數量，程式設計師將可以在不修改代碼的情況下應用Hyper-Q來提升算法性能。

### 動態並行

動態並行（Dynamic Parallelism）能夠使kernel（核函數）有能力分發其他kernel。在Fermi架構中，只有CPU可以分發kernel，因此增加了與CPU通信的開銷。而通過給kernel分配子kernel的能力，GK110可以既可以減少與CPU的通訊開銷，還可以讓CPU空下來去執行其他任務。

### Grid管理單元

為了能夠使用動態並行，GPU需要一個新的grid管理系統和分發控制系統。新的Grid管理單元（Grid Management Unit，GMU）管理grid的執行並決定它們執行的優先級。GMU可以暫停新的grid的分發、將grid放入隊列和終止grid直到它們準備好被執行。這樣，GMU將能夠提供支持運行如動態並行這樣強大的運行時的靈活性。

在Kepler架構中，CUDA Work Distributor（CWD）記憶著將要被分發的grid。新的CWD有能力分發32個活動的grid，較Fermi架構的CWD翻了一倍。Kepler架構的CWD與GMU通過一個雙向連接進行交互，使得GMU能夠暫停分發新的grid、待機和甚至終止grid直到CWD需要。GMU同時也有一個與SMX單元的單向連接使得用動態並行來添加新工作的grid能夠將新工作傳回給GMU進行排優先級和分發。如果添加新工作的kernel暫停了，GMU將會保持其休眠直到它依賴的工作完成。

### NVIDIA GPUDirect

NVIDIA GPUDirect是一項允許在同一台電腦或在網路中的多台伺服器的GPU可以在不需訪問CPU和系統記憶體的情況下交換數據的技術。GPUDirect的RDMA功能能夠使第三方設備如SSD、NIC和IB適配器等直接訪問同一台機器上多個GPU的記憶體，從而顯著降低經由MPI讀寫GPU記憶體的延遲。這項技術同時減輕了對系統記憶體帶寬的需求，並且使得GPU的DMA能夠空閒出來來執行其他CUDA任務。基於Kepler架構的GK110還支持包括P2P和GPUDirect for Video等GPUDirect功能。

### 影片解碼/編碼

#### NVENC

NVENC時英偉達的高效率固定編碼引擎，能夠解碼、預處理和編碼H.264內容。NVENC的輸入編碼僅限於H.264。然而彌補這塊短板的是NVENC可以編碼4096x4096的內容。

如同Intel的Quick Sync技術，NVENC的使用需要用到專有的API。然而英偉達並沒有計劃提供在CUDA內調用NVENC的方法。

## 性能

Kepler架構的GPU的理論單精度浮點運算能力以GFLOPS為單位大約為2 (操作每FMA指令每CUDA核心每指令周期) × CUDA核心數 × 核心速度（以GHz為單位）。值得注意的是和上代的Fermi架構一樣，Kepler架構不能像Tesla架構一樣通過雙發射MAD和MUL指令來提升處理性能。

基於Kepler架構的GK110/210 GPU的理論雙精度浮點性能大約為其單精度浮點性能的1/3。然而這個性能指標僅在專業級的NVIDIA Quadro、NVIDIA Tesla顯卡和高端的GeForce TITAN顯卡上提供。面向普通消費者的GeForce顯卡驅動限制了雙精度浮點性能到單精度浮點性能的1/24。GK10x的雙精度浮點性能也被類似地限制到了單精度浮點性能的1/24。

## 基於Kepler架構的晶片

- GK104
- GK106
- GK107
- GK110
- GK208
- GK210
- GK20A (圖睿)

## 基本資料

- 日語原文：Nvidia Kepler
- 發布日期：2012年4月
- 前任：費米
- 繼任：麥斯維爾
- 製造工藝：32納米製程