導航:首頁 > 源碼編譯 > gpu信息如何傳給演算法

gpu信息如何傳給演算法

發布時間:2022-05-26 05:30:19

Ⅰ 對GPU與CPU傳輸過程的疑問

第一:帶寬可以說是個傳輸量,而不是傳輸帶,所以顯存到北橋Pci-e可以說直接到達的。第二:不經過內存,內存可以說是CPU到硬碟的倉庫,顯卡沒有太大關系。第三:無論是SNB還是推土機,IVB還是打樁機,最大的特點就是在CPU核心「融合」了GPU,一般叫核心顯卡,這就說明GPU和CPU是一塊的,但是又是分開的,同理推土機CPU基本融合了一塊HD6450(沒記錯的話)級別的顯卡,「顯存頻率」 「匯流排帶寬」都是已經設定好了,那就不是內存帶寬越大,核顯性能越好了。(其他問題第四點回答)第四:前面說過了,既然Pci-e顯卡不影響內存傳輸(應該反過來說),所以顯卡帶寬是顯卡帶寬,內存帶寬是內存帶寬,這個計算機原理大致就是 數據-內存(RAM)-北橋(H55取消了北橋)-CPU ,這個就很顯卡無關,之後就是 CPU-北橋-GPU(同時也返回內存)-顯示器。至於集顯(集成在北橋晶元)和核顯的顯存就是調用內存的,其他和上面的原理相同。至於這個帶寬前面說了,顯卡帶寬很內存帶寬是沒有關系的,所以就不會出現前面說的,內存帶寬越大顯卡性能越強的事,越不會出現內存帶寬還帶動顯卡帶寬的問題。第五:你誤解了一個問題,就是前端匯流排(FSB)。前端匯流排是CPU外頻和主板的連接速度,即影響內存和CPU連接速度,如果一個CPU的FSB(前端匯流排)和主板的FSB為1066Mhz,那你可以插條DDR2 1066MHz(內存頻率)的內存,如果你的CPU的FSB和主板的FSB為553MHz,你插條DDR2 1066MHz的內存,那你的實際內存頻率就為553MHz(插上去是沒有問題的,可以正常使用,就是1066MHz降為553MHz了)所以就算FSB為133,內存帶寬為20GB/s(當然這個比例不恰當,高手一下就看出漏洞)也是沒有什麼影響的。當然I3的FSB就沒有1333MHz,只有667MHz,至於為什麼請網路,至於內存帶寬的演算法,你算錯了,那是內存頻率的。內存帶寬的演算法是 時鍾頻率Xdit/8=帶寬 不過現在都是DDR的內存那就是 時鍾頻率X 帶位/8*2=帶寬 舉例 一條DDR3 1333MHz 的帶寬就是 : (1333/2)x 64/8*2=10664MHz 轉換 10664MHz=10.664GB/s大致就這樣了,重要的已經加粗了,我自己也不是電腦高手,但是一點簡單的問題還是可以幫你回答的

Ⅱ ◆請問 gpu處理的數據先傳給cpu還是顯存還是同時傳給顯存和cpu呢

說簡單點,把顯卡比做兩個桶,裡面裝滿水,1個容量512升,1個容量是1024升
位寬就相當於桶的開口,容量相當於顯卡的顯存,512升的開口有256cm 另一個1024的只有128cm,把他們到出來放水,那肯定開口大的流的速度快啊,顯卡位寬就是這樣一個很重要的指標。

cpu那叫頻率吧

顯存位寬是顯存在一個時鍾周期內所能傳送數據的位數,位數越大則瞬間所能傳輸的數據量越大,這是顯存的重要參數之一。目前市場上的顯存位寬有64位、128位和256位三種,人們習慣上叫的64位顯卡、128位顯卡和256位顯卡就是指其相應的顯存位寬。顯存位寬越高,性能越好價格也就越高,因此256位寬的顯存更多應用於高端顯卡,而主流顯卡基本都採用128位顯存。
一般出現在同品牌上的顯存位寬上,例如同為一款ATI RADEON9200但是在顯存位寬上有所不同,有些為128bit、有些為64bit,而銷售人員就經常把64bit當作128bit來賣,外觀上幾乎沒有區別,有區別的就是在顯存的個數上,而普通的消費者往往不能正確的辨識。在這里小編可以給大家介紹一種最基本的方法來比對,如果顯卡上顯存顆粒數為8顆,那麼該顯卡的位寬基本為128bit,如果顯卡上顯存顆粒數為4顆,則為64bit。以上方法只用於TSOP-II顯存的辨認,而採用mBGA封裝形式的顯存通常都為128bit因為mBGA封裝形式決定了他單顆顆粒位寬為32bit。

Ⅲ 如何通過OpenGL編程將GPU用於通用計算任務

隨著現代圖形處理器(GPU)可編程能力及性能的提高,應用開發商們一直希望圖形硬體可以解決以前只有通用CPU才能完成的高密集計算任務。盡管利用通用GPU進行計算很有發展前景,但傳統圖像應用編程介面仍然將GPU抽象成一個包括紋理、三角形和像素在內的圖像繪制器。尋找一種能夠使用這些基本元素的映射演算法並不是一項簡單的操作,即便對最先進的圖形開發商而言也是如此。

幸運的是,基於GPU的計算從概念上講很容易理解,並且現有多種高級語言和軟體工具可以簡化GPU的編程工作。但是,開發商必須首先了解GPU在圖像繪制過程中是如何工作的,然後才能確定可用於計算的各個組件。

在繪制圖像時,GPU首先接收宿主系統以三角頂點形式發送的幾何數據。這些頂點數據由一個可編程的頂點處理器進行處理,該處理器可以完成幾何變換、亮度計算等任何三角形計算。接下來,這些三角形由一個固定功能的光柵器轉換成顯示在屏幕上的單獨「碎片(fragment)」。在屏幕顯示之前,每個碎片都通過一個可編程的碎片處理器計算最終顏色值。

Ⅳ 用Gpu做演算法要大顯存嗎

GPU是顯示卡的一部分,而不是深度學習演算法的一部分,叫做圖形處理器。
顯示卡的基本作用是控制電腦的圖形輸出,安裝在電腦主板的擴展槽中,或者集成在主板上,工作在中央處理器和顯示器之間。
顯示卡主要包括圖像處理器、顯存、數模轉換器、AGP匯流排介面等幾個部分,數據流從中央處理器流出後,要把中央處理器傳來的數據送到圖像處理器中進行處理,把晶元處理完的數據送入顯存,把顯存讀取出數據送到數模轉換器進行數據轉換的工作,從數模轉換器進入顯示器。ß顯存是顯示卡的核心部件,存放顯示晶元處理後的數據,顯存越大,顯示卡支持的最大解析度越大。顯存的容量至少是逗水平解析度*垂直解析度*log2顏色數/8地。
希望我能幫助你解疑釋惑。

Ⅳ 如何用opencv的GPU模塊實現演算法

OpenCV的一些函數,如SURF,OpticalFlow,houghlines,提供了GPU加速版本,但是使用起來挺麻煩的,而且貌似效果沒有宣傳的那麼好,你的這個程序應該是無GPU的。

Ⅵ 顯卡數據傳輸流程(請看好補充)

1、 CPU → 顯卡

