青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

麒麟子

~~

導航

<2010年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

統計

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

優化3D圖形流水線

轉自:http://hi.baidu.com/freedomknightduzhi/blog/item/7e401a9b2521eeb3c9eaf4f1.html
在使用NVIDIA PerfHUD 5 Launcher的時候,明顯發現現在的CPU時間和GPU時間不均衡,于是考慮優化。
下面是參考NVIDIA的OGP開始總結。
優化代碼通常是找出瓶頸,對瓶頸進行優化,這里暫不考慮CPU內部的優化方法,主要記錄CPU->GPU的3D渲染流水線的瓶頸查出方法以及優化手段。
若僅希望進行CPU方面的優化,可使用一些輔助工具,如Inter的Intel(R) VTune(TM) Performance Analyzer,Intel(R) Thread Profiler 3.1,AMD的CodeAnalyst等。
進行優化的步驟如上面所說:1:找出瓶頸,2:對其優化。
最通用也最有效的找出瓶頸的方法當然是找到核心函數,降低它的時鐘周期和負荷,看是否對程序性能有大的影響。優化的手段多是拆東補西而已,即,將影響性能的瓶頸中的任務分配給其他較空閑的部分進行處理,來平衡整體所消耗的時間。
那么來看一下圖形渲染流水線大致過程。
1:系統CPU從內存中讀取幾何頂點 -> 輸送到GPU顯存 -> 輸送到GPU高速頂點緩沖區 -> GPU頂點著色 -> GPU建立三角型 -> GPU矩陣變換 -> GPU光柵化 -> 3
2:系統CPU從內存中讀取紋理信息 -> 輸送到GPU顯存 -> 輸送到GPU高速紋理緩沖區( DX10.0以后可與頂點緩沖共同,不再強制區分 ) -> 3
3:片段著色光柵化 -> 輸出GPU后臺緩沖進行渲染。
那么,很簡單的有幾大模塊在其中可能存在著瓶頸的限制。

1:CPU本身邏輯計算能力的限制。

2:CPU到GPU顯存AGP傳輸能力的限制
(1)頂點
(2)紋理
3:GPU顯存到高速緩沖區的傳輸帶寬限制
(1)紋理傳輸帶寬限制     (顯存->高速緩沖區)
(2)光柵化完畢后的楨傳輸帶寬限制 (高速緩沖區->顯存)
注:這里不考慮 頂點 傳輸的帶寬限制,因為這個限制極小
4:GPU高速緩沖區內部處理能力的限制。
(1)頂點變換著色處理能力限制。
(2)頂點最大數量支持限制。
(3)三角型建立限制。
(4)光柵化限制。
(5)象素著色限制。
5:內存過小限制。
6:顯卡顯存過小,以及其他硬件Caps限制。

