在介紹完 NVIDIA 越走越極端的 Fermi 架構之後,接下來我打算繼續介紹在 Fermi 上市兩年後負責接檔的 Kepler 架構 (由於 AMD 陣營的部分從 Terascale 3 之後以降全部的架構都是 Graphics Core Next 架構小改而來因此我正在考慮是否要先講完 NVIDIA 的部分之後再一次談完 GCN)。

NVIDIA Kepler Microarchitecture

  • 推出日期:2012 年 03 月 (GK104)
  • 所屬系列編成:GeForce 600 系列、GeForce 700 系列
  • API 支援:DirectX 11.0、OpenGL 4.5、OpenCL 1.2、Vulkan 1.0
  • Shader Model 支援:SM 5.0

在上回我們討論 Fermi 架構的時候提到 NVIDIA 終於開始受到追求大核心發展戰略的困難影響而面臨產品不斷延期、良率表現不佳、成本居高不下、成品高溫高功耗低效率的問題而倍感壓力,因此在接下來的 Kepler 架構當中 NVIDIA 顯然得對自家產品的發展規劃進行一些調整,因此類似的歷史就這麼再次發生了,NVIDIA 從 Kepler 架構開始,比起晶片組成規模的提升更加在意性能與功耗之間的平衡 (就像 2006 年的 Intel 與 AMD 發展 Terascale 使用的小核心戰略一般),Kepler 架構主要的改進項目大多也圍繞在這點上。

PCI Express 3.0 支援

Kepler 架構是 NVIDIA 第一款支援 PCI Express 3.0 介面的 GPU 家族 (但不是所有成員都能夠支援 PCI Express 3.0)。

製程大躍進

相較於 Fermi 架構所使用的 40 奈米製造工藝來說,Kepler 採用的 28 奈米製造工藝算是一個比較大的進展,以總電晶體數量差不多的 GK104 核心與上代的 GF110 核心為例,GK104 核心在內建略多於 GF110 核心一些之電晶體數量的情況下,面積卻只有 GF110 核心的一半多一些,這對於良率與生產成本的改善有著相當關鍵的影響 (不過從型號中也可以很容易看得出來其實 GK104 之上應該本來還有更大的核心要發佈,至少有 GK100 跟 GK102 兩款,不過這兩款晶片後來都被取消了,直到事隔兩年後的 GK110 核心才有更大規模的版本推出)。

GPC 重組,SM 模組合二為一進化為密度更高的 SMX

如同 Tesla 架構到 Fermi 架構之間的發展一般,Kepler 架構與 Fermi 架構之間最直觀的差異同樣是出現在 GPC 內部的運算元件編排上,在開始談 Kepler 架構的新規劃之前,我們得先從 Fermi 架構的設計開始看起,下圖就是 Fermi 架構中的標準型架構 (GK110、GK100,圖左) 與緊湊型架構 (GK104、GK114,圖右)。

而實際上 Kepler 架構的演化方向與 GK100/GK110 標準型架構往 GK104/GK114 緊湊型架構發展的方向很類似,同樣是採進一步增加單組 SM 模組 (從 Kepler 開始改稱為 SMX) 內 CUDA Core、特殊功能單元的數量為主,而且增加的幅度非常明顯 (CUDA Core 的數量從 48 個增加到 192 個、特殊功能單元的數量也從 8 個增加到 32 個)。

而且從上面的架構中可以發現一件事情:在 Kepler 架構中每組 CUDA Core 所能分配到的控制單元 (例如 Load/Store 單元、快取記憶體、Wrap 排程器、執行緒分派單元) 的比例是有明顯下降的,其實看起來很像把 Fermi 中階版配置中的兩組 SM 模組合併為一組 SMX 之後在將其內的 CUDA Core 數量加倍的結果,然而其實這就是 Kepler 架構的發展主軸-透過大幅增加 CUDA Core 數量而不增加控制單元使得 Kepler 架構可以在不大量增加電晶體數與電路複雜度的情況下有效提升性能 (還記得我在介紹 Tesla 架構的時候談過 NVIDIA 把 CUDA Core 設計成個體電路相當簡單的純量運算單元,因此在提升 CUDA Core 的時候相對而言比較容易而且不會額外耗用太多電晶體嗎?)。

如果你還沒反應過來 Kepler 架構到底為什麼要做這樣的改變的話,或許下面這張表格能夠讓你更清楚的明白新舊架構之間的差異:

架構FermiKepler
核心GF110GK104
製造工藝40 奈米28 奈米
GPC 數量44
SM/SMX 數量4 x 4 = 162 x 4 = 8
CUDA Core 數量16 x 32 = 5128 x 192 = 1,536
Warp 排程器數量2 x 16 = 324 x 8 = 32
指令分派單元數量4 x 16 = 648 x 8 = 64
材質單元數量4 x 16 = 6416 x 8 = 128
SM 記憶體64 KB x 16 = 1 MB64 KB x 8 = 0.5 MB

乍看之下 GK104 的 CUDA Core 數量足足是 GF110 的三倍之多,但在實際電路上的電晶體數差異呢?其實只從 30 億「小幅增加」到 35 億而已 (看起來 5 億個電晶體好像很多,但從比例觀點其實只多了 16.7% 就讓 CUDA Core 的數量成長了三倍)。

除此之外 Fermi 架構當中首次引入的 PolyMorph 引擎也得到了更新,據官方說法新的 PolyMorph Engine 2.0 的效率比起前代來說提升了不少,官方說法表示最多可以省下高達 50% 的能耗。