【轉】Intel Gen8/Gen9核芯顯卡微架構詳細剖析

一、興趣問答

1、Intel核顯的一個EU單元同頻率下大約相當於A/N的幾個流處理器單元?

答:大約是8個左右(因為EU單元內含有兩個SMID-FPU單元,每個FPU單元四發射,理解為A/N的4個流處理器完全OK)

2、為啥上面說8個左右,而不是8個整?

因為I/A/N架構不一樣,單精度浮點能力來衡量顯卡的性能與比較最恰當不過,按單精度比值算的話,就是上面說的「左右」

3、單精度衡量I/A/N是否具有參考性?

有參考性,大體衡量核心的性能是OK的,但是顯卡的性能除了受核心性能影響外也受顯存帶寬影響,I核顯有專用顯存的話顯存容量也頂多128MB,借用內存的話,帶寬要小於目前的主流的顯存帶寬,所以單精度差不多的話,I核顯還要弱些

4、HD630性能怎麼樣,相當於今天的哪個獨顯的水平?

HD630約24個EU單元,頻率從350-1150MHz左右主流HD630的最大睿頻是1050MHz(我們就按1050MHz算),大體是1050MHz×24EU×2×(SIMD-FPU)4×(MUL+ADD)=403200MHz=393.75GFlop

  • GT1030實際遊戲頻率大約是1650MHz左右,單精度浮點約為:384×1650×2=1237.5GF,就是說GT1030的單精度浮點比HD630約高214%(加上顯存上的性能優勢性能會更高一些)
  • R7-240(現在300左右),單浮點約為:320×800×2=500GF,大約比HD630高14%
  • R7-350(現在400左右),單浮點約為:512×900×2=900GF,大約比HD630高128%
  • 老卡GT740,單浮點約為:384×993×2=744.75GF,大約比HD630高89%

由此來看,HD630的水平還不能與這些入門級獨顯相提並論,但說到實用性比如玩LOL在1080P開中等偏高特效還是能流暢玩的……

二、正文

  • Intel 核顯資料頁面:英特爾? 處理器顯卡 | 英特爾? 軟體
  • Intel 9代核顯官方PDF文檔:software.intel.com/site
  • Intel 8代核顯官方PDF文檔:software.intel.com/site

為了讓大家閱讀第一手資料,又現去Intel官網查了鏈接,當然下面網友的解讀也非常精彩

-----------------------------------------------

原文鏈接:【超冷知識普及】Intel Gen8/Gen9核芯顯卡微架構詳細剖析

作者:坎達拉克沙 寫作時間:2015-10-23

自從Ivy Bridge架構以來,Intel在改進CPU計算性能方面似乎越來越「不思進取」。雖然製程和架構也一直按照tick-tock的步伐穩定前進,但給普通用戶的直接印象就是單位頻率的計算能力只有個位數百分比的提升。(農企:怪我咯)

Intel作為目前最大的顯卡廠商(笑),其研製GPU的歷史可追溯至上個世紀末,當時的810晶元組已經具備了板載集成的i704顯示核心。接下來又有風靡一時的板載Graphics Media Accelerator顯示核心,就是我們常見的GMA。從2010年的32nm製程Westmere架構的酷睿i系列處理器開始,GPU從主板被轉移到了處理器package的內部,稱作HD Graphics,中文一般稱為核芯顯卡,並沿用至今。

核芯顯卡在早期就是性能孱弱的代名詞,幾乎是除了亮機之外,沒有其他的用途。不過,核顯的性能近年來可謂突飛猛進,到了Haswell時代,連低端賽揚都可以爽玩入門網遊、硬解4K,高端的Iris系列核顯甚至能碾壓中低端獨顯。而Intel在GPU領域的華麗轉身,只用了區區3年多的時間。

本文致力於解析目前的Intel Gen8 (Broadwell)核顯與Gen9 (Skylake)核顯的微架構(它們相同點很多),順便也會簡單講一下Intel SoC的基本架構。另外,也會與前代核顯作一定的對比,來探究其進步的原因。

這是一塊四核心Intel Skylake處理器的組件分布圖,大家可以把它想像成i5 6500、i7 6700K甚至i5 6300HQ。