CPU將有關作圖的指令和數據通過匯流排傳送給顯卡。對於現代顯卡,由於需要傳送大量的圖像數據,因而顯卡介面在不斷改進,從最早的ISA介面到PCI、流行的AGP介面,以及正在普及的PCI-E介面,其數據吞吐能力不斷增強。

2、 顯卡內部圖像處理

GPU根據CPU的要求,完成圖像處理過程,並將最終圖像數據保存在顯存中。

3、 最終圖像輸出

對於普通顯卡 ,RAMDAC從顯存中讀取圖像數據,轉換成模擬信號傳送給顯示器。
對於具有數字輸出介面的顯卡,則直接將數據傳遞給數字顯示器。

GPU的角色
GPU是顯卡的核心部件,它負責大量的圖像數據運算和內部的控制工作。

GPU是否強大,直接影響到顯卡圖像加速的性能。它所負責的圖像運算有:

2D圖像加速:{{{1}}}(歡迎補充資料)
3D圖像加速:GPU根據3D數據生成多邊形,並進行貼圖/渲染/光照/霧化等計算,以及Z-Buffer遮擋計算。在先進的GPU中,有多條流水線進行3D處理,因而具有強勁的性能。
GPU的加速功能可以通過支持程序打開(例如Windows的DirectX),從而分擔CPU的計算工作,提高整台電腦的性能。若圖形加速功能未打開,則電腦CPU必須承擔所有圖像生成所需的計算。

GPU的控製程序存放在顯卡BIOS中,著名顯卡廠商都提供顯卡BIOS數據和升級程序。通過刷新顯卡BIOS,可以使顯卡具有更強的處理能力並消除舊版的缺陷。

顯存的作用
顯存是顯卡系統的專用內存,它裡面存放圖像處理所用的中間數據和最終數據。

經過GPU處理後,圖像最終以點陣形式存放在顯存中。對於不同的顯示解析度和色彩深度,顯卡中的最終顯示數據組織格式不同,參見???。

不同顯示模式所需的顯存大小:

顯示解析度 色彩深度 顯存大小(位元組)
640*480 8bit 300K
640*480 24bit 1.2M
1024*768 24bit 2.034M

為了加快顯示過程,顯存還具有多頁結構,允許顯示其中一個頁面時對另外的頁面進行後台更新,更新完畢後再切換到前台顯示。

由上表可以看到,最終圖像數據對於現代顯卡的顯存(32M、64M甚至更多)僅占很小的一部分。那麼多餘的顯存用來做什麼呢?

其餘的顯存用於圖像中間數據存放,包括:2D窗口移動、遮擋數據,3D圖形的多邊形數據、貼圖材質數據等,以及GPU計算的中間結果等。

Ⅶ GPU是什麼

圖形處理器(英語:Graphics Processing Unit,縮寫:GPU),又稱顯示核心、視覺處理器、顯示晶元,是一種專門在個人電腦、工作站、游戲機和一些移動設備(如平板電腦、智能手機等)上圖像運算工作的微處理器。
用途是將計算機系統所需要的顯示信息進行轉換驅動,並向顯示器提供行掃描信號,控制顯示器的正確顯示,是連接顯示器和個人電腦主板的重要元件,也是「人機對話」的重要設備之一。顯卡作為電腦主機里的一個重要組成部分,承擔輸出顯示圖形的任務,對於從事專業圖形設計的人來說顯卡非常重要。
中文名
圖形處理器
外文名
Graphics Processing Unit
英語縮寫
GPU
又稱
顯示核心、視覺處理器、顯示晶元

Ⅷ GPU和CPU之間是如何協調數據處理的

因為設計的目標不同,當今的CPU和GPU功能上有本質的不同。作為通用處理器的CPU,顧名思義,它是設計用來處理通用任務的處理、加工、運算以及系統核心控制等等的。CPU中包含的最基本部件有算術邏輯單元和控制單元,CPU的微架構是為高效率處理數據相關性不大的計算類、復雜繁瑣的非計算類的等等百花八門的工作而優化的,在處理日常繁復的任務中應付自如。

計算機的「靈魂」——操作系統,以及幾乎100%的系統軟體都主要仰仗CPU來順利運行。CPU面對的算術、邏輯運算以及控制處理是非常繁瑣和復雜的,面對處理的數據和信息量不僅數量多而是種類多。CPU運算和控制多面手的這種設計,讓它在計算機中得心應手,位置不可動搖。

GPU設計的宗旨是實現圖形加速,現在最主要的是實現3D 圖形加速,因此它的設計基本上是為3D圖形加速的相關運算來優化的,如z-buffering 消隱,紋理映射(texture mapping),圖形的坐標位置變換與光照計算(transforming & lighting)等等。這類計算的對象都是針對大量平行數據的,運算的數據量大,但是運算的類型卻並不復雜,大多類似和雷同,計算性強但是邏輯性不強,如矩陣運算就是圖形運算的典型特性。

如今的游戲,單單從圖象的生成來說大概需要下面四個步驟:

1、Homogeneous coordinates(齊次坐標)
2、Shading models(陰影建模)
3、Z-Buffering(Z-緩沖)
4、Texture-Mapping(材質貼圖)
在這些步驟中,顯示部分(GPU)只負責完成第三、四步,而前兩個步驟主要是依靠 CPU 來完成。而且,這還僅僅只是3D圖象的生成,還沒有包括游戲中復雜的AI運算。場景切換運算等等……無疑,這些元素還需要CPU去完成,這就是為什麼在運行《魔獸世界》的時候,當場景切換時再強勁的顯卡都會出現停頓的現象。
對於需要CPU進行大量AI運算的游戲來說,在固定的顯示解析度下,CPU的架構越強、主頻越高的確有一定的優勢。著名的FPS第一人稱設計游戲——CSS,就是一個很好的例子。當你開啟了30個左右的機器人,在大混戰的時候就很容易體現出高端CPU與入門級CPU之間的區別了。
打造一套完整的游戲 PC 系統,CPU和顯卡的搭配應該相得益彰,高成低就或低成高就都是不平衡的組合方式。

