2.4 GPU Program Flow Control
最新的GPU支持多種形式的分支,但是由于它們的高度并行化的本質,使用這些分支的時候一定要注意。
2.4.1 Hardware Machanisms for Flow Control
三種主要實現:
Predication 并非真正的data-dependent branch
MIMD branching
SIMD branching 同時進行的指令唯一,即各個點的分支選擇應該一致
2.4.2 Moving Branching Up The Pipeline
2.4.2.1 Static Branch Resolution
靜態分析,避免循環內部的分支。這里舉了一個在離散空間點格(discrete spatial grid)上解偏微分方程的例子,不過沒怎么看懂,大致是把循環拆成兩部分的做法。
2.4.2.2 Pre-computation
有時候一段時間內或者幾次循環中某個分支的結果會是一個常數。這時候就只要在知道結果會改變的時候重新計算即可。
2.4.2.3 Z-Cull
現代GPU有一系列用于避免處理不會被看到的像素的技術,其中之一就是Z-cull。簡單的說Z-cull把沒有通過深度測試(Z軸覆蓋)點直接放棄。在流體模擬中,把land-locked障礙單元的Z深度標記為0,即可跳過這些點的計算。
2.4.2.4 Data-Dependent Looping With Occlusion Queries
同樣是避免處理不可見的點的技術
3 Programming Systems
GPU的架構發展非常迅速,使得profiling和tuning需要由GPU生產商解決。
3.1 High-level Shading Languages
Cg, HLSL 和底層硬件很接近
OpenGL Shading Language 有一些不直接映射到硬件的特性,比如整數支持
Sh, Ashli, ...
3.2 GPGPU Languages and Libraries
上面提到的幾個語言在使用時都要求編程人員站在幾何元素的視角寫代碼。下面的幾個系統試著把一些GPGPU功能抽象出來,隱藏底層的GPU實現。
Brook 前幾星期打過交道的東東
Scout, Glift 都沒聽說過。。。
3.3 Debugging Tools
GPU的調試功能很受局限。它必須提供在某一時刻顯示多個點的調試信息的功能。一種printf-style的方法是把他們直接顯示在屏幕上(汗,如果是GPGPU編程豈不是花屏了 >,<)。
最新的GPU支持多種形式的分支,但是由于它們的高度并行化的本質,使用這些分支的時候一定要注意。
2.4.1 Hardware Machanisms for Flow Control
三種主要實現:
Predication 并非真正的data-dependent branch
MIMD branching
SIMD branching 同時進行的指令唯一,即各個點的分支選擇應該一致
2.4.2 Moving Branching Up The Pipeline
2.4.2.1 Static Branch Resolution
靜態分析,避免循環內部的分支。這里舉了一個在離散空間點格(discrete spatial grid)上解偏微分方程的例子,不過沒怎么看懂,大致是把循環拆成兩部分的做法。
2.4.2.2 Pre-computation
有時候一段時間內或者幾次循環中某個分支的結果會是一個常數。這時候就只要在知道結果會改變的時候重新計算即可。
2.4.2.3 Z-Cull
現代GPU有一系列用于避免處理不會被看到的像素的技術,其中之一就是Z-cull。簡單的說Z-cull把沒有通過深度測試(Z軸覆蓋)點直接放棄。在流體模擬中,把land-locked障礙單元的Z深度標記為0,即可跳過這些點的計算。
2.4.2.4 Data-Dependent Looping With Occlusion Queries
同樣是避免處理不可見的點的技術
3 Programming Systems
GPU的架構發展非常迅速,使得profiling和tuning需要由GPU生產商解決。
3.1 High-level Shading Languages
Cg, HLSL 和底層硬件很接近
OpenGL Shading Language 有一些不直接映射到硬件的特性,比如整數支持
Sh, Ashli, ...
3.2 GPGPU Languages and Libraries
上面提到的幾個語言在使用時都要求編程人員站在幾何元素的視角寫代碼。下面的幾個系統試著把一些GPGPU功能抽象出來,隱藏底層的GPU實現。
Brook 前幾星期打過交道的東東
Scout, Glift 都沒聽說過。。。
3.3 Debugging Tools
GPU的調試功能很受局限。它必須提供在某一時刻顯示多個點的調試信息的功能。一種printf-style的方法是把他們直接顯示在屏幕上(汗,如果是GPGPU編程豈不是花屏了 >,<)。