圖中四個藍色框中就是計算核心,它們中間的綠色框代表共享的最後一級緩存(Last Level Cache, LLC)。深藍色框中是負責與外界聯繫的「系統代理」模塊,包含內存控制器、顯示控制器、I/O控制器等。而最左邊的紅色虛線框內,就是核芯顯卡,我們可以認為它是目前最常見的HD530。

由圖中可以直觀地看出,核顯占整個晶元的面積還是比較大的,比例一般是35%~40%。

這是整個SoC的框圖。首先來解釋一下圖中除了核顯之外,大家比較生疏的三個要素。

1. 環狀互聯(Ring Interconnect)

這個設計是從Sandy Bridge微架構引入的,其本質是將CPU核心、LLC分片、代理模塊、核顯等組件聯繫在一起的環形拓撲匯流排。它可以雙向傳輸,具有32位元組(不是比特)的寬度,具有自己的時鐘域(帶有右下角小圖標的組件就有自己的時鐘域),帶寬非常高。這種設計有利於晶元的模塊化擴展,同時還可以加強存儲資源的共享。

2. 最後一級緩存(Last Level Cache, LLC)

其實就是我們常說的三級緩存(L3 Cache),它是一個完全共享的、分散式的存儲單元,位於CPU核心的外部(L1、L2緩存都在內部)。

每個CPU核心都可以得到一個相對固定的LLC分片,核顯也可以利用它。它是系統訪問內存前的最後一道關卡,由於訪問緩存的速度要比訪問內存快得太多,因此較大的LLC有利於減少延遲。目前,雙核心的Intel處理器一般配備3~4M LLC,四核心的一般配備6~8M,甚至更多。

3. 嵌入式DRAM(eDRAM)

從上圖右下角可以看出,系統代理模塊中有一個可選的eDRAM控制器。所謂eDRAM,是位於整個SoC之外的一塊快速記憶體,一般是64M~128M大,也有自己的時鐘域。它有分別的匯流排用於讀寫,速度可高達32位元組/時鐘周期。它的作用與LLC基本相同,可以近似認為是L4緩存或者核顯的內嵌顯存,可以由CPU核心和核顯共用,對提高核顯的性能有重要的作用。當然,只有最頂級的型號才能擁有它。

大家可能已經看到上面的圖中,已經把核顯的結構也畫出來了。下面我們就自底向上分析核顯的微架構。

就像N卡有CUDA核心,A卡有流處理器一樣,Intel核顯在很小的晶元上,也設計了它自己的基本運算組件,它的名字叫執行單元(Execution Unit, EU)

上圖就是一個EU的構成。從本質上來講,它是一個細粒度多線程的、符合單指令多數據(SIMD)規範的處理模型。圖中左側綠色的部分是存儲單元,它右側的則是功能單元。

為了敘述簡明,我下面用一行一條數據的方法來講。

每個EU的存儲單元中有7條線程,或者叫做通道;

每條線程上有128個通用寄存器;

每個寄存器可以存儲具有8個元素的SIMD向量;

每個SIMD向量的元素長32bit。

這樣,大家就可以理解圖中的「28KB GRF」是怎麼來的了,簡單相乘即可。所謂GRF,就是通用寄存器文件(General Purpose Register File)。此外,每條線程還有一個用於保存線程狀態的特殊寄存器組,它們叫做架構寄存器文件(Architecture Register File, ARF)。

EU經過取指令(Instruction Fetch)階段之後,通過指令解碼,與GRF中存儲的數據配合,進行功能性的操作。

在每個時鐘周期,EU最多可以並發執行四條指令,這四條指令必須來自於四條完全不同的線程。這些指令交由後面的線程枚舉器(Thread Arbiter),再由枚舉器分發給後面的功能單元之一進行處理。

由上圖可以看到,功能單元也是有4個,分別是:發送單元(Send)、分支單元(Branch)、兩個SIMD浮點運算單元(SIMD FPU)。

