移動 GPU 和桌面 GPU 的差距有哪些?
移動處理器發展至今,有人曾經拿出數據比較三星5250處理器和桌面版i3,atom處理器的cpu性能,但為什麼沒人比較過移動版GPU和桌面版的區別呢?是因為應用的操作系統不同無法直接比較?還是架構不同?比如現在桌面的GT650和544MP3的比較?(雖然肯定是不如,但差距在哪裡?有多大?)
時隔兩年再來更新這個問題,是因為有人提到了TBR。實際上TBR並不是移動硬體的專利,甚至可以說它也不是為了移動硬體而生。從Kyro開始就有了TBR的設計。
TBR實際上是演算法和架構層面對Cache的優化。TBR工作在Scratchpad memory上。它和Cache一樣,設計的根本是為了逾越Memory Wall。當兩級存儲差異巨大,比如在手機上,就會選擇TBR的設計。當年因為SIMD和非常寬的位寬,所以Memory Wall的問題在Framebuffer的寫入上不明顯,因此主流的顯卡一直使用的是IMR。
----------------------------------------------------
移動GPU和桌面GPU最大的不同在於,移動GPU在設計上是有著明確的資源限制的:功耗和面積。其次才是性能功耗比。這樣也導致移動GPU無論是拼性能還是性能功耗比,都遠不如桌面GPU。
另外,對於現代GPU來說,無論是桌面還是移動,能看的指標只有兩個:一個是FLOPS(Half Precision和Full Precision),一個就是Memory Bandwidth。至於核數之類的,那都是Market Techniques。此外性能和指標的關係,雖然是有,但沒那麼密切。
----------------------------------
另外, 張岩(媽蛋這個名字太多了我at了好幾次都at不對) 是業內巨巨(沒記錯吧),所以他的回答還是很中肯的。
他提到了「性能」,我就再多說兩句。雖然說性能在每個階段都有體現,但是GPU這東西是有這目標市場的。既然有市場,那就要先做評估,評估GPU出來之後應用的特性,比如是三角形多呢,還是Shader多,還是Texture多。因為大家都知道有明顯的bottleneck不好,所以儘可能的均衡搭配,避免短板效應。
並且產品的裁剪一般也是均勻的。比如高端GPU搭配的顯存帶寬是200G/s,但是低端的晶元只有120G/s,那顯然給那麼多的shader單元就沒什麼意思了,還增加晶元成本。所以這個時候,shader可能就要打對摺。shader減少了,可能Triangle setup的頻率也可以下調。如此這般。當然這種調整並不是1+1=2那樣的簡單,需要架構本身有伸縮性。所以Tegra在K1之前,也不是直接拿桌面的片子過來用刀切一半就能當移動晶元用的。
那麼這個「均衡」以誰做參考呢?那自然是benchmark。Benchmark除了平日見到的跑分應用外,剩下的多是給廠商用於性能參考的。從市場角度來說,新的晶元上市的時候,應用往往不那麼充分。除了常規的性能增加外,跑分的多少也是讓發燒友買新卡的重要動力。
從這個意義上講,「不服跑個分」,還真是晶元發展的推動力之一。
移動平台相比於PC平台,還是有很多不同的。從本質上看,是由功耗和體積兩方面限制的,對於圖形處理來說,主要是兩點:
第一,是有限的帶寬。實際上,要增加計算能力,在功耗允許的情況下,堆核心並不是一件難事,事實上我們也看到了不少SOC集成了四核乃至「16核」GPU。但是難點在於,需要有足夠的帶寬去滿足這顆強大的GPU,避免其出現「餓死」的情況。在左圖的移動平台中,CPU、GPU和匯流排被共同集成在一顆晶元上,稱之為SOC。整個SOC,包括其中的CPU和GPU,共享有限的內存帶寬。即使是相對高端的,採用64bit內存位寬的一些SOC,如三星4412,高通8064等,也只是6.4 - 8.5GB/s的帶寬,相比起PC平台主內存十幾GB/s的帶寬,和PC GPU GDDR5顯存動輒幾十,不少都超過100GB/s的帶寬,只能說是少的可憐。相對另類的蘋果在iPad4中,給A6X晶元搭配了128bit的LPDDR2-1066,帶寬達到了17GB/s,用以餵飽強大的SGX 554 MP4 GPU,但相比PC平台依舊是小巫見大巫。因此,移動平台要在有限的帶寬下實現合理的性能,在不少時候,瓶頸可能並不在於計算能力上,而在於帶寬上。
第二,相比PC平台的CPU,移動平台的CPU浮點較弱,在Cortex-A9開始雖然有所好轉,但64bit的NEON跟桌面128bit甚至256bit的SIMD還是有顯著差距,外加主頻的差別。因此更多的計算也依賴硬體Vertex Shader去完成。
因此,移動平台的GPU相對於PC平台,也會有一些不同。
摘自愛搞機:
http://www.igao7.com/1217-vv-gpu.html
按知乎一貫的啰嗦風格,說說我個人關於所謂「性能」的一些想法。跟主題無關。
首先,GPU的性能這事本身就比較難界定。從工程師和社會閑雜人員(a.k.a. marketing)的不同角度,對GPU性能的取向可能就是不一樣的。作為一個GPU工程師,我們可能關心的是GPU某一方面的吞吐量,比如triangle rate, fill rate, texturing rate,當然還有FLOPS。但是作為用戶、評測人員或者市場人員,他們關注的點是「How damned fast can I play my game on it」。所以簡單的講「移動GPU和桌面GPU性能哪個好」,不同的人會給你不同答案,因為「性能好」在不同的人那裡的定義是不一樣的。
說到遊戲性能 benchmark,則問題變得更複雜,因為遊戲是運行在一個複雜的計算機系統上面,而不僅僅是一顆GPU。CPU的不同(比如ARM vs. X86)、OS的不同(比如Android vs. Win)、driver處理機制的不同(比如WDDM vs. LDM)、內存子系統的不同 ?? 乃至API的不同(D3D vs OpenGL),都會導致最終遊戲性能的差別。有時候這種差別是可以通過一些手段排除的,有時候則不能(比如OpenGL的應用往往切換狀態比D3D要頻繁,不知道為什麼,可能OpenGL developer 的習慣做法與D3D developer有所不同)。
具體到遊戲引擎上來,今天的移動遊戲引擎技術,差不多要比PC遊戲落後一到兩個代際。這是軟體的問題,而且我相信移動遊戲會很快追趕上來,甚至超越也不一定。但是在當下,你就很難比較採用了不同複雜度設計的引擎產生的GPU workload。
然後,還有一個問題:即使是同一個架構的GPU(比如NVIDIA在Tegra K1里用的GPU和樓主問的GT650 都是Kepler架構,「幾乎」一模一樣),為了因應不同的市場和產品需求,你還是不能拿它們來直接比較:
第一,除了流處理器數目不同,K1 的GPU是連在整個SoC的memory controller上的,而GT650是自己的MC直接連顯存。這個區別會直接影響內存訪問的帶寬和延遲。
第二,對同一個benchmark來說,在SKU不同的GPU上跑,會發生bottleneck shift。比如在core比較少的GPU上pixel shader是瓶頸,到了core比較多的GPU上可能就會變成內存是瓶頸。
第三,K1 的GPU時鐘頻率比較低,而GT650的時鐘頻率比較高。更重要的是,K1的各部分之間的時鐘頻率比,跟GT650是不一樣的,所以即使是做clock for clock比較,也可能會有bottleneck shift。
最後,同一個benchmark,同一個系統,同一個GPU,在不同的解析度和AA rate下跑,也會bottleneck shift。這就是為什麼大部分評測都要標resolution 和 AA mode的原因。
總結:GPU性能評測是一個複雜的系統工程。不做具體的界定和calibration,泛泛的討論「移動GPU和桌面GPU哪個性能好」 很難得到一個確定的、有建設性的結論。從最終用戶關心的「我能不能流暢的玩遊戲」到工程師關注的「這個GPU哪一部分的吞吐量是多少」 之間,有一個逐漸過渡,不斷具體化,關注範圍漸次收窄的過程。在這個過程中,具體數據可能並不具有確定的意義。我們更多應該關注數據變化的趨勢和約束條件。「不服跑個分」 是無助於提高移動GPU的設計水平的。
移動GPU和桌面GPU最核心的差別在於渲染流程不同。目前主流的移動GPU,無論ARM、高通還是Imagination,其GPU都是TBR(Tile Based Rendering)。而桌面GPU,無論NVIDIA、AMD還是Intel,都是Immediate Rendering. 下面我就來說說什麼叫TBR,什麼叫Immediate Rendering。
說在前面:
從opengl定義的GPU pipeline來看,一幀3D場景是通過以下幾個過程渲染出來的。
「Vertex前端」(負責準備數據和Vertex Shader指令)-&>"Vertex Shader"(計算定點位置,顏色,紋理坐標,光照,等相關工作)-&>"Primitive Assembly"(負責組裝圖元,比如三角形; 坐標系變換,物體坐標-&>世界坐標-&>透視變換-&>屏幕坐標;視錐剪裁;Culling正反面選擇)-&> 「Rasterizing」(光柵化,就是將立體場景投影到二維屏幕的過程)-&>"Early Z/S"(前期depth和stencil測試,決定一個fragment是否被渲染,從而降低後期fragment shader的負擔)-&>"Fragment Shader"(對一個fragment,即像素,進行渲染。可能涉及到讀取紋理texture。)-&>"Post Z/S"(後期depth和stencil測試,有些應用在fragment shader中可能會改變該像素的深度值)-&>"Blending"(將此次渲染結果和之前的渲染結果進行混合)。
1. Immediate Rendering
Ok,說到這所謂的Immediate Rendering,就是將一個圖元(最常見的是三角形),從頭到尾走完整個Pipeline,中間沒有停止。這種結構,控制簡單,容易實現。問題是在做blending的時候需要從存儲單元中不斷讀回之前render的結果,可想而知在繪製一個大的場景時這個帶寬消耗是比較大的。
那為什麼桌面GPU會採用這個架構。首先,歷史原因,最開始設計opengl pipeline的人,正是這些設計桌面GPU的大咖們。不過,最重要的一點是,桌面GPU都是有自身顯存的,它不需要通過系統匯流排從系統的DDR memory中讀回數據。所以開銷比較小,是完全可以接受的。但移動端的處理器(基本是可以認為都是ARM處理器)都是統一定址的。所有的IP都是使用統一的DDR存儲空間,這樣讀回Pixel進行blending就變成了一件非常奢侈的事情。它會嚴重佔用系統帶寬,不但功耗提升,而且會影響整個SOC的處理能力(可以想像北京上海的堵車場景)。為了解決這個問題TBR便應運而生了,下面該TBR出場了。
2. TBR
TBR是Tile Based Rendering的縮寫。首先來認識一個概念Tile。什麼是Tile,你可以把它看成一小塊屏幕區域。比如一個屏幕的解析度為256x256,假定一個tile的大小是16x16,那麼這個屏幕可以看成是由16x16個Tile組成。TBR的精髓就是一個Tile一個Tile的渲染。這樣只需要給GPU配上一塊很小的片上cache(足夠裝下一兩個Tile的內容就行),就能實現高效的blending。那麼,問題來了,根據前面講述的GPU pipeline來看,只有在光柵化的時候才能知道每一個tile中包含的fragment,如何才能做到一個tile畫完再畫另一個tile呢。這裡就需要一種機制將整個場景的圖元信息(最主要的是位置)都保存下來,並且能在做光柵化時快速的檢索出屬於這個Tile的圖元。所以所有的移動GPU中都會有Tiler這個模塊,這在桌面GPU中是沒有的。每個廠家的Tiler實現都是機密,這裡不予討論。我們只要知道Tiler能接收vertex shader的運算結果,並在光柵化之前,選出屬於特定tiler的圖元就行了。有了Tiler,這個GPU Pipeline就被分為了兩部分,一個場景中所有的vertex計算都在光柵化之前完成,最後再一次性raster一個Tile。這樣做還有一個好處就是,可以更有效的在early z中剔除被遮擋的像素,降低了fragment shader的負載。
非專業人士,非專業回答方式,簡單粗暴的一句話:台式機一塊顯卡有你半個筆記本大,台式機顯卡功率動輒100W甚至幾百W,筆記本整個電腦60W,100W,這性能怎麼比? 所以,考慮到大小(便攜性),功耗(續航),發熱(散熱)等原因,移動GPU相比桌面的特點就是:小,低功耗,低發熱,但是也低性能。
如果只是普通日常玩耍,有桌面和移動gpu的天梯圖的啊
如果移動GPU不管是英偉達的Kepler架構還是ARM的公版架構或者是Imagination Technology的PowerVR 的架構,再或者是vivante的架構等等,都是為了移動設備犧牲了些許的性能的。君不見目前的移動CPU都是集成了GPU的,這點倒是和AMD的APU有些相似,非同步架構嘛,所為的理論帶寬,並不能代表實際的使用中就是能夠讓你達到的帶寬。能做到,不代表一直都能夠做到。就是這個道理。桌面級的GPU能夠長時間的維持高頻、高性能的狀態運行。但是目前來說移動GPU除了為數不多的(為所知道的有高通800)的可以長時間維持在高頻運行以外,其他的都不能維持高頻。包括最新的三星的7420使用了14NM的製程也是一樣的鎮不住發熱。目前來看。移動的CPU的發熱已經被GPU所超越。(恐怕最近的高通810的發熱門事件也是因為430在20NM的製程下鎮不住所導致的)。
移動端GPU受限於功耗和散熱等問題,性能必須做出取捨,這一點和桌面級別GPU沒有可比性。
CPU同理,看看那些低電壓版的移動端CPU就明白是什麼在限制性能了。
移動端的目的是便攜,長續航,壓得住(散熱),桌面級就完全不用考慮,或不用考慮太多。
個人認為還是功耗決定了性能差異,桌面版高端GPU動輒400W的功耗,筆記本即便是外星人這等發燒裝備,適配器才100多W,還是整機的
推薦閱讀:
※目前gpu渲染方面,哪些geforce卡比較有性價比?
※如何評價 Nvidia 發布的 SOC Tegra X1?
※CPU 和 GPU 的區別是什麼?
TAG:圖形處理器GPU |