第一代 GPU 首先,CPU將數據傳遞給GPU進行處理,數據先進入T&L單元中的Transform Engine,在這里,數據將以頂 點的形式接受視野范圍的判斷,當處理單元判斷某部分頂點處於觀察者的視線范圍以外時,Transform Engine將把這部分頂點「剪除」以使其不會 干擾後續的流水線操作, 具個簡單的例子:當你在某FPS游戲中突然打開狙擊槍的狙擊鏡,視野變成了一個圓形的空洞,而其他部分則為黑色,這時 Transform Engine將去除這個圓形視野范圍以外的所有頂點,不過,這里進行的只是視野范圍的判斷,Transform Engine去除在 你的視線范圍內但是被其它東西擋住了的物體,另外,每一個三角形可能被旋轉,放大/縮小,上升,下降,左偏,右移等。 這就是多邊形轉換轉換。 Transform Engine根據你的視角,改變了由程序提供的組成3D物體的頂點的坐標。經過Lighting Engine處理後的圖象經過判斷 處理後的數據將流入T&L單元中的Lighting Engine,根據光源的類型,距離,角度,數目,應用方式等不同參數,每一個多邊形都會有 不同的光影表現和光影關系,因而需要不同的光線函數予以表徵,在Lighting Engine中,處理單元將根據軟體提出的光源分布情況為每個頂點計算 出它所具有的光線矢量,以便後續進行的光線紋理貼圖,著色等操作
經過Lighting Engine處理的畫面
其實,經由T&L單元處理過的數據還只是抽象的數據,並不是具體的圖形,上面兩副圖僅僅是方便讀者進行想像的示意圖。
接下來數據將流入Setup Engine,在這里,運算單元將進行三角形的設置工作,這是整個繪圖過程中最重要的一個步驟,Setup Engine甚 至直接影響著一塊GPU的執行效能。三角形的設置過程是由一個一個的多邊形組成的,或者是用更好的三角形代替原來的三角形。在三維圖像中可能會有些三角形 被它前面的三角形擋住,但是在這個階段3D晶元還不知道哪些三角形會被擋住。所以三角形建立單元接收到的是一個個由三個頂點組成的完整三角形。三角形的每 個角(或頂點)都有對應的X軸、Y軸和Z軸坐標值,這些坐標值確定了它們在3D景物中的位置。同時,三角形的設置也確定了像素填充的范圍
經過Setup Engine處理的畫面
最終著色完畢的畫面
在三角形設置完畢後,T&L單元的全部運算就完成了。接下來數據將進入NV15獨有的NSR像素處理單元進行一定的像素處理,接著流入像素流水線 進行後續的紋理像素填充等操作,這部分操作在DriectX7.0中的變化並不明顯,基本的渲染填充過程與過去的顯卡幾無二異
T&L雖然再一定程度上緩解了CPU運算能力的不濟所帶來的瓶頸,使得系統在圖形方面的資源得到了再分配和增強,但同時,T&L也將新的矛盾轉到了GPU上
T&L是一組相對固定的簡單的圖形函數,所實現的特效受到了函數本身語句的限制,雖然這種固定的指令集設計可以帶來比較高的執行效率,但這種設置 使得DX7下所能實現的特效受到了指令集的約束,許多逼真的特效無法實現,程序員的思想也被限定在一個相對狹窄的范圍內。
2、我要看到你飄逸的秀發和迷人的微笑—可編程Shader以及第二代GPU
DriectX8.0在傳統T&L的基礎上加入了兩個新的概念—可編程的Vertex Shader和Piexl Shader,同樣的,第二代 GPU的標志就是硬體級別的可編程Shader運算,代表產品為NV2X(Geforce3/4Ti),R2XX(Radeon8500)等
可編程Shader的復雜程度遠非T&L可比,為了方便大家理解第二代GPU的特點,我們先來認識一下什麼是可編程Shader,以及可編程Shader運算單元
可編程Vertex Shader及頂點處理器:
可編程Vertex Shader讓程序員能夠對特定物體,甚至整個畫面的每一個頂點,指定特別的運算程序,卻不需要CPU介入。每一個頂點都攜帶相當多 的信息,比如坐標,重量,法線,顏色,紋理坐標,霧和點大小數據。頂點處理器能夠以簡短的程序來改變上述這些信息。 這些小程序直接由頂點著色引擎本身執 行,不必勞駕CPU。 典型的T&L引擎將程序員限制在3D運算的光影轉換之前, 在有了頂點處理器的支持之後,游戲設計師對游戲場景里的3D物 體能夠為所欲為的操縱變化,而且不需要用到中央處理器。
這導致了一場革新,程序可以改變頂點的坐標,這樣基本上改變物體的形狀,以達到更接近真實的移動、移動殘影、混色、內插(在兩種外型間轉換),以及變形, 比如改變角色臉部的骨骼和皮膚一個產生一個適時的微笑。也可改變頂點上的顏色數據和紋理坐標,物體表面的顏色達到設計師所想要的色彩效果、投影、凹凸貼圖 設置(如Blinn Bump mapping)或者其它投射的紋理。光源也可以為程序員隨心所欲的調整,不再像過去那樣需要對光源的效果進行笨拙的光線 紋理貼圖,而這些在以前是不可想像的。這一切都歸功於可編程Vertex Shader和頂點處理器的出現
Blinn Bump mapping
可編程Piexl Shader以及像素處理器
在NV15中,nVidia曾經嘗試加入一個叫NSR的像素處理單元,它可以在數據進入像素流水線之前對每個像素進行一系列運算操作,雖然同為每像素操 作,但NSR與Piexl Shader可不能同日而語, NSR對於像素的運算只有7種,同T&L一樣,它依然是固定模式的,程序員依然要依照 規定好的條條框框寫出程序,而Piexl Shader則不同,我們可以用許多不同方式去編程,以實現不同的特效,下面就是一般的像素處理器所具備的特 性:
· 陰影貼圖
· 快速紋理載入
· 影像乘法,對稱核心
· 支持4096x4096或512x512x512 紋理
· 立方體貼圖每邊可4096x4096x32-位
· 支持YUYV的紋理(自動轉換成RGB三原色)
· 支持全景貼圖
可以指向任何一個圖像,如背景緩沖區(back buffer),而可直接當作紋理使用
· 邊緣色彩及邊緣紋理
· 硬體同步化讀/寫
對同一張紋理的讀及寫允許全流水線操作。
可以對背景緩沖區著色,然後馬上能當作紋理使用
· Pass through colors
· 支持DX6規格的環境凹凸/亮度貼圖(就是環境凹凸貼圖)
· 簡單的紋理,S,T 在alpha/紅(AB)及藍/綠 (BG)
· 等向的雙方向性反射分布功能光源
· 內積產生色彩貼圖或Z坐標
· 真實反射凹凸貼圖
這看起來似乎有點抽象,簡單的說,可編程Piexl Shader實現了一個非常重要的特效—真實的毛發
古老街道上昏暗燈光中的狼人
在3D渲染中,渲染真實的毛發一直是一件非常困難的事情,大量的多邊形給多邊形生成帶來了嚴峻的考驗,而每一根毛發之間復雜多變的即時光影關系更不是幾個簡單固定的指令所能實現的。Piexl Shader的可編程性和運算能力很好的解決了這個問題
好啦,現在讓我們來看看第二代GPU是如何完整處理一個畫面的吧
首先,來自CPU的各種物理參數進入GPU,Vertex Shader將對頂點數據進行基本的判斷,如果沒有需要處理的Vertex效果,則頂點數據直 接進入Transform&Lighting Unit進行傳統的T&L操作以節約時間提高效率,如果需要處理各種Vertex效果,則 Vertex Shader將先對各種Vertex Programs的指令進行運算,一般的Vertex Programs中往往包含了過去轉換,剪 切,光照運算等所需要實現的效果,故經由Vertex Shader處理的效果一般不需要再進行Transform&Lighting操作;另 外,當遇到涉及到曲面鑲嵌(把曲面,比如弓形轉換成為多邊形或者三角形)的場合時,CPU可以直接將數據交給Vertex Shader進行處理
另外,在DX8.0的Transform過程中,Vertex Shader可以完成Z值的剔除,也就是Back Face Culling—陰面隱去,這就意味著除了視野以外的頂點外,視野內被前面頂點遮住的頂點也會被一並剪除,這大大減輕了需要進行操作的頂點數目
接下來,經由Vertex Shader處理完成的各種數據將流入Setup Engine,在這里一如既往的進行三角形的設置工作,到這里為止,Vertex Shader的工作就完成了
過去,設置好的三角形本來應該帶著各自所有的參數進入像素流水線內進行紋理填充和渲染,但現在則不同,在填充之前我們還需要進行Piexl Shader的操作
其實Piexl Shader並非獨立存在的,它位於紋理填充單元之後,數據流入像素流水線後先進入紋理填充單元進行紋理填充,然後便是 Piexl Shader單元,經由Piexl Shader單元進行各種處理運算之後再進入像素填充單元進行具體的著色,再經由霧化等操作後,一個完整 的畫面就算完成了
值得注意的是,第二代GPU中普遍引入了獨立的顯示數據管理機制,他們位於Vertex Shader,Setup Engine以及像素流水線之間,負 責數據的更有效率的傳輸、組合,各種無效值的剔除,數據的壓縮以及寄存器的管理等工作,這個單元的出現對整個GPU的工作效率的保證其到了至管重要的作 用。
HyperZ系列:HyperZ技術本身就是一種類似nVIDIA的「Z-封閉甄別」的技術,但是比nVIDIA還更進一步。它的主要功能簡單說來就是分 析在Z軸上的場景,被遮擋的就會被忽略掉,只渲染我們能看到的部分場景;然後對渲染過的Z軸場景進行壓縮處理,數據的壓縮可減少他所佔用的空間,從而在存 取Z-Buffer數據的時候可以保留更多的顯存帶寬。而且這是一種畫面質量沒有損害的壓縮演算法,並不影響畫面質量。最後一步就是把經過渲染的場景中的Z -Buffer信息立刻清除掉,這樣就更加大了顯存帶寬的利用率。
LMA(光速顯存架構)系列:光速顯存架構採用的第一個技術是「顯存交錯控制」技術, LMA中的顯存控制器劃分成了4個獨立的顯存控制單元,每個單元最 大可以進行32bit圖形相關數據的存取工作,並且這4個單元之間以及它們和圖形處理單元之間都保持密切的通訊聯系,並隨時協調平衡各個子單元之間的數據 流量,因此整體來看LMA的顯存控制單元還是可以進行128bit數據的存儲,但是保證了顯存帶寬的充分利用。光速顯存架構採用的第二個技術是「無損Z壓 縮演算法」。傳統的圖形晶元對於每個待渲染的圖形象素都要進行Z軸數據的讀寫工作,因此存儲這些數據的Z緩存一向是消耗顯存帶寬的大戶。LMA中集成了硬體 「無損Z壓縮」單元,採用「無損Z壓縮演算法」對Z-緩存數據進行4:1的完全無損壓縮。 光速顯存架構採用的第三個技術是「Z-封閉甄別」。排除了圖象中 被遮蓋住而不可見的部分,這樣GPU就不做隱面模型構建(節省處理器的多邊形運算資源),並且渲染管線也不對隱面進行渲染(無需從幀緩存中讀寫隱面資料數 據,節省渲染管線的象素和紋理生成資源並完全消滅了隱面資料對顯存帶寬的佔用)。最後,LMA還包括了4組高速Cache,對數據傳輸進行緩沖。
3、夢中的鏡花水月—可編程Shader2.0以及第三代GPU
當你第一次看到3Dmark03中的MotherNature時,你有沒有感覺到震撼?
更加寬泛的色彩范圍能夠使得圖形的逼真度上升,這就是Shader2.0的由來,Shader2.0的核心實際上就是以擴大指令數目以及FLOAT數據形 式的應用來提高色彩表達的精確度,而第三代GPU的Shader單元也由此而具備了高精度FLOAT色彩數據的運算能力。從一般角度來講,第三代GPU同 第二代GPU相比在基本的操作控制形式等方面並沒有本質的區別,但是由於Shader2.0更大的指令長度和指令個數,以及通用程序+子程序調用的程序形 式等使得第三代GPU在處理高精度的龐大指令時效率上有了明顯的提升,同時也使得第三代GPU的可編程性躍上了一個新的台階
讓我們來看看第三代GPU到底有哪些改進吧
Vexter Shader部分
第三代GPU的頂點處理器部分除了一般的操作功能外還具備流程式控制制能力,包括循環,跳躍以及子程序調用等,這些控制指令以及更多向量(或標量)寄存器的應 用使得頂點處理器能夠以更高的效率執行Vertex Programs,提高了Vertex的處理速度。同時,加大的指令長度和指令數量使得頂點處理器的 功能得到了進一步的強化。另外,在第三代GPU中,傳統的T&L數據將完全交由頂點處理器來執行,Transform& Lighting Unit將徹底被頂點處理器「吞並」,這也是第三代GPU的一個重要特點
Piexl Shader部分
第二代GPU的Piexl Shader只能實現INT數據的運算,這勢必會帶來最終運算結果的不精確,而數據的不精確導致了顏色表現的不準確,干擾了最 終畫面的質量以及效果的表現,第三代GPU的重點改進就是運算單元和寄存器所支持的運算格式,現在Piexl Shader可以進行更高精度的FLOAT 運算和輸出,從而使得圖形的色彩顯示更加精確
暴光正確的圖象
數據精度不當而無法實現的特種暴光
另外,第三代GPU的像素處理器每周期所能處理的材質以及指令也分別增加了數倍,這些新特性使得第三代GPU可以處理各種復雜程度的效果,營造一個更為真實的3D畫面,比如更加真實的水面效果
INT Piexl Shader所表現的水面效果
FLOAT Piexl Shader所表現的水面效果
傳統的INT無法表現寬泛的波浪效果,程序員害怕數據精度范圍狹窄引起的上溢或者下溢的發生而不得不在一個很小的物理參數范圍內控制漣漪水面所需的波長、 波浪的大小、移動速度以及反射和折射效果等,現在,由於數據精度的提升,像素處理器完全可以處理一個非常寬泛的數據精度范圍,避免數據的溢出,這就使得更 加真實的水面效果得以被表現。第三代GPU的代表是NV3X系列,R3XX系列等,其中R3XX系列的基本處理方式和順序與第二代GPU在本質上基本相 同,僅僅是Vertex Shader和Piexl Shader的具體操作細節和運算精度上有些許不同,而NV3X雖然在基本原理上也與之大略相同,但 從流水線的角度來看則與完全不同,應該算是個「異類」。產生過程,只分析一下NV3X
以NV35為例:
首先,他具有8個紋理帖圖單元,但8個紋理貼圖單元並不在固定分布於每一條Piexl流水線,而是集簇在一起,根據情況來搭配,可以是4*2、8*1。
其次,他具有12條Shader流水線,但沒有全盤採用浮點渲染流水線,而只是把12條Shader流水線中的8條做成具備浮點處理能力;不過全部12條Shader流水線都具備Fixed-Point Shader的執行能力。
另外,NV3X將流水線後部的各種渲染單元,如霧化,Alpha混合等大幅削減,使得流水線在一定程度上公用這些單元
NV30的構架組成形式基本上與之相當,只是數目上略有不同
由於這個構架並不是傳統意義上的4*2或者8*1的固定構架,我們不能象過去那樣說NV35「每個流水線具有2個紋理帖圖單元」或者「每條管線具有3個Shader流水線」……我們只能說「NV35單位周期可以完成8次左右的紋理貼圖或者12次Shader操作」
另外,由於NV3X對於Fixed-Point Shader的支持精度是FP16和FP32,同時NV3X的Shader流水線的單位Fixed- Point Shader處理精度是16位,所以當遇到32位Fixed-Point Shader數據時,能進行Fixed-Point Shader 數據處理的8條Shader流水線也會根據情況進行搭配來運算32位的Fixed-Point Shader數據
Pixel Programs往往是由多條指令構成的,不同的指令需要不同的執行時間來完成,每個像素必須在應用在它「身上」的Pixel Shader 操作完成後才能由像素流水線寫入到幀緩存里。故此,對於應用了Piexl Shader的像素實際上是需要多個以上的周期才能寫入到幀緩存里,如果採用8 條完整的渲染流水線的話, 流水線後面的霧化、色彩混合等單元很多時候都會處在等待階段,這部分單元需要佔用的晶體管數量不在少數,如果這樣浪費就怪可惜 的,砍掉後其中的霧化等單元後,對整體的性能雖然有一些影響,但是卻可以把節省下來的晶體管用於加強Pixel Shader的功能和性能上來,同時可以 保證比較高的多重紋理效率,利大於弊。
簡單的,這個有點詭異的體系節省晶體管的同時能確保相對較好的Pixel Shader效能,同時還有極高的多重貼圖效能
nVidia本指望4條Pixel管線+ 12條Shader流水線的設計能夠在現在以及未來較長的一段時間的游戲里提供超過4條甚至8條 Pixel Pipeline顯卡的效能。不過,實際情況卻與nVidia的初衷有些背道而馳,Shader的完美應用帶來的一個結果就是越來越好的非多 紋理光效果,傳統的多紋理貼圖才能表現的很好的光效果現在只需要進行一次貼圖或者直接使用Shader就可以達到,這使得NV3X的設計成為了空架子,實 用意義大大降低,而在單紋理處理過程中由於NV3X的後續效果單元被削減,它的渲染效能註定沒有傳統的完整流水線高,另外,由於DX9中的最終FP精度被 定義為FP24,這導致了NV3X的相對低下的FP效能。最終,本來「先進」的NV3X構架落的個整體效能低下的下場
從本質上來講,圖形數據在NV3X中的實際處理過程依然是沿著頂點處理器—Setup Engine—像素流水線的順序進行的,這與R3XX以及所有的第二代GPU是相同的
天堂的入口—可編程Shader3.0,DriectX Next以及未來的GPU
在微軟剛剛公布的Driect9.0C中,Vertex Shader和Piexl Shader已經具有了幾乎相同的能力,而在nVidia新發布的第 四代GPU—NV40中,我們發現Vertex Shader包含了4個紋理取樣器,可以使用texld指令進行查表操作, NV40可以在一個 shader pass里完成4個紋理的讀取,這個對於通用替換貼圖而言相當的重要,有了vertex texturing功能後, vertex shader就能讀取紋理信息直接映射到頂點上,以實現displacement mapping(位移映射)等等效果,用不同的紋理和較 少的頂點傳輸時間就能實現外形復雜、平滑的模型,這表明GPU中Vertex Shader的功能正在逐漸接近Piexl Shader。隨著GPU的發 展,未來GPU中的Vertex Shader和Piexl Shader最終將被合並成一個統一的處理單元—Intergrated Shader,兩 種處理單元將使用完全相同的語法以及指令集,Shader的統一將帶來完全不同與現在的數據執行處理方式,GPU的內部結構將發生本質的變化, Intergrated Shader帶來了更低晶體管數目的解決方案,以更少的晶體管數目來完成現在需要數億晶體管才能完成的功能,同時統一 Shader將引出類似全通用I/O介面的設計以利資源的更合理的傳輸和分配,同時,為了解決越來越龐大的數據量,虛擬顯存、無限資源訪問以及幀緩沖操作 等技術的引入也勢在必行。另外,我們在DirectX Next中還發現了整數指令集,處理器等特殊的定義,這些新穎的設計為我們勾勒出了未來GPU的輪 廓
整數指令集
在編程中不必在擔心指令限制是一個很大的進步,不過想使得GPU更為通用還需要更多的工作。一個需要提高的主要區域就是整數處理能力。目前基於在著色器中 處理的所有數據都是浮點,這對於大多數顯卡操作而言是沒有問題的,不過不適合動態分支預測、非內插式顯存搜索(如頂點緩沖的索引)等操作。在目前的GPU 中,唯一的內存定址就是紋理查找,使用的也是浮點值。這樣的情況對於紋理定位而言沒有什麼問題,不過對於通用內存定址而言就不合適了,這里的連續內存塊可 以完全彼此沒有關聯,採用內插式查找沒有任何意義。微軟對於這樣的情況,在4.0版的Shader模型中引入了全新的、完整的整數指令集。拓撲處理器實際 上,目前的顯卡可以在某些情況下新生成三角形,比如在用到直線以及點的時候。大多數的娛樂級顯卡只具備對三角形進行光柵化處理的能力,這也就意味著所有的 點、線就必須轉化為三角形。點和線在最後都將以2個三角形結束,這樣就需要用到2-6個頂點(根據索引方式的不同而變化)。從本質上來說,這樣的做法是有 益處的,通過可編程的管線,顯示先前應該遮蔽的場景也就無需通過CPU,而可以通過微軟的「拓撲處理器」直接完成。從邏輯上來說,這個拓撲處理器和鑲嵌單 元是相互獨立的,這個處理器在兩種操作集中均可以使用。由目前的趨勢來看,未來的GPU將向著高運算能力,高精度,高通用性的方向發展,GPU在工作方式 上將越來越接近CPU,由於高通用性等CPU特性的引入,GPU可能在一定程度上替代一部分CPU在非繪圖領域的工作,也許在未來我們會看到由全GPU組 成的圖形工作站。盡管未來GPU需要面對由於這些改進而帶來得的諸多問題,尤其是通用性導致的效率低下,比如Intergrated Shader的效率 低下,但隨著時間的推移,各種問題都將會得到妥善的解決。