SIMD FPU是EU中起GPU計算功能的核心部件。雖然它們的名字叫做」浮點運算單元「,但它們既可以進行浮點運算,也可以進行整型運算。在一個周期中,每個FPU可以以SIMD的方式執行4個32bit運算,或8個16bit運算。在Gen9之前的核顯架構中,都是不原生支持16bit運算的。

在FPU中,一次浮點運算是由一次加法和一次乘法組成,叫做乘加操作。因此,對於32位浮點運算而言,一個EU每周期可以執行(add + mul) x SIMD-4 x 2 FPU = 16次操作。

另外,具有分支效果的指令,如跳轉、條件跳轉、循環跳轉的指令,則被枚舉器發給分支單元處理。而那些需要較長延遲時間的操作(如訪存),則被發給發送單元,再由它與外部組件聯繫進行下一步操作。

現在的GPU設計大多奉行模塊化、可擴展的原則,也就是說,把一定數量的基本計算單元形成團簇,然後再由數量不等的團簇加上某些控制單元來構成整個GPU的運算組件。NVidia和AMD已經早早採用了這種方式。來舉幾個栗子。

N卡的計算單元團簇叫做流式多處理器(Stream Multiprocessor, SM),由一定量的CUDA核心組成。在Kepler架構中,192個核心組成一個SMX,而在Maxwell架構中,128個核心組成一個SMM。因此,我們常見的GT740M(GK107/GK208)就擁有2個SMX,而GTX960M(GM107)就擁有5個SMM。

A卡的計算單元團簇叫做計算單元(Compute Unit, CU),在GCN架構中提出,每個CU包含64個流處理器。例如,入門級的R5 M330(Oland)擁有5個CU,而中端偏高的R9 M375(Cape Verde)擁有10個CU。

Intel從Haswell時代的Gen7.5核顯開始,也採用類似的設計思路。這是Intel核顯性能開始躍進的關鍵點所在。它採用兩級EU團簇結構設計,較低一級叫做子分片(subslice),較高一級叫做分片(slice)

這是Gen8/Gen9核顯的子分片框圖,可以明顯地見到它包含8個EU,也就是說一個子分片包含56個線程/通道。圖中有三個新東西,我們來一一看。

1. 本地線程調度器(Local Thread Dispatcher)

顧名思義,它用於向每個EU中的每個線程來分配任務。所有的指令先進入它內部的指令緩存,然後再由它來將這些指令分發給有空閑的EU,簡單暴力。

2. 採樣器(Sampler)

採樣器是一個只讀的訪存單元,用於從其外部的存儲單元中獲取紋理或圖像數據,並進行採樣。除了採樣之外,它還可以完成圖像的坐標轉換、過濾等。它內部也有分別的兩級緩存,在L1和L2緩存之間,存在將壓縮的紋理或圖像解壓縮的邏輯電路。

3. 數據口(Data Port)

它是專門管理數據存取的單元,負責與外部存儲單元進行通用的數據交換。另外,它還可以進行SIMD操作的聚合,也就是將多個長度相同,並且偏移地址落在同一個地址段內的分散的SIMD操作放在一起處理,這樣可以使帶寬最大化,提高效率。

其實到了這裡,大家可以看出核顯(或者說所有具有計算功能的晶元)在架構上的精細性。每個單元都需要具有指令和數據的處理能力,並且需要保持與其高層或低層組件的信息交換。

將子分片集合在一起,然後再加上一些必要的組件,就變成分片了。絕大多數Gen9核顯都是由3個子分片組成一個分片,也就是說包含24個EU。

由上圖可以看出,各主要數據匯流排的讀寫速率都是64B/周期,這個值十分重要。為什麼數據寬度是64B呢?

回憶一下,EU中的一個通用寄存器可以存儲32B的數據,也就是SIMD-8x32bit。但在實際的運算過程中,有很多指令是SIMD-16的,這樣的話就需要將一對通用寄存器視為一個SIMD-16寄存器,數據量就變成了64B。

這樣,每個子切片的採樣器和數據口在從切片的緩存(L3數據緩存)中讀寫數據時,寬度是64B。L3緩存中存儲的數據,每條也是64B。L3緩存到整個SoC的LLC緩存的數據匯流排的寬度,當然也是64B了。這種統一性有利於各存儲單元和運算單元間的協同工作。