上述就是常見3D圖形渲染流水線中的瓶頸限制,那么我們下一步去一一確定,可能是哪方面的瓶頸。簡單的方法是檢測FPS。
注意1:許多瓶頸可能由于硬件更變而更變。
注意2:Debug模式和Release模式的瓶頸表現未必相同。
注意3:查看FPS時候一定關閉垂直同步。
1:改變色深,16bit,32bit,這個是直接影響 楨渲染緩沖 的大小的,若修改了此項之后,FPS有較大變化,則是由于3.2 楨傳輸帶寬限制。
注:這里需要改變所有渲染對象的色深。
2:改變紋理大小尺寸,改變紋理過濾方式,若修改了此項之后,FPS有較大變化,則是由于3.1 紋理傳輸帶寬的限制 或 2.2 紋理AGP傳輸能力限制。
注:紋理過濾方式中,點過濾速度 > 線性過濾速度 > 三角面過濾速度 > 各向異性過濾速度 若改變紋理過濾方式就將FPS提高了,則是3.1 紋理傳輸帶寬的限制。這步是將紋理數據從顯存運輸到GPU高速紋理緩沖區的過程。
3:改變桌面分辨率,若修改了此項之后,FPS有較大變化,則是由于 4.4 光柵化限制 或是 4.5 象素著色Shader限制。
此時減少 PixelShader指令數量,若修改了此項之后,FPS有較大變化,則是由于 4.5 象素著色Shader限制,若沒有較大變化,則是由于 4.4 光柵化限制。
4:減少 VertexShader 指令數量,若修改了此項之后,FPS有較大變化,則是由于 4.1 頂點變換著色處理能力限制。
5:減少頂點數量和AGP傳輸速率,若修改了此項之后,FPS有較大變化,則是由于 4.2 頂點最大數量支持限制 或 2.1 頂點AGP傳輸能力限制。
6:若以上都不是,則是 1.0 CPU邏輯計算能力限制。
注:該項也可根據NVIDIA PerfHUD來檢測CPU和GPU的空閑時間來判定,若GPU空閑時間過多,則說明是由于CPU計算能力或AGP傳輸能力導致。
該項也可用簡單的更換CPU,而不更換GPU的方式來檢測判定。
7:看資源管理器,CPU占用率,內存占用率,可以知道是否是由于1.0 CPU本身邏輯計算能力的限制 或是 5.0內存過小限制。
8:看DX SDK自帶的CapsViewer可以知道顯卡的支持性,以獲得更多更準確的判定。
9:在BIOS中更變APGP為1X模式,若修改了此項之后,FPS有較大變化,則是由于2.1 或 2.2 AGP傳輸能力限制。
10:降低GPU配置進行檢測判定,此時要注意兩項,一是降低GPU的運行頻率,一是降低GPU顯存性能和大小,可以確定GPU方面的問題大致所在。
11:刪除一些游戲中涉及的 物理,AI,邏輯 等占用大量CPU效率的代碼以獲得更強的針對性。
12:對角色,地形,靜態模型,陰影 等設置渲染開關,以更明確的確定問題所在。

優化方法:
一:整體優化。
1:減少小批量作業
(1)讓一個頂點緩沖中更多頂點。(1024點以上較適合)
(2)少Draw。(盡量一次性多渲染些三角形,減少渲染次數)
(3)盡量將多個尺寸小的紋理文件合并為一個尺寸大的紋理文件,減少零碎的小紋理文件數量。
(4)使用VertexShader將一些關系緊密的幾何體打包在一起。(VS2.0就已經存在256個4D向量常數)
2:邏輯排序優化
(1)盡量在邏輯層將頂點進行一定的排序以減少在GPU高速緩沖區中的重新排布。
(2)盡量將渲染對象在邏輯層按照深度由屏幕->內部排序,減少不必要的深度揀選。
(3)盡量使用索引條帶或索引列表
(4)根據渲染狀態和渲染對象對紋理進行基本排序
3:減少不必要的渲染(CPU層的基本二分四叉八叉這里不再強調)
(1)在多Pass渲染時,在第一個渲染Pass上對每個渲染對象加以咨詢,當第一個Pass中該渲染對象渲染象素量達不到指定標準,則后續Pass不再對其進行渲染。
(2)對一些重復渲染(如太陽眩光特效)需要進行計數,達到指定數量即停止渲染或進行分布式渲染。
(3)對一些復雜的模型設置基本的包圍盒判定其渲染必要性。
4:減少線程鎖定導致的不必要等待
(1)CPU Lock了一個資源,等待GPU進行渲染,此時常見做法有等待GPU渲染,中間期間CPU經常處于Idle空閑狀態,建議此時給CPU其他的事情做,如為下一個資源做好基本準備或進行邏輯處理。
5:減少或平均分布CPU壓力(實際上,大部分程序是CPU邏輯計算限制的)
(1)CPU壓力重點在以下方面可能存在: AI,IO,網絡,復雜邏輯,這些部分可進行CPU瓶頸測試以確定優化方向。
(2)優化方針:寧可GPU忙碌也要CPU減壓。
(3)使用文章開始時我提到的一些工具去查找CPU中不必要的匯編空循環以及不必要的CPU空閑。
二:局部優化。
6:AGP傳輸瓶頸
(1)當過多數據通過AGP8X從CPU內存傳遞到GPU顯存時,我們可以選擇以下方式優化。
   [1]減小頂點個數
   [2]減少動態頂點個數,使用VertexShader動畫替代。
   [3]正確使用API,設置正確參數,避免動態頂點和紋理緩沖區的創建管理。
   [4]根據硬件配置屬性確定適合的 楨緩沖,紋理緩沖,靜態頂點緩沖 的大小。