Ⅸ c# 如何使用gpu計算

如何通過編程將GPU用於通用計算任務

隨著現代圖形處理器(GPU)可編程能力及性能的提高,應用開發商們一直希望圖形硬體可以解決以前只有通用CPU才能完成的高密集計算任務。盡管利用通用GPU進行計算很有發展前景,但傳統圖像應用編程介面仍然將GPU抽象成一個包括紋理、三角形和像素在內的圖像繪制器。尋找一種能夠使用這些基本元素的映射演算法並不是一項簡單的操作,即便對最先進的圖形開發商而言也是如此。
幸運的是,基於GPU的計算從概念上講很容易理解,並且現有多種高級語言和軟體工具可以簡化GPU的編程工作。但是,開發商必須首先了解GPU在圖像繪制過程中是如何工作的,然後才能確定可用於計算的各個組件。
在繪制圖像時,GPU首先接收宿主系統以三角頂點形式發送的幾何數據。這些頂點數據由一個可編程的頂點處理器進行處理,該處理器可以完成幾何變換、亮度計算等任何三角形計算。接下來,這些三角形由一個固定功能的光柵器轉換成顯示在屏幕上的單獨「碎片(fragment)」。在屏幕顯示之前,每個碎片都通過一個可編程的碎片處理器計算最終顏色值。

