為什麼gpu沒有像cpu那樣的二級緩存?

RT,cpu有核心,一級,二級,甚至三級緩存。

為什麼顯卡只有流處理器和紋理單元。。。。

都是運算的晶元


首先明確一下是否有二級緩存這個問題,我的確記不住什麼時候GPU開始帶二級緩存,至少英偉達的GPU晶元發展到Kepler這個級別的時候,都已經帶2級緩存。

我猜樓主是對GPU為什麼以前沒有二級緩存有疑惑吧,只是簡單地提一下

首先明確的是,CPU對訪存時延的要求很高,所以用了大緩存+亂序執行的方式容忍訪存的高延時。但是緩存在什麼情況下才能用得上呢?當然是時間局部性/空間局部性比較強的時候緩存才能發揮效果,減少對內存的直接訪問。

然而,常規的GPU應用大多是流處理,時間局部性比較低,這是其一。第二是GPU是通過多個warps (32個threads一組)並發的方式來容忍訪存時延的(也就是有多個warps,如果warp A需要訪存,那麼就看warp B,C,D,E....是否已經得到數據,可以切換到其他的warp進行執行)。所以在一定程度上,GPU不需要特別大的cache。另外,在部分應用中,程序員可以將頻繁訪問的數據放在shared memory上,從而降低對顯存的訪問。

但是GPU從原本規則的圖形計算髮展到現在的通用計算,一些非常規應用表現出的空間局部性或者時間局部性的特點,這可能是加L2緩存的原因。

另外要說明的是,顯卡不是只有流處理器和紋理單元,GPU的存儲體系有點倒三角的味道,片上有大量的寄存器,還有可劃分的L1緩存和shared memory。


你怎麼知道就沒有。。。


一直就有多級memory,早起還不能稱為緩存,缺乏緩存特點……

至於為什麼這麼小,並不是沒用……否則為什麼一直在增加呢?tesla上還增加了DRAM……

原因可能比較傷感:設計難度大,製造難度大,功耗大,成本高……對傳統的圖形性能提升回報比不好……何況現在獨立顯卡不斷萎縮……但是AMD和Intel的集成顯卡沾了CPU的光,有了大cache……


這是AMD的GCNNVIDIA從很久以前就有了


現在GPU一般是有二級緩存的。

下圖為NVIDIA的kepler GK110顯卡框架圖:

而NVIDIA Kepler顯卡架構的內存層次結構如下圖(其二級緩存大小為1536k):

圖片及數據來源:Kepler 計算架構白皮書


費米架構開始就有二級緩存了


首先,圖形處理器並不像中央處理器那樣工作,它處理的主要是圖像數據,紋理數據還有執行向量計算。GPU本身是設計有緩存的,每個處理單元對應一個紋理緩存,好像還有共享緩存。題主之所以會有疑問,其實很好解釋,GPU的核心很小,所以它對應的緩存也很小,但是數量多,因為這些緩存只是存儲數據用的,並不允許開發者操作,所以不像中央處理器一樣顯示可見,而且廠商設計時都不會宣傳,因為這個沒有什麼比較意義,所以省略了。其實他是有的,不過名稱換了,功能改變了一點,數據也變了(每個緩存好像只有16KB)


推薦閱讀:

CPU和GPU的計算速度是如何計算的,一般軟體又如何佔用這些計算空間,1GHz是什麼概念?
智能手機的cpu性能 = 核心數 * 單核頻率?
會有i5 8400桌面U的藍天(神舟K680E)筆記本嗎?
為什麼14納米之後不研發13納米,而是以躍進的方式研發?
AMD RYZEN 5 1600的遊戲性能與intel i5 7500的比較?

TAG:中央處理器CPU | 顯卡 | 圖形處理器GPU | GPU通用計算 |