(2)避免使用無序或不規則數據傳輸。
   [1]頂點數量尺寸應當是32的整數倍。(可使用頂點壓縮,再在VertexShader中對頂點數據進行解壓縮)
   [2]確保頂點的有序性。(在CPU邏輯層對其進行排序后傳輸,NVTriStrip這個工具可以幫我們生成優化的高效的有序的Mesh頂點數據)
(3)具體到API層面的幾何Mesh傳輸
   [1]對于靜態幾何體,創建 只寫的頂點緩沖,且,僅寫入一次。
   [2]對于動態幾何體,在程序初始創建一個動態頂點緩沖,之后每楨初始鎖定DISCARD,進行NOOVEWRITE而不要進行DISCARD,DISCARD的耗時不是NOOVEWRITE可比的。
   [3]基本原則,少創建緩沖區,多對其進行重復使用,減少鎖定次數。
7:頂點變換傳輸處理瓶頸(由于GPU有強大的頂點處理能力,一般在頂點變換方面不會有瓶頸出現,但假若出現了。。)
(1)頂點太多
   [1]使用細節Lod,一般起用2-3級Lod就足夠了。
(2)頂點處理過于復雜
   [1]減少燈光數量,降低燈光復雜度(方向平行光效率 > 點光源效率 > 聚光燈效率 )
   [2]減少頂點著色器指令數量,避免128條以上指令,避免大量的分支指令
   [3]對頂點進行CPU層邏輯排序
   [4]能在CPU中進行計算的在CPU中進行計算,傳遞常量給GPU
   [5]減少和避免CG/HLSL之中的 mov 指令。即使使用了,也要重點注意。
8:大部分情況下 4.3 三角形建立限制 以及 4.4 光柵化限制 是不會成為瓶頸的,但,當三角形數量過多或者光柵化時每個三角形頂點數據過于復雜時可能會出現這種瓶頸,此時減少三角形總數,使用VS或減少Z-cull三角都是有效的方法。
9:象素著色器的瓶頸(在DX7之前,全是固定渲染管道,一般來說傳輸量和著色器之間的計算是均衡的,但是DX8開始可編程流水管道開始,PixelShader的計算量開始增幅,數據傳輸量通常相對來說比較小了。)
(1)需處理的紋理片段過多過大
   [1]在CPU層按照 屏幕->向內 Z-Buffer的順序排序傳入,并按照這個順序進行渲染。
   [2]多Pass渲染時,考慮在第一個渲染Pass中關閉特效并讓第一個Pass負責Z-buffer的處理。這樣的話,后續Pass中可以避免渲染不要的紋理片段。
(2)每個紋理片段的處理過于復雜
   [1]大段的長著色器指令將會很大降低效率,嘗試減少著色器指令長度
   [2]使用向量操作,并行co-issuing來減少指令數量。
   [3]混合使用配對的簡單的texture和combiner組合指令。
   [4]使用Alpha混合器提高性能。
   [5]考慮對陰影也進行Lod計算。
   [6]在DX10開始,考慮將頂點緩沖移做象素緩沖進行使用。
(3)額外的優化方法
   [1]使用fx_12精度
   [2]使用fp16指令
   [3]使用Pixel_Shader2.0的時候開啟ps_2_a描述開關
   [4]減少寄存器的臨時存取
   [5]減少不必要的精度要求
   [6]盡量使用低版本的Shader(但避免使用VS1.0,已經被VS3.0拋棄了)
10:紋理貼圖導致的瓶頸
(1)優化方法。
   [1]紋理過濾時避免使用 三角面性過濾 和 各相異性過濾,特殊需求除外,一般線性過濾已經可以做的很好。
   [2]即使使用各相異性過濾,也要降低相異性比率。使用了各相異性過濾的話,則可以盡量減少三角面性過濾。
   [3]降低紋理分辨率,避免使用不必要的高分辨率紋理。
   [4]降低紋理色深,例如環境紋理,陰影紋理這些,盡量使用16位。
   [5]建議進行紋理壓縮,例如DXT格式就可以有效壓縮紋理,并且GPU對DXT格式支持很好。
   [6]避免使用非二次方的紋理資源。
   [7]在進行紋理銳化的時候,避免使用負值的Lod進行銳化,會導致遠處失真,盡量使用各相異性過濾進行銳化
   [8]對于動態紋理,一般建議用 D3DUSAGE_DYNAMIC D3DPOOL_DEAFAULT 進行創建緩沖,使用 D3DLOCK_DISCARD 進行鎖定,盡量做到一次鎖定多次使用,不要頻繁解鎖,另外,永遠不要讀這樣的紋理。