計算碎片顏色的運算一般包括集合向量數學操作以及從「紋理」中提取存儲數據,「紋理」是一種存儲表面材料顏色的點陣圖。最終繪制的場景可以顯示在輸出設備上,或是從GPU的存儲器重新復制到宿主處理器中。
可編程頂點處理器和碎片處理器提供了許多相同的功能和指令集。但是,大部分GPU編程人員只將碎片處理器用於通用計算任務,因為它通常提供更優的性能,而且可以直接輸出到存儲器。
利用碎片處理器進行計算的一個簡單例子是對兩個向量進行相加。首先,我們發布一個大三角形,其所包含的碎片數量和向量大小(容納的元素)相同。產生的碎片通過碎片處理器進行處理,處理器以單指令多數據(SIMD)的並行方式執行代碼。進行向量相加的代碼從存儲器中提取兩個待加元素,並根據碎片的位置進行向量相加,同時為結果分配輸出顏色。輸出存儲器保存了向量和,這個值在下一步計算中可以被任意使用。
可編程碎片處理器的ISA類似於DSP或Pentium SSE的指令集,由四路SIMD指令和寄存器組成。這些指令包括標准數·運算、存儲器提取指令和幾個專用圖形指令。
GPU與DSP的比較
GPU在幾個主要方面有別於DSP架構。其所有計算均使用浮點演算法,而且目前還沒有位或整數運算指令。此外,由於GPU專為圖像處理設計,因此存儲系統實際上是一個二維的分段存儲空間,包括一個區段號(從中讀取圖像)和二維地址(圖像中的X、Y坐標)。
此外,沒有任何間接寫指令。輸出寫地址由光柵處理器確定,而且不能由程序改變。這對於自然分布在存儲器之中的演算法而言是極大的挑戰。最後一點,不同碎片的處理過程間不允許通信。實際上,碎片處理器是一個SIMD數據並行執行單元,在所有碎片中獨立執行代碼。
盡管有上述約束,但是GPU還是可以有效地執行多種運算,從線性代數和信號處理到數值模擬。雖然概念簡單,但新用戶在使用GPU計算時還是會感到迷惑,因為GPU需要專有的圖形知識。這種情況下,一些軟體工具可以提供幫助。兩種高級描影語言CG和HLSL能夠讓用戶編寫類似C的代碼,隨後編譯成碎片程序匯編語言。這些語言編譯器可以從Nvidia和微軟公司的網站免費下載。盡管這些語言大大簡化了描影匯編代碼的編寫,但實際應用時仍然必須使用圖形API來建立並發布計算任務。
Brook是專為GPU計算設計,且不需要圖形知識的高級語言。因此對第一次使用GPU進行開發的工作人員而言,它可以算是一個很好的起點。Brook是C語言的延伸,整合了可以直接映射到GPU的簡單數據並行編程構造。
經GPU存儲和操作的數據被形象地比喻成「流」(stream),類似於標准C中的數組。核心(Kernel)是在流上操作的函數。在一系列輸入流上調用一個核心函數意味著在流元素上實施了隱含的循環,即對每一個流元素調用核心體。Brook還提供了約簡機制,例如對一個流中所有的元素進行和、最大值或乘積計算。
Brook編譯器是一個源到源的編譯器,能夠把用戶的核心代碼映射成碎片匯編語言,並生成C++短代碼,從而鏈接到大型應用中。這允許用戶只把應用中的性能關鍵部分輸入Brook。Brook還完全隱藏了圖形API的所有細節,並把GPU中類似二維存儲器系統這樣許多用戶不熟悉的部分進行了虛擬化處理。
用Brook編寫的應用程序包括線性代數子程序、快速傅立葉轉換、光線追蹤和圖像處理。Brook的編譯器和實時運行環境可以從http://brook網站上免費獲取。
sourceforge.net網站也為許多此類應用提供資源。利用ATI的X800XT和Nvidia的GeForce 6800 Ultra型GPU,在相同高速緩存、SSE匯編優化Pentium 4執行條件下,許多此類應用的速度提升高達7倍之多。
對GPU計算感興趣的用戶努力將演算法映射到圖形基本元素。類似Brook這樣的高級編程語言的問世使編程新手也能夠很容易就掌握GPU的性能優勢。訪問GPU計算功能的便利性也使得GPU的演變將繼續下去,不僅僅作為繪制引擎,而是會成為個人電腦的主要計算引擎。