切片的L3數據緩存(L3 Data Cache)是相對於各子切片的採樣器緩存而言的,是高度bank化的存儲結構,在Gen9架構中,它的大小是768KB。

每個子切片的數據口都要先從L3緩存中讀取它們需要的數據,而採樣器則先訪問自身的L1、L2緩存,若找不到數據才要從L3緩存中讀取。一旦出現緩存未命中的情況,L3緩存就要從LLC甚至系統內存中讀取數據,再返回給子切片。由於帶寬很大,總體來講效率也是相當高的。

如上圖所示,再把切片組合起來,加上必要的組件,就形成了核芯顯卡的全貌。

Gen8核顯可以由1個或2個切片組成,Gen9核顯可以由1~3個切片組成。

具有1個切片(24個EU)的Gen8核顯包括HD5300、HD5500、HD5600,2個切片(48EU)的Gen8核顯則有HD6000、Iris 6100、Iris Pro 6200(帶有128M eDRAM)。

Gen9核顯的命名改成了三位數。具有1個切片的Gen9型號有HD515、HD520、HD530,具有2個切片的是Iris 540、Iris 550(帶有64M eDRAM),具有3個切片的旗艦級型號就是Iris Pro 580(帶有128M eDRAM)。圖示的就是Iris 540/550,但eDRAM模塊未示出。

當然,在這些分片的頭上,還是多了兩個控制組件的,一是命令流(Command Streamer),二是全局線程調度器(Global Thread Dispatcher)

命令流主要負責從核顯驅動程序棧來接收底層的命令,並且將它們進行高效的組合和解釋。至於全局線程調度器,它則是負責整個核顯模塊的負載均衡,統一管理所有子分片的本地線程調度器,並與它們協同工作。

上圖中最下方的圖形技術介面(Graphics Technology Interface, GTI),則是整個核顯模塊的大門,所有與SoC其餘部分的交互都要穿過它,就像細胞膜之於細胞一樣。另外,GTI還有負責一些原子性的LLC讀寫操作,以及最重要的電源管理功能。

按照Intel的說明,除去分片的其他組件,也就是命令流、全局線程調度器和GTI,它們所處的區域叫做」未分片「(unslice)區域。未分片區域區域處於一個特殊的、有很大自主性的時鐘域中,通過它可以調節整個核顯的性能表現。

這是架構剖析部分的最後一個話題,來看一下整個核顯模塊與SoC的存儲結構。

大家應該早就知道了,核顯的顯存除了可能有的eDRAM之外,最主要的就是共享系統內存。Intel認為這種設計方式可以簡化系統的複雜度,降低能耗,並且不需要添加額外的數據緩衝區。

近幾代核顯可利用的最大系統內存量都是1.7GB,但很少達到這個極端值。由於核顯的GTI與內存之間只隔了一個LLC,因此我們可以認為系統內存的位寬和頻率就是核顯顯存的位寬和頻率,如上圖右上角所示。

Haswell和Broadwell架構的處理器,最大可以支持到雙通道DDR3 1866MHz(等效頻率),但Intel官方聲稱為DDR3 1600MHz。每條通道的位寬為64bit(8B),因此在DDR3 1600MHz的條件下,核顯顯存的帶寬就是25.6GB/s。

而Skylake架構的處理器全面支持DDR4,在DDR4 2133MHz的條件下,顯存帶寬達到了34.1GB/s,提升明顯。

由圖中也可以看到各時鐘域對數據交換速率的影響。CPU核心與LLC交換數據時,其頻率由環狀互聯的時鐘決定;GTI與LLC交換數據時,其頻率由核顯核心頻率決定;eDRAM和系統內存與LLC交換數據時,其頻率由eDRAM或內存決定。

推薦閱讀:

DIY從入門到精通——顯卡
然而我也買不到顯卡啊
HBM 和 GDDR5X 有什麼用?現在顯卡帶寬遭遇瓶頸了嗎?
《G4560+GTX1050……GTA5》
台式機顯卡安裝方式那麼爛為什麼沒有得到改良?

TAG:显卡 | 电脑DIY | 电脑硬件 |