11:楨緩沖導致的瓶頸
(1)優化方法
   [1]盡量關閉Z-write,一般來說,在一個渲染Pass中就可以進行完整的Z-buffer處理,在后續的Pass中就應當關閉Z-write,不用擔心,即使需要Alpha混合的對象也不再需要開啟Z-write了。
   [2]盡量開始AlphaTest,實際上這個操作會提高效率,而非降低。
   [3]避免使用浮點楨緩存。
   [4]若沒有啟用模版深度緩沖的話,使用16位的Zbuffer就可以了。
   [5]避免使用RendToTexture,或者可能的去減少Rend的尺寸。
對于現在可編程流水管線來說,這意味著我們有更大的自由度實現更多的特效,但也有了更多的瓶頸和更多的復雜度,我們遇到問題要正確的獲取瓶頸所在,開動腦筋進行優化,平衡各環節間的負載。讓各環節不過載不空閑。

更多信息希望您查看Nvidia的《GPU_Programming_Guide》,翻譯成中文則是《GPU編程精粹》。以上。

posted on 2010-01-29 13:48 麒麟子 閱讀(1993) 評論(2)  編輯 收藏 引用 所屬分類: GPU and Graphic

評論

# re: 優化3D圖形流水線 2010-01-29 14:31 空明流轉

這本書明明是編程指南。。。  回復  更多評論   

# re: 優化3D圖形流水線 2010-01-29 15:51 Leaf