Ⅹ 關於GPU的問題!

目錄:
第一章:第二代及以後的GPU工作流程簡介
第二章:DirectX8和DirectX9 GPU的傳統流水線
第三章:頂點和像素操作指令
第四章:傳統GPU指令的執行
第五章:統一渲染架構
第六章:G80和R600的統一渲染架構實現
第七章:G80與R600效能對比
第八章:尷尬的中端--Geforce8600簡析

前面4章 我將先簡要介紹下DirectX8/9顯卡的核心----圖形處理單元GPU的工作流程和指令處理情況
從第5章開始討論統一渲染架構、新一代DirectX10 GPU的特性,G80/Geforce8800與R600/RadeonHD2900XT的架構具體實現及其區別。最後將會對中端最受關注的Geforce8600進行相應的簡單分析。

第一章:第二代及以後的GPU工作流程簡介

簡單(而不一定絕對科學)的說:GPU主要完成對3D圖形的處理--圖形的生成渲染。

GPU的圖形(處理)流水線完成如下的工作:(並不一定是按照如下順序)
頂點處理:這階段GPU讀取描述3D圖形外觀的頂點數據並根據頂點數據確定3D圖形的形狀及位置關系,建立起3D圖形的骨架。在支持DX8和DX9規格的GPU中,這些工作由硬體實現的Vertex Shader(定點著色器)完成。
光柵化計算:顯示器實際顯示的圖像是由像素組成的,我們需要將上面生成的圖形上的點和線通過一定的演算法轉換到相應的像素點。把一個矢量圖形轉換為一系列像素點的過程就稱為光柵化。例如,一條數學表示的斜線段,最終被轉化成階梯狀的連續像素點。
紋理帖圖:頂點單元生成的多邊形只構成了3D物體的輪廓,而紋理映射(texture mapping)工作完成對多變形表面的帖圖,通俗的說,就是將多邊形的表面貼上相應的圖片,從而生成「真實」的圖形。TMU(Texture mapping unit)即是用來完成此項工作。
像素處理:這階段(在對每個像素進行光柵化處理期間)GPU完成對像素的計算和處理,從而確定每個像素的最終屬性。在支持DX8和DX9規格的GPU中,這些工作由硬體實現的Pixel Shader(像素著色器)完成。
最終輸出:由ROP(光柵化引擎)最終完成像素的輸出,1幀渲染完畢後,被送到顯存幀緩沖區。

總結:GPU的工作通俗的來說就是完成3D圖形的生成,將圖形映射到相應的像素點上,對每個像素進行計算確定最終顏色並完成輸出。

第二章:DirectX8和DirectX9 GPU的傳統流水線

前面的工作流程其實已經說明了問題。本章來總結一下,承前啟後。
傳統的GPU功能部件我們不妨將其分為頂點單元和像素流水線兩部分。
頂點單元由數個硬體實現的Vertex Shader組成。
傳統的像素流水線由幾組PSU(Pixel Shader Unit)+TMU+ROP組成。
於是,傳統的GPU由頂點單元生成多邊形,並由像素流水線負責像素渲染和輸出。

對於像素流水線需要做的說明是:雖然傳統的流水線被認為=1PSU+1TMU+1ROP,但這個比例不是恆定的,例如在RadeonX1000(不包括X1800)系列中被廣為稱道的3:1黃金架構,PSU:TMU:ROP的數量為3:1:1。一塊典型的X1900顯卡具有48個PSU,16個TMU和16個ROP。之所以採用這種設計方法,主要考慮到在當今的游戲中,像素指令數要遠遠大於紋理指令的數量。ATI憑借這個優秀的架構,成功擊敗了Geforce7,在DX9後期取得了3D效能上的領先。

