開普勒（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。 可程式設計性是透過 Kepler 架構的 HyperQ 技術、動態並行和多個新的 Compute Capabilities 3x 功能實現的。透過這些得以在 GK 系列 GPU 中實現 GPU 的高利用率和簡化的程式碼管理，從而使得針對 Kepler 系列 GPU 的程式設計更加靈活。 在效能上，額外的執行資源（更多的 CUDA 核心、暫存器和快取）以及 Kepler 架構支援的 6 GHz 記憶體速度使得 Kepler 架構的效能較過去的英偉達 GPU 顯著增強。 功能 GK 系列 GPU 包含了來自老的 Fermi 架構的和新的 Kepler 架構的功能。但 Kepler 架構的 GPU 包含了以下額外的基本功能： PCI Express 介面 DisplayPort 12 HDMI 14a 4K x 2K 影片輸出 NVIDIA PureVideo 硬體解碼加速（最大解碼 4K x 2K H264） 硬體 H264 編碼加速模組（NVENC） 支援最大 4 路獨立的二維顯示器，或 3 路環繞 3D 顯示器（NV Surround） 下一代流處理器（SMX） PolymorphEngine 20 簡化指令排程器 Bindless Textures CUDA 版本 30 到 35 GPU Boost（在 GK110 上升級到了 20） TXAA 支援 臺灣積體電路製造 28 nm 製程 新的 shuffle 指令 動態並行 HyperQ（HyperQ 的 MPI 功能只有 Tesla 支援） Grid 管理單元 NVIDIA GPUDirect（GPU Direct 的 RDMA 功能只有 Tesla 支援） 下一代流處理器（SMX） The Kepler architecture employs a new Streaming Multiprocessor Architecture called SMX Kepler 架構使用了新的流處理器架構 SMX。SMX 因為採用了統一的 GPU 時鐘而成為了 Kepler 架構節能的主要原因。 儘管採用了統一時鐘的 SMX 表現出的效果為多個低主頻的 Kepler 的 CUDA 核比多個高主頻的 Fermi 的 CUDA 核的功耗低 90，Kepler 架構需要更多的處理單元來在每個時鐘執行一組 wrap（執行緒束）。將每組 CUDA 陣列的數量從 16 個翻倍至 32 個解決了 wrap 的執行問題。同時 SMX 前端也將 wrap 的排程器和分配器翻倍，而暫存器堆也被翻倍到 64K 條來滿足額外的執行單元的需要。面對芯片面積暴增的風險，SMX 的 PolyMorph Engine 並沒有也隨其他部分翻倍，而是升級到了 20 版本使得它能夠在更少的週期內地繪製多邊形。 專用的雙精度 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 110 規範。英偉達原本聲稱 Kepler 架構完整支援 DirectX 111，包括 Direct3D 111。 然而以下 Modern UI Direct3D 111 功能並不被支援： 目標獨立光柵化（僅限 2D 渲染） 16xMSAA 光柵化（僅限 2D 渲染） 正交線渲染模式 非畫素著色階段的 UAV（Unordered Access View） 根據微軟的定義，Direct3D feature level 11_1 必須完備，否則無法執行 Direct3D 111 Kepler 架構內建的 Direct3D 功能和採用 Fermi 架構的 GeForce 400 系列顯示卡一致 下一代 Microsoft Direct3D 支援 基於 Kepler 架構的 GeForce 600700 系列顯示卡支援 Direct3D 12 feature level 11_0。 TXAA 支援 TXAA 是英偉達設計的新的抗鋸齒技術，需要遊戲引擎直接實現在其中，且僅限於 Kepler 系列 GPU。TXAA 基於多重取樣抗鋸齒和定製的濾鏡。TXAA 被用來解決一個遊戲中的關鍵問題：閃爍或 temporal aliasing。TXAA 透過柔化動態場景來確保遊戲內的場景不包含任何的鋸齒和閃爍。 Shuffle 指令 在底層，GK110 擁有額外的指令和操作來進一步提升效能。新的 shuffle 指令允許在一個 wrap 內的執行緒在不訪問記憶體的情況下共享資料，使得整個過程比原來的 loadsharestore 方式更加迅速。原子操作也被重新設計使得原子操作的速度得以提升。同時還添加了一些原本只針對單精度浮點的操作的雙精度支援。 HyperQ HyperQ 將 GK110 的硬體工作佇列從原本的唯一一個提升到 32 個。在 Fermi 架構中，有時唯一的工作佇列被佔據時工作量其實並不夠讓每個流處理器都有工作。而擁有 32 個工作佇列，GK110 在很多情形下可以使得原本空閒的 SMX 工作起來從而達到更高的利用率。HyperQ 的這種特質還因為它能夠被更輕易地對映到 MPI 一個常見的在高效能計算中使用的通訊介面 而被進一步增強。傳統的為多個處理器系統設計的基於 MPI 的演算法所面臨的錯誤依賴問題透過 HyperQ 得到了解決。透過增加 MPI 工作的數量，程式設計師將可以在不修改程式碼的情況下應用 HyperQ 來提升演算法效能。 動態並行 動態並行（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 功能。 影片解碼 編碼 NVDEC NVENC NVENC 時英偉達的高效率固定編碼引擎，能夠解碼、預處理和編碼 H264 內容。NVENC 的輸入編碼僅限於 H264。然而彌補這塊短板的是 NVENC 可以編碼 4096x4096 的內容。 如同 Intel 的 Quick Sync 技術，NVENC 的使用需要用到專有的 API。然而英偉達並沒有計劃提供在 CUDA 內呼叫 NVENC 的方法。 效能 Kepler 架構的 GPU 的理論單精度浮點運算能力以 GFLOPS 為單位大約為 2 操作每 FMA 指令每 CUDA 核心每指令週期 CUDA 核心數 核心速度（以 GHz 為單位）。值得注意的是和上代的 Fermi 架構一樣，Kepler 架構不能像 Tesla 架構一樣透過雙發射 MAD 和 MUL 指令來提升處理效能。 基於 Kepler 架構的 GK110210 GPU 的理論雙精度浮點效能大約為其單精度浮點效能的 13。然而這個效能指標僅在專業級的 NVIDIA Quadro、NVIDIA Tesla 顯示卡和高階的 GeForce TITAN 顯示卡上提供。面向普通消費者的 GeForce 顯示卡驅動限制了雙精度浮點效能到單精度浮點效能的 124。 GK10x 的雙精度浮點效能也被類似地限制到了單精度浮點效能的 124。 基於 Kepler 架構的晶片 GK104 GK106 GK107 GK110 GK208 GK210 GK20A 圖睿 註釋 參見 NVIDIA 顯示核心列表 參考文獻 Category 英偉達微架構 Category 圖形微架構 Category2012 年面世