@空明流轉
我也想修正,不過是轉載人家的,不好動手!!!  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            性欧美暴力猛交另类hd| 久久人人97超碰精品888| 中日韩美女免费视频网站在线观看| 亚洲自拍偷拍色片视频| 欧美日本亚洲| 亚洲美女在线看| 亚洲高清久久| 久久成人精品一区二区三区| 国产伦精品一区二区三区四区免费| 这里只有精品视频在线| 亚洲精品日韩激情在线电影| 欧美精品久久久久a| 亚洲美女性视频| 亚洲人www| 欧美视频一区二区三区四区| 一个色综合导航| 亚洲色图制服丝袜| 国产精品久久九九| 欧美在线亚洲| 久久久av网站| 亚洲日本久久| 日韩一区二区久久| 国产伦精品一区| 久久综合五月| 欧美高清视频在线| 亚洲视频999| 性色av一区二区三区在线观看| 国产一区二区成人| 欧美xart系列在线观看| 欧美国产一区视频在线观看 | 亚洲一二三区视频在线观看| av成人天堂| 国产欧美日韩综合精品二区| 久久视频一区二区| 欧美成人69av| 亚洲欧美亚洲| 久热这里只精品99re8久| 一本色道久久综合亚洲91| 一区二区日韩| 激情久久久久久久| 日韩午夜免费视频| 狠狠综合久久| 一区二区欧美日韩| 在线日韩欧美视频| 亚洲视频精选在线| 亚洲第一天堂av| 在线综合+亚洲+欧美中文字幕| 国产一区欧美日韩| 亚洲精品一区二区三区婷婷月| 国产精品一区二区男女羞羞无遮挡 | 1000部精品久久久久久久久| 亚洲久久一区| 午夜精品久久久| 久久久夜夜夜| 亚洲综合国产精品| 久久视频精品在线| 午夜免费在线观看精品视频| 久久综合给合| 欧美主播一区二区三区| 欧美黄色小视频| 久久视频一区| 国产欧美日韩不卡| 亚洲日韩视频| 亚洲福利视频一区二区| 亚洲女同同性videoxma| 99riav国产精品| 久久精品夜色噜噜亚洲aⅴ| 亚洲综合好骚| 欧美日韩亚洲一区二| 欧美1区免费| 国产精品综合不卡av | 欧美性jizz18性欧美| 欧美黄在线观看| 激情成人综合网| 新67194成人永久网站| 亚洲综合不卡| 欧美日韩午夜在线| 亚洲经典在线看| 亚洲国产片色| 久久综合九色综合欧美就去吻| 久久久精品国产免费观看同学| 欧美揉bbbbb揉bbbbb| 亚洲精品美女| 日韩一区二区精品葵司在线| 欧美www视频在线观看| 欧美a级片网站| 亚洲国产经典视频| 久久国产色av| 麻豆成人在线| 亚洲黄一区二区三区| 蜜臀99久久精品久久久久久软件| 欧美a一区二区| 亚洲国产婷婷香蕉久久久久久| 久久夜色精品国产噜噜av| 美女视频黄a大片欧美| 在线国产欧美| 欧美成人免费全部观看天天性色| 亚洲第一综合天堂另类专| 亚洲欧洲另类| 欧美日韩视频一区二区三区| 一区二区日韩伦理片| 欧美在线观看一二区| 国产一区二区三区在线观看视频| 欧美在线免费看| 麻豆成人综合网| 亚洲精品视频在线| 欧美日韩精品久久久| 一本久久综合| 久久激情综合网| 在线电影一区| 欧美精品一区二区三区蜜臀| 99re66热这里只有精品3直播| 亚洲一区二区成人| 国产亚洲va综合人人澡精品| 久久久久亚洲综合| 亚洲三级国产| 性欧美video另类hd性玩具| 国产在线不卡视频| 欧美激情精品久久久久久免费印度 | 老牛影视一区二区三区| 亚洲国产综合在线看不卡| 欧美顶级少妇做爰| 一区二区三区国产| 久久伊人精品天天| aⅴ色国产欧美| 国产欧美精品日韩区二区麻豆天美 | 欧美va亚洲va日韩∨a综合色| 日韩小视频在线观看专区| 国产精品高潮呻吟久久av无限| 欧美一区视频在线| 亚洲激精日韩激精欧美精品| 欧美亚洲网站| 亚洲精品一区二区网址| 国产精品美女在线观看| 久久一区二区三区四区五区| 一区二区欧美精品| 欧美国产日韩一区二区在线观看| 亚洲自拍三区| 日韩视频一区二区在线观看| 国产视频欧美| 欧美日韩在线播放一区二区| 久久精品论坛| 亚洲视频观看| 亚洲精品日韩久久| 欧美a级片网| 久久久女女女女999久久| 在线一区观看| 最新国产成人av网站网址麻豆| 国产麻豆一精品一av一免费| 欧美va亚洲va香蕉在线| 欧美一区二区三区在线观看| 日韩一区二区免费高清| 亚洲成人在线视频网站| 久久人91精品久久久久久不卡 | 亚洲无玛一区| 亚洲经典在线看| 女仆av观看一区| 久久久久久91香蕉国产| 亚洲欧美在线免费观看| 中文精品视频| 一区二区日韩免费看| 亚洲美女在线观看| 91久久国产精品91久久性色| 国产日韩欧美二区| 国产精品视频内| 国产精品乱看| 国产精品久久久久久亚洲毛片| 欧美日韩大陆在线| 欧美精品尤物在线| 欧美黄在线观看| 欧美激情精品久久久久久大尺度 | 欧美日韩成人在线播放| 欧美高清视频免费观看| 欧美aⅴ99久久黑人专区| 久久久噜噜噜久久| 久久婷婷久久| 毛片一区二区| 免费成人黄色| 欧美黄色一区| 欧美日韩精品三区| 欧美午夜a级限制福利片| 国产精品国产自产拍高清av王其| 欧美日韩精品一区二区| 欧美视频手机在线| 国产精品拍天天在线| 久久女同精品一区二区| 一本久久精品一区二区| 亚洲欧洲日本国产| 亚洲理伦在线| 亚洲视频在线一区观看| 亚洲一区二区精品| 午夜精品在线| 久久久欧美一区二区| 美女精品在线| 91久久夜色精品国产网站| 亚洲精品小视频在线观看| 99精品免费视频| 午夜激情综合网| 久久综合久久88| 欧美另类视频在线|