總結:傳統的GPU由頂點單元生成多邊形,像素流水線渲染像素並輸出,一條像素流水線包含PSU,TMU,和ROP(有的資料中不包含ROP),比例通常為1:1:1,但不固定。

第三章:頂點和像素操作指令

GPU通過執行相應的指令來完成對頂點和像素的操作。
熟悉OpenGL或Direct3D編程的人應該知道,像素通常使用RGB三原色和alpha值共4個通道(屬性)來描述。而對於頂點,也通常使用XYZ和W 4個通道(屬性)來描述。因而,通常執行一條頂點和像素指令需要完成4次計算,我們這里成這種指令為4D矢量指令(4維)。當然,並不是所有的指令都是4D指令,在實際處理中,還會出現大量的1D標量指令以及2D,3D指令。

總結:由於定點和像素通常用4元組表示屬性,因而頂點和像素操作通常是4D矢量操作,但也存在標量操作。

第四章:傳統GPU指令的執行

傳統的GPU基於SIMD的架構。SIMD即Single Instruction Multiple Data,單指令多數據。
其實這很好理解,傳統的VS和PS中的ALU(算術邏輯單元,通常每個VS或PS中都會有一個ALU,但這不是一定的,例如G70和R5XX有兩個)都能夠在一個周期內(即同時)完成對矢量4個通道的運算。比如執行一條4D指令,PS或VS中的ALU對指令對應定點和像素的4個屬性數據都進行了相應的計算。這便是SIMD的由來。這種ALU我們暫且稱它為4D ALU。
需要注意的是,4D SIMD架構雖然很適合處理4D指令,但遇到1D指令的時候效率便會降為原來的1/4。此時ALU 3/4的資源都被閑置。為了提高PS VS執行1D 2D 3D指令時的資源利用率,DirectX9時代的GPU通常採用1D+3D或2D+2D ALU。這便是Co-issue技術。這種ALU對4D指令的計算時仍然效能與傳統的ALU相同,但當遇到1D 2D 3D指令時效率則會高不少,例如如下指令:
ADD R0.xyz , R0,R1 //此指令是將R0,R1矢量的x,y,z值相加 結果賦值給R0
ADD R3.x , R2,R3 //此指令是將R2 R3矢量的w值相加 結果賦值給R3
對於傳統的4D ALU,顯然需要兩個周期才能完成,第一個周期ALU利用率75% ,第二個周期利用率25%。而對於1D+3D的ALU,這兩條指令可以融合為一條4D指令,因而只需要一個周期便可以完成,ALU利用率100%。
但當然,即使採用co-issue,ALU利用率也不可能總達到100%,這涉及到指令並行的相關性等問題,而且,更直觀的,上述兩條指令顯然不能被2D+2D ALU一周期完成,而且同樣,兩條2D指令也不能被1D+3D ALU一周期完成。傳統GPU在對非4D指令的處理顯然不是很靈活。

總結:傳統的GPU中定點和像素處理分別由VS和PS來完成,每個VS PS單元中通常有一個4D ALU,可以在一個周期完成4D矢量操作,但這種ALU對1D 2D 3D操作效率低下,為了彌補,DX9顯卡中ALU常被設置為1D+3D 2D+2D等形式。

第五章:統一渲染架構

相對於DirectX 9來說,最新的DirectX 10最大的改進在於提出了統一渲染架構,即Unified Shader。
傳統的顯卡GPU一直採用分離式架構,頂點處理和像素處理分別由Vertex Shader和Pixel Shader來完成,於是,當GPU核心設計完成時,PS和VS的數量便確定下來了。但是不同的游戲對於兩者處理量需求是不同的,這種固定比例的PS VS設計顯然不夠靈活,為了解決這個問題,DirectX10規范中提出了了統一渲染架構。
不論是頂點數據還是像素數據,他們在計算上都有很多共同點,例如通常情況下,他們都是4D矢量,而且在ALU中的計算都是沒有分別的浮點運算。這些為統一渲染的實現提供了可能。
在統一渲染架構中,PS單元和VS單元都被通用的US單元所取代,nVidia的實現中稱其為streaming processer,即流處理器,這種US單元既可以處理頂點數據,又可以處理像素數據,因而GPU可以根據實際處理需求進行靈活的分配,這樣便有效避免了傳統分離式架構中VS和PS工作量不均的情況。

總結:統一渲染架構使用US(通常為SP)單元取代了傳統的固定數目的VS和PS單元,US既可以完成頂點操作,又可以完成像素操作,因而可以根據游戲需要靈活分配,從而提高了資源利用率。

第六章:G80和R600的統一渲染架構實現

以下我們著重討論G80和R600的統一著色單元而不考慮紋理單元,ROP等因素。
G80 GPU中安排了16組共128個統一標量著色器,被叫做stream processors,後面我們將其簡稱為SP。每個SP都包含有一個全功能的1D ALU。該ALU可以在一周期內完成乘加操作(MADD)。
也許有人已經注意到了,在前面傳統GPU中VS和PS的ALU都是4D的,但在這里,每個SP中的ALU都是1D標量ALU。沒錯,這就是很多資料中提及的MIMD(多指令多數據)架構,G80走的是徹底的標量化路線,將ALU拆分為了最基本的1D 標量ALU,並實現了128個1D標量SP,於是,傳統GPU中一個周期完成的4D矢量操作,在這種標量SP中需4個周期才能完成,或者說,1個4D操作需要4個SP並行處理完成。
這種實現的最大好處是靈活,不論是1D,2D,3D,4D指令,G80得便宜其全部將其拆成1D指令來處理。指令其實與矢量運算拆分一樣。
例如一個4D矢量指令 ADD R0.xyzw , R0,R1 R0與R1矢量相加,結果賦R0
G80的編譯器會將其拆分為4個1D標量運算指令並將其分派給4個SP:
ADD R0.x , R0,R1
ADD R0.y , R0,R1
ADD R0.z , R0,R1
ADD R0.w, R0,R1
綜上:G80的架構可以用128X1D來描述。

R600的實現方式則與G80有很大的不同,它仍然採用SIMD架構。
在R600的核心裡,共設計了4組共64個流處理器,但每個處理器中擁有1個5D ALU,其實更加准確地說,應該是5個1D ALU。因為每個流處理器中的ALU可以任意以1+1+1+1+1或1+4或2+3等方式搭配(以往的GPU往往只能是1D+3D或2D+2D)。ATI將這些ALU稱作streaming processing unit,因而,ATI宣稱R600擁有320個SPU。
我們考慮R600的每個流處理器,它每個周期只能執行一條指令,但是流處理器中卻擁有5個1D ALU。ATI為了提高ALU利用率,採用了VLIW體系(Very Large Instruction Word)設計。將多個短指令合並成為一組長的指令交給流處理器去執行。例如,R600可以5條1D指令合並為一組5DVLIW指令。
對於下述指令:
ADD R0.xyz , R0,R1 //3D
ADD R4.x , R4,R5 //1D
ADD R2.x , R2,R3 //1D
R600也可以將其集成為一條VLIW指令在一個周期完成。
綜上:R600的架構可以用64X5D的方式來描述。

