產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 房子分大小,緩沖分等級前言:時隔一個月,GPU大百科全書又回來了。在之前長達三個多月的漫長連載中,我們一起按照工作順序走過了整個GPU的流水線,相信在經(jīng)歷了這次辛苦的旅程之后,屏幕前的你多多少少都會有所收獲了吧。 我們在上一期GPU大百科全書的結尾曾經(jīng)說過,工作單元游歷的完結并不代表著GPU大百科全書的結束,因為除了我們見過的這些功能各異的運算/操作單元之外,GPU中還有這一群數(shù)量龐大且作用極其重要的“幕后英雄”。它們分布在整個GPU內外,雖然并不直接參與任何運算和控制動作,但卻擔負著提升GPU執(zhí)行效率的重要使命。它們就是GPU以及整個顯卡最重要的組成部分——緩沖體系。 緩沖對于這個世界來說是至關重要的存在。工廠里的堆料車間是緩沖;城市里的停車場是緩沖;學生們做題時的草稿紙是緩沖;甚至當你被沉重的工作壓得透不過氣來的時候,放下工作去睡上一覺也是緩沖。緩沖可以為連貫任務的執(zhí)行提供極大的幫助,甚至還能為執(zhí)行單元更好的動作提供先決條件。對于GPU這一大并行度的運算執(zhí)行體系來說,通過合理的緩沖設置來臨時掛起和快速存儲數(shù)據(jù),不僅有助于數(shù)據(jù)的快速存儲和結果的轉移,更可以掩蓋延遲造成的執(zhí)行斷檔。 要說緩沖體系完全躲在幕后吧,其實也有點冤枉。這些幕后英雄中有一位曝光率極高,甚至到了人盡皆知的地步。但對整個體系來說,潤物細無聲才是形容它們最好的詞匯。今天,我們就來見見這些平時不怎么露面,但卻能夠影響GPU性能的朋友們吧。 ● 房子分大小,緩沖分等級 現(xiàn)代GPU的緩沖體系十分龐大,它包含了由體積、延遲及位置決定的4個主要的組成部分,分別是顯存(Memory)、紋理緩存(Texture cache)、共享緩存(shared)及寄存器(Register)。顯存置于GPU芯片外部,通過GPU內部的顯存控制器進行控制和操作。紋理緩存、共享緩存及寄存器則集成在GPU內部,分別供TMU和ALU控制及使用。 在整個緩沖體系中,顯存的體積是最大的,大到只能將其獨立到GPU芯片之外。作為緩沖體系中最重要的組成部分,顯存的知名度已經(jīng)高到一提顯卡必定提到它的地步了。相對于顯存,緩沖體系中其他三位成員的名聲不僅矮了一大截,甚至都不為大多數(shù)人所知曉。盡管在整個緩沖體系中顯存并不是需要投注最多設計資源的部分,其作用也并不比其他三者更加突出。但在很多消費者心目中,顯存的快慢和大小幾乎是影響一款顯卡身份和地位的唯一標準。對于GPU及整個顯卡體系來說,顯存就像是一個巨大的倉庫,材質也好,指令也罷,幾乎所有涉及顯示的東西都能裝進去。 我們今天的故事,就從這最大的倉庫開始吧。
顯存翻新歷代記 ● 顯存翻新歷代記 顯存的歷史是如此的漫長悠久,它的命運一直是與顯卡交織在一起的,甚至可以說顯存的歷史就是顯卡的歷史。當最初的顯卡出現(xiàn)時,盡管功能單一且作用極其有限,但它畢竟擔負著輸出畫面的職責,而輸出畫面這一連貫動作本身需要一個臨時緩沖,因此從顯卡誕生的第一天起,顯存作為幀緩沖就已經(jīng)出現(xiàn)了。今天我們看到的運行頻率高達數(shù)G,帶寬動輒幾百G的顯存系統(tǒng),全部發(fā)端于緩沖這些每秒不過幾K甚至僅僅幾百字節(jié)畫面數(shù)據(jù)的buffer。
受限于半導體工藝以及IC邏輯結構涉及的水平,最初的顯存與內存具有極大的通用性,F(xiàn)P-DRAM(Fast Page DRAM)及EDO-RAM(Extend Data Output DRAM)等等當時內存常用的顆粒在顯存中同樣適用,甚至當時相當多顯卡的顯存顆粒都是可拆卸和手工擴展的。這些延遲幾十甚至幾百納秒的顯存在今天看來簡陋不堪而且慢如蝸牛,但他們在當時不僅十分先進,而且其高通用性也促進和保障了顯卡的正常工作以及穩(wěn)定發(fā)展。 隨著時間的推移,顯卡逐漸從傳統(tǒng)的2D輸出控制機構轉變成了能夠執(zhí)行CPU發(fā)出的圖形相關命令的獨立單元,甚至具備了操作紋理及材質的能力。材質的以及幀緩存的配合操作對顯卡的存儲空間提出了前所未有的要求,傳統(tǒng)的FP-DRAM以及EDO-RAM已經(jīng)無法滿足圖形發(fā)展的需要。于是對SD-RAM的大規(guī)模使用,在顯卡具備了“3D加速”功能之后便順理成章了。與此同時,具備block-write(塊寫)能力,擁有更好讀寫性能的SG-RAM也開始嶄露頭角,但終因成本要素在未能流行起來。在SD-RAM時代,顯存的延遲通常在8~10ns。
GPU的出現(xiàn)將整個圖形界推入了嶄新的時代,更好的光影效果催生出了更大的材質需求,進而帶動了顯存的發(fā)展。NV10(Geforce256)不僅是人類歷史上第一塊GPU,同時也是第一塊支持DDR-RAM顯存的GPU。普通的DDR顯存延遲一般為4~5ns,它將傳統(tǒng)的SD-RAM顯存的帶寬提升了一倍??梢哉fNV10的出現(xiàn),將整個圖形界拉入了高速顯存時代。另外值得注意的是,在DDR顯存后期,SG-RAM的DDR版本GDDR開始嶄露頭角,這為今后的顯存發(fā)展打下了良好的基礎。 這世界上存在很多看上去毫無根據(jù),但卻又確實正確的現(xiàn)象,顯存的更迭發(fā)展就是其中之一。自從伴隨著NV30一起到來的失敗的GDDR2顯存之后,雙數(shù)代顯存性能及功耗表現(xiàn)差勁同時不受歡迎的魔咒就再也沒有被打破過。盡管GDDR2和后來R600所采用的GDDR4都努力提升了帶寬,但糟糕的功耗表現(xiàn)以及難以提升的頻率不僅讓第一代采用者大受其苦,也嚴重影響了自身的普及。GDDR2和GDDR4這兩頁歷史不僅黯淡,而且很快速的就被人們翻過去了。
與之相對應的,由NV36發(fā)端并在NV40上發(fā)揚光大的GDDR3,以及在RV770上讓AMD一賭翻身并由此名留史冊的GDDR5,則成了顯存發(fā)展歷史上光輝燦爛的一頁。GDDR3的出現(xiàn)不僅最終讓SG-RAM這一更加符合顯存體系操作特點的存儲顆粒徹底取代了SD-RAM,更讓人類首次正式踏入了GHz頻率的存儲時代。從GDDR3開始,顯存的運行頻率和帶寬開始大幅度地甩開系統(tǒng)內存。而GDDR5不僅以優(yōu)異的性能讓AMD轉危為安,其極高的運行頻率所帶來的帶寬也讓顯存第一次能夠在真正意義上成為“寄存器溢出緩沖”,從而將整個緩沖體系聯(lián)系在了一起。 從NV10開始算起,顯存見證了GPU史上所有的創(chuàng)新和發(fā)展,NV10(DDR)、NV20(4 MC)、NV30(GDDR2)、NV36/40(GDDR3)、R600(GDDR4)、RV770(GDDR5),這些成功和失敗的背后幾乎都有顯存及顯存體系發(fā)展變化的影響。那么,顯存究竟是如何影響到GPU乃至整個顯卡的表現(xiàn)的呢? 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 好倉庫不能沒有管理員● 好倉庫不能沒有管理員 顯存的發(fā)展就好像一個大倉庫的改造工程。隨著需求的增長,倉庫的廠房越來越大(容量提升);不斷增大的廠房讓貨物的進出口矛盾得以凸顯,所以廠房進出口以及能夠同時進出的貨物也就跟著增加了(DDR-GDDR3-GDDR5);同時隨著技術的進步,進出貨的單位速度也越來越快(頻率提升);這一切都讓倉庫的貨物進出效率變得越來越高。但這一切都必須建立在一個基礎之上,那就是倉庫擁有稱職的能夠充分并合理的進行調度的管理員。這個管理員,就是顯存控制器(memory controller)。
盡管顯存的樣式不斷翻新,速度和帶寬也越來越夸張,但顯存體系的基本結構在本質上卻與最初的原始形態(tài)以及作為本源的內存管理形態(tài)沒有什么分別。顯存的讀寫直接由顯存控制器進行,它與內存部分的MC幾乎完全一樣。雙方最大的區(qū)別,在于顯存控制器的并聯(lián)度要遠遠大于內存控制器。 首次在顯存控制器上引入大并行度概念的GPU是NV20,在NV20中NVIDIA采用了LMA(Lightspeed Memory Architecture )顯存管理體系,不同于以往傳統(tǒng)的單通道顯存控制體系,LMA將4個32bit顯存控制器以crossbar與所有顯存進行直連,這讓每一個顯存控制器都具備了訪問所有顯存單元的能力,因此LMA獲得了4通道并聯(lián)128bit的顯存管理效果。LMA的出現(xiàn)不僅在不改變單顆顯存頻率及位寬的基礎上大幅提升了GPU的可用顯存帶寬,同時也為今天的顯存管理體系創(chuàng)造了規(guī)則。時至今日,市售的所有顯卡依舊采用多個64bit顯存控制器并聯(lián)的顯存管理方式。 顯存的最初目的,甚至是目前為止最主要的目的,在于為GPU提供材質、采樣操作及幀數(shù)據(jù)的緩沖場所。作為材質的最大需求者,TMU首當其沖的從顯存中獲得了好處。在前面章節(jié)中關于TMU的故事里我們已經(jīng)知道,當程序載入并發(fā)出材質需求時,材質便被從程序在硬盤的材質庫中被load到了顯存里。以顯存來充當TMU讀寫這些材質的快速緩沖,明顯比讓其直接從硬盤上直接讀取要快速的多。材質在顯存中擁有一組內存地址(Address),當TMU需要某個材質時,它只需要讓TA單元(Texture Address)掃描顯存,從中找出該材質對應的地址,便可以快速的完成后續(xù)的材質拾取動作。因此從操作手法上來說,顯存在GPU緩沖體系中的地位與普通內存體系為CPU進行緩沖的機制是一樣的。
內存體系擁有多級cache機制來提高存儲系統(tǒng)的效率,與內存/CPU體系類似的顯存/GPU體系有沒有類似機制呢?有,答案依舊從材質中來,它就是Texture cache。 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 從無到有的Texture cache● 從無到有的Texture cache 和顯存不同,由于顯卡最初的工作并不涉及材質工作,所以紋理緩存的歷史遠沒有顯存來的悠久。甚至直到顯卡開始具備材質處理能力時,由于要求相對較低,紋理緩存也沒有在第一時間出現(xiàn)。
紋理緩存在剛出現(xiàn)時并不受人重視,其處境甚至可以說有些凄涼。由于需求不大,最初的紋理緩存甚至連屬于自己的實體都沒有得到,人們只是顯存中劃分的一小塊獨立區(qū)域,這片區(qū)域通常被分配在顯存前端方便讀寫,TMU將需要快速緩沖的材質數(shù)據(jù)有限存放在這一小片區(qū)域中。這個甚至只能稱得上是buffer的小區(qū)域,就是最初的紋理緩存。 隨著需求的不斷增加,圖形需求帶來的紋理尺寸增長是非常迅速的,與此同時,諸如mip-mapping以及Generating Lightmaps之類的復雜紋理和操作也被更多的使用在了圖形效果的表達過程中。這些要求讓TMU獲得一套更加快速有效的緩沖系統(tǒng)的愿望變的迫切起來,于是,第一代“實體化”的紋理緩存便出現(xiàn)了。
第一次透露出擁有獨立紋理緩存信息的GPU是NV3,也就是我們所熟悉的RIVA TNT。遺憾的是由于公開信息的不足,我們已經(jīng)無從得知出現(xiàn)在NV3中Texture cache的確切數(shù)量了,我們甚至不能確定他究竟是獨立ram還是共享DRAM,這從側面也反映出了當時對紋理緩存重視度的嚴重不足。其后NVIDIA曾經(jīng)再次在NV15時代宣稱其擁有獨立于VRAM之外的紋理緩存,但具體信息依舊不明。到NV20時代,紋理緩存的存在漸漸被大眾所接受和關注,但依舊同NV15一樣確切數(shù)量無從考證,人們只能通過對NV2A的研究,將NV2X的Texture cache數(shù)量推定在了128K。其后的諸多GPU構架中都曾多次提到Texture cache,但對大小問題始終焉語不詳。截止到NV40為止,整個GPU體系的紋理緩存一直處于半神秘狀態(tài),而且僅有一級,我們可以將其稱為L1 Texture cache。 相對于L1,L2 Texture cache的出現(xiàn)則要高調的多。伴隨著DirectX 9.0C的出現(xiàn),Vertex Texture的出現(xiàn)對L2 Texture cache提出了實際的需求,在VertexShader單元外圍布置L2 Texture cache成了顯卡完整支持DirectX 9.0C的重要標志之一。NVIDIA在NV40中首次引入了L2 Texture cache,大小為128K,到G70時增加至288K。ATI則在R520中加入了完整的L2 Texture cache,并在R600中將其提升至256K。 別看紋理緩存的作用表面跟CPU的多級cache相當,都是數(shù)據(jù)的臨時告訴緩沖空間,甚至也分L1/L2兩級,它最初的實際功能與操作方式卻和原教旨的多級cache存在極大的區(qū)別,甚至可以說完全不同的??梢哉f最初的紋理緩存,只能用一片混亂來形容。 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 最初的雜亂無章和第一次統(tǒng)一● 最初的雜亂無章和第一次統(tǒng)一 CPU的多級cache體系,或者說原教旨意義上的cache體系的最大特點,在于通過預測以及多級高速大帶寬sram對較慢的系統(tǒng)主存進行預取,從一般意義上來講,L1的命中率一定會比作為擴展出現(xiàn)的L2更高。無論包含式cache還是排斥式,CPU的cache系統(tǒng)都是面向整個核心開放且功能是統(tǒng)一的。紋理緩沖與之最大的不同,在于L1可以被視作只為整個TMU單元提供服務,而L2則既要為充當L1的擴展緩沖,又要為Vertex Texture Fetch拾取并進行頂點紋理相關操作提供幫助。
在最初的DirectX 9.0C出現(xiàn)的時候,Vertex shader單元具備在TMU單元進行材質操作之前即通過Vertex Texture和Vertex Lighting按照程序要求提前訪問材質庫的能力,這樣做可以為整個模型附上最基本的帶光照信息的底層紋理,方便對Vertex shader單元對幾何外形進行調節(jié)。但這一步驟的調整使得TMU之外出現(xiàn)了第二個需要緩沖材質的單元,因此為其開辟第二組臨時緩沖區(qū)域以及由此帶來的凌亂的緩沖區(qū)域及功能劃分,就成了DirectX 9.0C不得不背負的負擔。 實際上不僅僅是DirectX 9.0C的問題,縱觀GPU乃至整個顯示核心的發(fā)展史,緩沖區(qū)域及功能雜亂無章以及各自為政始終是圖形處理器最大的“特色”。因為最初的功能分化,幾乎每一種硬件管線功能都要求對應且獨立的buffer,而buffer漸漸地就演變成了cache。除了我們在這里面對的Texture cache之外,ATI研發(fā)的幾乎所有GPU構架都具有回寫緩沖,ROP里也有Z-cache和Stencil-cache,甚至還有各種shader cache,就連output buffer曾經(jīng)也可以被看做是一種cache……各自為戰(zhàn)不僅讓設計難度隨著單元和功能需求的增多而不斷放大,更讓希望使用更好硬件資源的程序員們苦不堪言。
隨著DirectX 10的出現(xiàn),Vertex Shader和Pixel Shader單元通過ALU的形式被統(tǒng)一成了Unified Shader。傳統(tǒng)的Vertex Texture Fetch的功能被全新的統(tǒng)一單元所替代并實現(xiàn),這讓兩組先前紋理緩沖作用不一服務單元不同的情況得到了好轉。因為不再需要對不同單元負責,現(xiàn)在L2 Texture cache終于可以作為L1 Texture cache的擴展緩沖而安心工作了。 哦?這么說DirectX 10不僅統(tǒng)一了shader,更功德無量的統(tǒng)一了緩沖體系,讓緩沖體系雜亂無章的局面得到改善嘍?不……DirectX 10的出現(xiàn)雖然確實讓Texture cache體系獲得了統(tǒng)一,但它卻引入了另一個以前從來沒出現(xiàn)過的緩沖——shared memory,簡稱shared。 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() shared:統(tǒng)一帶來的陣痛● shared:統(tǒng)一帶來的陣痛 我們前面曾經(jīng)提到過,草稿紙其實也是一種緩沖。既然說到了草稿紙,你還記得小學時做一道應用題需要多少草稿紙么?我估計一張A4紙大小的草稿紙就足夠一個哪怕是擁有畢加索一般的天賦,能夠邊算邊涂鴉的小學生完成一次數(shù)學期末考試了。那你還記得大學以后做一道題需要多少草稿紙么?我記得研一那年某次做數(shù)學物理方程的作業(yè),一道題就讓我用掉了9頁A4紙,而那次作業(yè)有9道題,害得我不得不跑去實驗室偷了半包打印紙回來……
這現(xiàn)象說明了一個并不復雜的問題——隨著運算量、運算難度以及運算通用度的增加,運算單元所需要的緩存量也是會大幅增長的。 伴隨著DirectX 10對shader單元的統(tǒng)一,ALU成了整個GPU的核心部分。過去VS和PS單元會分別處理矢量和標量數(shù)據(jù),而shader統(tǒng)一之后,同一個ALU必須同時面對向量和標量數(shù)據(jù)。再加上直接向程序員開放ALU帶來的通用計算需求,伴隨著由此帶來的執(zhí)行環(huán)境以及編程環(huán)境的改變,ALU所要面對的運算種類和通用性都有了很大的改變,其作為常規(guī)的通用運算資源所需要的緩沖量也便跟著大幅增加了。 為了應付全新的緩沖需求,同時也為程序能夠更高效率的得到執(zhí)行,微軟在DirectX 10中第一次引入了shared的概念。shared是一組面向ALU開放的延遲完全透明的只讀cache,ALU可以將需要的數(shù)據(jù)臨時寄存在這里。shared只讀不可寫,因此并不能與延遲不透明的unified cache相提并論,但對于線程、圖形指令和大多數(shù)需要幾何關聯(lián)的傳統(tǒng)通用計算指令來說,shared已經(jīng)可以滿足要求了。 相比于顯存和紋理緩存,shared的年紀要小很多很多,它也是緩沖體系中最后出現(xiàn)的一位。第一個引入硬件shared的構架是NVIDIA的G80,G80為每一個SM中的8個SP(ALU)單元配備了16K的shared memory,每個SP均可以訪問全部的shared bank,這種富足的資源設計一直維持到GT200為止。AMD在R600中也引入了名為GDS(Golbal Data Share)的shared機制,以便滿足對DirectX 10的基本支持,由于GDS本身的不完善,AMD又在此后的RV770中再次引入了LDS(Local Data Share)這一2級shared作為GDS的補充,并最終在RV870中完善了LDS的功能,使其可以發(fā)揮出應有的性能。 shared的出現(xiàn)為ALU提供了較好的臨時緩沖空間,客觀上提升了處理shader及通用計算指令的效率,但這種做法讓好不容易看到了統(tǒng)一希望的緩沖體系再度憑添了新的混亂因素。NVIDIA的構架因為shared的引入而變成了shared memory和L1/L2 Texture cache分離并各事其主的狀態(tài),實際上與統(tǒng)一Texture cache之前并沒有本質區(qū)別。而承襲ATI專緩專用衣缽的AMD則更是創(chuàng)造了GDS+LDS+shader constant cache+shader instruction cache+memory R/W cache+L1/L2 Texture cache+Z cache+Stencil cache+color cache+……好吧,我不知道該怎么形容了……的混亂狀態(tài)。盡管這其中有不少工作實際上是使用register來進行的,但最低限度下2級shared的出現(xiàn)確實在事實上影響了程序員對硬件的使用以及AMD對自身硬件的控制…… 可憐的程序員們以及更加可憐的用戶們,難道就只能接受這么亂下去的現(xiàn)狀了么? 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 只有統(tǒng)一的路才對大家的胃口● 只有統(tǒng)一的路才對大家的胃口 首先意識到并開始嘗試解決問題的是NVIDIA。在Tesla構架之后,NVIDIA為我們帶來了支持DirectX 11的Fermi構架。Fermi構架在緩沖方面最顯著的特色,在于引入了統(tǒng)一的unified cache。 Fermi構架采用大并行度的GPC分塊設計,每個GPC內部分為4組SM單元,每個SM單元擁有完整支持讀寫操作的L1 cache體系。該L1 cache體系可以在16K shared memory/48K L1 cache以及48K shared memory/16K L1 cache之間進行切換,不僅能夠滿足DirectX 11要求的32K shared的最低限度,更為傳統(tǒng)的DirectX 10以及特種程序的需要提供了支持。而在整個GPC結構的外圍,NVIDIA配置了768K的L2 cache,不僅能夠充當L1的擴展,將其與顯存聯(lián)系起來,更可以同時為TMU提供Texture cache服務。除此之外,新的cache體系還可以直接充當幾乎所有寄存器的溢出緩沖。
Fermi中unified cache的引入,為人們展示了一種很好的解決緩沖資源各自為戰(zhàn)現(xiàn)狀的途徑。與CPU一脈相承的統(tǒng)一多級cache讓大多數(shù)單元從同一個緩沖體系中獲益,ALU也好TMU也罷,想要緩沖的時候直接訪問同一個cache就行了。這種做法等效的同時提升了大多數(shù)單元的可用緩沖資源水平,減少了register溢出導致的災難性后果,最終提高了整個體系中各單元的單位周期復用率。 當然,這世界上沒有一蹴而就的完美,現(xiàn)階段Fermi cache體系也存在著美中不足。為了照顧傳統(tǒng)的shared應用,F(xiàn)ermi的L1體系并未完全unified化,這不僅給驅動控制添加了難度,也為cache命中算法的開發(fā)制造了不小麻煩。盡管如此,引入unified cache依舊讓我們看到了巨大的好處和美好的未來。有介于此,NVIDIA決定在下一代的Kepler構架中繼續(xù)強化cache也就變得順理成章了。
在unified cache的引入中,受益最大的可以說是寄存器。接下來我們就來看看緩存體系的最后也是最快的一部分,究竟是怎樣為GPU運行提供幫助并從unified cache中獲益的吧。 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 欲求不滿的寄存器● 欲求不滿的寄存器 寄存器同顯存和cache一樣,都是發(fā)源于CPU的重要緩沖組成部分。長期以來,寄存器都伴隨在運算單元旁邊,以最及時的延遲和最大的帶寬為運算單元提供著指令寄存空間(IR)、程序計數(shù)緩沖(PC)以及累加器(ACC)等多方面的服務。
寄存器可以為運算器提供最快速的臨近臨時存儲,讓它們釋放結果、掛起數(shù)據(jù)或者彎成回溯之類的事情。幾乎每一個運算單元的每一次動作到有寄存器參與的身影。由于通常擁有最高的運行速度以及0t的延遲,GPU常用的32bit寄存器相當耗費晶體管資源,這讓它們的身價更加倍增。由于無法隨心所欲的配置大量寄存器,每一個運算單元能夠分配到的寄存器資源都非常的少。以G80為例,每個SM包含8個SP單元,而寄存器總量僅為32K,每個ALU僅能分到4K 32bit寄存器資源。而R600極其系列衍生構架則更是少到了平均3.3K/ALU的水平,直到Cayman構架才補足到了4K。
對于ALU來說,條件允許的前提下對寄存器的需求近乎是無限的,這種需索無度與寄存器相對稀少的現(xiàn)實總量形成了鮮明的對比。我們在GPU大百科番外篇對NV3X構架的分析中可以看出,寄存器無節(jié)制溢出的后果是可怕的,因此程序員們除了小心謹慎的處理自己手頭的程序需求,盡量讓ALU在現(xiàn)有資源總量允許的前提下對寄存器進行使用之外,就只有祈禱硬件準備了充分的寄存器溢出緩沖以備不時之需了。 cache是很好的寄存器緩沖溢出,雖然它的速度和延遲相對于寄存器來說差了不少,但依舊可以在編程環(huán)境處理得當?shù)那疤嵯掳l(fā)揮很好的延遲掩蓋作用。而unified cache在GPU中出現(xiàn)之前,GPU中大大小小的各種“cache”并不能通用,因此也就不能隨心所欲的發(fā)揮應有的作用了。cache之外,接下來可供選擇的途徑就只剩顯存一途了,顯存的空間對于ALU來說雖然可以大到近乎無限,但顯存的低帶寬和高延遲讓其在相當長的一段時間內都不具備參與核心緩沖的能力。最早使用顯存來充當寄存器溢出緩沖的NV30帶來了幾乎是災難性的表現(xiàn),直到與MC配合之后帶寬突破100G甚至接近200G的GDDR5出現(xiàn)之后,顯存才具備了充當寄存器溢出緩沖的條件。而此時Fermi中unified cache的引入,也適時的將寄存器和顯存這對速度差異仍舊巨大的緩沖連接在了一起。
同GPU的很多單元一樣,存儲體系終于也在各自為戰(zhàn)甚至陷入混沌相當長一段時間之后,再度呈現(xiàn)了統(tǒng)一的趨勢。 產(chǎn)品:GeForce GTX560Ti nVIDIA 顯示芯片
![]() 我們都是GPU的一部分● 我們都是GPU的一部分 相信通讀過到GPU大百科全書的朋友們一定都會有這樣的感受——每一個GPU中的單元以及工作環(huán)節(jié),似乎都與人們的日常生活有著千絲萬縷的聯(lián)系,都可以在我們周圍找到些影子。是的,我們在所有文章中一直著力展現(xiàn)的,其實并不僅僅是GPU內部單元的名字代號工作原理之類的說明書式內容。GPU作為工具,其上所附庸的創(chuàng)造者的痕跡以及由此展現(xiàn)出來的普適的道理才是我們要表達的重點。
經(jīng)過本篇GPU大百科的介紹,屏幕前的你現(xiàn)在重新審視存儲體系,是否會有新的發(fā)現(xiàn)呢? 舉些例子吧:顯存在緩存體系中雖然最慢同時設計最簡單,但它卻以自身的廉價和龐大為GPU最大的緩沖需求——材質提供了令人滿意的緩沖解決方案。這不僅讓這個最簡單部分一躍成為最直接影響GPU以及整塊顯卡最終性能的重要因素,甚至讓它成了GPU設計競爭中弱者保身甚至翻盤的重要途徑。這說明廉價未必就是弱勢,能夠滿足最大需求才應該是衡量價值的關鍵性要素。
緩沖體系并不直接參與運算和控制過程,但它卻因為自己能夠提供的寄放空間而具備了幫助整個GPU掩蓋動作延遲的能力,這讓它成了GPU不可或缺的組成部分。如果沒有緩沖體系,GPU內部的運作延遲不僅無法得到掩蓋,更會以逐級放大的形式最終對畫面的表現(xiàn)形成災難性的影響,任你有再多再強勁的運算單元也是無濟于事的。這正如我們的生活一樣,不管你的能力多大,精力多么過人,沒有合理的安排、適當?shù)木彌_以及休息調整,工作一樣無法有效的進行下去,甚至最后還可能會賠上身體。 我們說過,劍本凡鐵,因鍛打而生靈性,因持者執(zhí)念而分善惡。別看GPU僅僅是一個幫助我們顯示圖像的工具,創(chuàng)造者們身上的諸多特質乃至整個人類社會的很多本質在它們身上都能找到濃縮和闡釋。只要靜下心來加以沉淀,各中滋味相信屏幕前的你一定能夠品味出來。 隨著緩沖體系故事的結束,我們GPU大百科全書關于GPU部件部分的介紹就全部完成了?;仡欉@艱苦又充實的四個月,我們不得不再次由衷地感謝屏幕前的諸位——沒有你們的閱讀就沒有我們的堅持,更不可能有這長達10萬字的漫長連載。在諸位那令我們感動到甚至有些惶恐的期許中,GPU大百科全書終于要迎來終章了。在下一期的GPU大百科全書中,我們將全面回顧GPU的諸多特性,為大家展現(xiàn)一些GPU最本質的特色之處以及一款優(yōu)秀GPU所應該具備的特質。還是那句話——敬請期待吧。 |
|
來自: 網(wǎng)中有你 > 《video》