gpu的单位表示_GPU是如何工作的
早在1990年,無處不在的交互式3D圖形還只是科幻小說里的東西。十年后,基本上每臺新電腦都包含一個圖形處理單元(GPU,即Graphics processing unit)。直到今天,GPU的原始計算能力已經超越最強大的CPU,并且差距還在穩步增大。今天,GPU可以直接使用圖形硬件來實現許多并行算法。那些利用底層計算能力的適當的算法常常會獲得巨大的速度提升。
任何3D圖形系統的任務都是根據一個場景的描述來合成一張圖片 --- 對實時渲染圖形學(例如游戲)來說是每秒60張。這個場景包含了可觀察的幾何圖元以及燈光照亮場景的描述,每個對象反射光照的方式和觀察者的位置、朝向。
圖形管線輸入
大多數實時圖形系統假設所有東西都是由三角形組成的,它們首先將任何復雜的形狀(例如四邊形,曲面)劃分為三角形。開發者使用圖形庫(例如OpenGL或者Direct3D)將每個三角形傳遞給圖形管線,每次傳遞一個頂點,GPU根據需要將頂點組合成三角形。
模型轉換
GPU能夠以每個對象自己定義的本地坐標系來指定場景中的對象,這對于按層次定義的對象來說是很方便的。但這種方便是有代價的:在渲染前,GPU首先必須轉換所有的對象到一個公共的坐標系中。為了確保三角形不會變形和扭曲,轉換被限定在一些簡單的仿射操作如旋轉、平移、縮放以及類似的操作。這個階段的輸出是一連串的三角形,這些三角形被轉換到一個公共的坐標系中,在這個坐標系中,觀察者位于原點,朝向z軸正方向。
光照
一旦每個三角形都被轉換到一個全局坐標系中,GPU就可以基于場景中的光源來計算它的顏色了。GPU通過累加每個獨立的光源的貢獻量來處理多光源效果。傳統的圖形管線支持Phong光照模型,Phong光照模型按如下公式輸出顏色C = Kd × Li ×?(N.L) + Ks × Li × (R.V)^S,其中Kd是漫反射顏色,Li是光源顏色,N是表面法向量,L是頂點到光源的向量,Ks是鏡面光顏色,R是光源到頂點的反射向量,V是頂點到攝像機的向量,S是光亮強度。
攝像機模擬
圖形管線接著將每個著色的三角形投射到虛擬攝像機平面。這個階段的輸出是一連串在屏幕坐標系中的準備被轉換為像素的三角形。
光柵化
每個可見的屏幕空間中的三角形在顯示時會導致像素重疊,確定最佳接近圖形的像素集合的過程成為光柵化。GPU設計者多年來合并了許多光柵化算法,都利用了至關重要的一點:每個像素都可以獨立于其他任何像素被對待處理。因此,機器能夠并行的處理所有像素 --- 確實有一些奇異的機器對于每一個像素都有一個處理器。這個固有的獨立性導致GPU設計者去構建逐漸并行的管線集合。
紋理
盡管每個像素的顏色可以通過光照計算產生,但為了真實感,常常會在幾何體上使用紋理。GPU把這些紋理存儲在高速存儲器中,當計算每個像素的顏色時需要訪問該存儲器。實際上,當紋理出現在屏幕上的尺寸比它的原始尺寸大或者小時,對于每個像素,GPU都需要多次訪問紋理進行采樣以減少視覺誤差。由于對于存儲紋理的高速存儲器的訪問模式通常非常有規則(鄰近像素常常訪問鄰近的紋理坐標進行采樣),所以特定的緩存設計將幫助隱藏存儲器訪問的延遲。
隱藏表面
在許多場景中,一些對象會遮掩另一些對象。如果每個像素只是被簡單的寫入顯存的話,那么最近提交的三角面將會顯示。所有的現代GPU都提供了一個深度緩存,深度緩存是用來存儲每個像素到觀察者的距離的一塊內存區域。新像素在寫入顯存之前,GPU會將新像素到觀察者的距離值與已經在深度緩存中的值進行比較,如果新像素到觀察者的距離更近的話,GPU將會更新深度緩存中的值。
齊次坐標
在三維世界中通常將點表示為(x, y, z)。然而在計算機圖形學中,添加第四個坐標w通常很有用。為了將一個點轉換為新的表現形式,我們設置w = 1。當要還原回原始點的時候,我們執行下面的轉換:(x, y, z, w) -> (x/w, y/w, z/w)。盡管乍看之下貌似沒什么必要,但這種方式有巨大的優點。例如我們可以將向量(x, y, z)表示為(x, y, z, 0)。通過這種對于向量和點的統一的表示方法,我們就可以執行一些有用的變換,例如矩陣-向量乘法。
發展進化的圖形管線
傳統的圖形管線只提供8位的整型值供顏色只用,允許的范圍從0到255。ATI Radeon 9700開始支持24位的浮點值,NVIDIA GeForce FX則支持16位以及32位的浮點值。現在的顯卡已經支持64位雙精度浮點值了。為了趕得上對于圖形性能的需求,GPU積極包含并行設計,現在的顯卡的Stream Processors(流處理器)數量已經越來越多。
下圖是發展進化的圖形管線:
GPGPU
實時計算機圖形的高度并行的工作量要求極高的運算吞吐量以及流內存帶寬,但是因為最終的圖片每16毫秒才顯示一次,所以在單獨計算中可以容忍相當大的延遲。這些特征塑造了底層GPU架構:GPU為高吞吐量進行優化,而CPU為低延遲進行優化。GPU的原始計算能力是十分驚人的:GeForce 8800芯片每秒可以執行3300億次浮點運算操作。GPU不斷增長的能力,可編程性以及精度激發了大量的通用計算圖形硬件(general-purpose computation on graphics hardware)的研究 - 簡稱GPGPU。GPGPU的研究者和開發者使用GPU作為一個計算協處理器而不是圖片合成設備。
總結
以上是生活随笔為你收集整理的gpu的单位表示_GPU是如何工作的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python划分有限元网格_有限元网格划
- 下一篇: hal库选择滴答时钟函数_STM32入门