總結:G80將操作徹底標量化,內置128個1D標量SP,每個SP中有一個1D ALU,每周期處理一個1D操作,對於4D矢量操作,則將其拆分為4個1D標量操作。
R600仍採用SIMD架構,擁有64個SP,每個SP中有5個1D ALU,因而通常聲稱R600有320個PSU,
每個SP只能處理一條指令,ATI採用VLIW體系將短指令集成為長的VLIW指令來提高資源利用率,例如5條1D標量指令可以被集成為一條VLIW指令送入SP中在一個周期完成。

第七章:G80與R600效能對比

從前一章的討論可以看出,R600的ALU規模64X5D=320明顯比G80的128X1D=128要大,但是為何在實際的測試中,基於R600的RadeonHD2900XT並沒有取得對G80/Geforce8800GTX的性能優勢?本章將試圖從兩者流處理器設計差別上來尋找答案,對於紋理單元,ROP,顯存帶寬則不做重點討論。事實上,R600的顯存帶寬也要大於G80。
我們將從頻率和執行效能兩個方面來說明問題:
1、頻率:G80隻擁有128個1D流處理器,在規模上處於絕對劣勢,於是nVidia採用了shader頻率與核心頻率非同步的方式來提高性能。Geforce8800GTX雖然核心頻率只有575MHZ,但shader頻率卻高達1375MHZ,即SP工作頻率為核心頻率的兩倍以上,而R600則相對保守地採用了shader和核心同步的方式,在RadeonHD2900XT中,兩者均為740MHZ。這樣一來,G80的shader頻率幾乎是R600的兩倍,於是就相當於同頻率下G80的SP數加倍達到256個,與R600的320個接近了很多。在處理乘加(MADD)指令的時候,740MHZ的R600的理論峰值浮點運算速度為:740MHZ*64*5*2=473.6GFLOPS 而shader頻率為1350MHZ的G80的浮點運算速度為:1350MHZ*128*1*2=345.6GFLOPS,兩者的差距並不像SP規模差距那麼大。
2、執行效能:G80雖說shader頻率很高,但由於數量差距懸殊,即使非同步也無法補回理論運算速率的差距。於是,要尋找答案,還要從兩者流處理器的具體設計著手。
在G80中,每個矢量操作都會被拆分為1D標量操作來分配給不同的SP來處理,如果不考慮指令並行性等問題,G80在任何時刻,所有SP都是充分利用的。而R600則沒這么幸運,因為每個流處理器只能同時處理一條指令,因而R600要將短指令合並為能充分利用SP內5DALU運算資源的VLIW指令,但是這種合並並不是總能成功。目前沒有資料表明R600可以將指令拆開重組,也就是說,R600不能每時每刻都找到合適的指令拼接為5D指令來滿載他的5D SP,這樣的話我們假設處理純4D指令的情況,不能拆分重組的話,R600每個SP只能處理一條4D指令,利用率80%,而對於G80,將指令拆開成1D操作,無論何時都能100%利用。而且,R600的結構對編譯器的要求很高,編譯器必須盡可能尋找Shader指令中的並行性,並將其拼接為合適的長指令,而G80則只需簡單拆分即可。
另外還需要說明的一點是,R600中每個SP的5個1D ALU並不是全功能的,據相關資料,每組5個ALU中,只有一個能執行函數運算,浮點運算和Multipy運算,但不能進行ADD運算,其餘的4各職能執行MADD運算。而G80的每個1D ALU是全功能的,這一點也在一定程度上影響了R600的效能。

總結:雖然R600的ALU規模遠大於G80,但G80的SP運行頻率幾乎是R600的兩倍,而且G80的體系架構採用完全標量化的計算,資源利用率更高,執行效能也更高,因而總體性能不落後於R600。

第八章:尷尬的中端--Geforce8600簡析

在新一代中端顯卡中,最早發布也是最受關注的莫過於nVidia的G84---Geforce8600系列。
但是相比其高高在上的價格,它的性能表現實在不盡如人意,很多測試中均落後於價格低於它的老一代高端顯卡Geforce7900GS。本章將利用前面討論的結論對G84核心的SP處理能力作簡要地分析。
G84是G80核心的高度精簡版本,SP數量從G80的128個銳減為32個,顯存位寬也降為1/3--128bit。
拋開顯存位寬和TMU ROP,我們著重看SP,G84的SP頻率與核心頻率也不相同,例如8600GT,核心頻率只有540MHZ,shader頻率卻高達1242MHZ,即核心頻率的兩倍多,我們粗略按兩倍記,則G84核心相當於核心shader同步的64(個1D標量) SP,而傳統的VS和PS中ALU是4D的,於是可以說G84的計算能力相當於傳統VS和PS總數為64/4=16的顯卡,粗略比較,它與Geforce7600(PS+VS=17)的計算能力相近。但當然,事實這樣比較是有問題的,因為在G7X中,每個PS中有兩個4D ALU,因而7600的運算能力高於傳統PS+VS=17的顯卡。下面的計算就說明了問題:(MADD操作)
對於7600GT ,VS為4D+1D PS為4D+4D 核心頻率560MHZ 理論峰值浮點運算速度:
560MHZ*(12*(4+4)+5*(1+4))*2=135.52GFLOPS
而對於8600GT:1242MHZ*32*1*2=79.4GFLOPS
由此可見,8600GT的峰值運算速度甚至遠低於上代的7600GT,更不用跟7900GS相比了。但是,實際情況下,迫於傳統架構所限,G7X滿載的情況基本不可能出現,G7X的實際運算速率要遠低於理論值,而對於G8X架構,執行效率則高很多,實際運算速率會更加接近理論極限。而且支持SM4.0的G8X寄存器數目也要遠多於G7X,眾多效率優勢,使得Geforce8600GT僅憑借少量的SP就足以擊敗上代中端7600GT。
但是作為DX10顯卡,僅僅擊敗7600GT顯然不是最終目標,僅32SP的它在計算量要求空前之高的DX10游戲中表現極差,根本不能滿足玩家要求。

總結:8600GT性能上取代7600GT的目標憑借著高效的統一渲染架構總算勉強完成,但過少的SP數量使得其顯然難以擊敗上代高端,更不用說流暢運行DX10游戲了,而高高在上的價位更使其處境不利,歸根到底,nVidia對G84 SP數量的吝嗇以及過高的價格定位造就了Geforce8600的尷尬,因此,就目前的情況來看,選用8600系列顯然不如Geforce7900和RadeonX1950GT來的劃算。

閱讀全文

與gpu信息如何傳給演算法相關的資料

熱點內容
redhatlinux安裝包下載 瀏覽:738
程序員日常穿衣 瀏覽:107
世界頂級程序員書 瀏覽:375
php無bom 瀏覽:83
2345壓縮和360壓縮 瀏覽:929
國外女程序員圖片 瀏覽:193
pdf背景音樂 瀏覽:111
如何驗證php安裝成功 瀏覽:776
蘋果手機怎麼藍牙發送照片給安卓 瀏覽:666
phpsmarty自定義函數 瀏覽:867
對稀疏矩陣進行壓縮的目的是 瀏覽:950
單片機矩陣鍵盤電路 瀏覽:663
php按鈕顏色代碼 瀏覽:811
手機百度該怎麼連接伺服器 瀏覽:492
安卓軟體怎麼還原之前的版本 瀏覽:880
什麼app可以看舌神綜藝 瀏覽:291
vba編好的程序編譯出來 瀏覽:105
如何清空伺服器數據 瀏覽:48
android計劃軟體 瀏覽:399
vivo手機文件夾加密路徑 瀏覽:147