引用:
作者bluesystem
如果寫遊戲的Shader都像3D Mark05那種搞法, 大概永遠都只會有GPU Bound.....
不過現實的狀況是, 對遊戲來說CPU還是很重要的影響效能因素.
現在遊戲的寫法, 大多還是同步式的寫法, 有可能造成CPU等GPU或GPU等CPU的
情況. 如果主要架構不改變, 不能讓CPU跟GPU的工作切開的話, SMP可能還
是幫助不大........
|
其實我是覺得05的GPU bound還好....
先前自己測的時候也是發現除了記憶體bound之外,fillrate並不能算是bound。
(從320x240一路往上測到1800x1440)
但是fps還是很低,所以我只能想到CPU一開始就沒推起來。
至於遊戲的寫法,先前我記得GDC2003裡面NVIDIA的文件裡面有一段:
http://developer.nvidia.com/docs/IO...hBatchBatch.pdf
Batch還是會造成不小的影響,而且這可以用programming trick改善。
話說有個參考值是25K batched per sec / 100% CPU usage @ 1GHz CPU....
所以最佳化應該可以朝這個方向走。
不過關於這部份,ATI和NVIDIA雙方的文件似乎持相反態度,
過去看過ATI的文件(GDC2002),那時候就對Batch不是很在意,
我覺得這可能是雙方的Driver特性造成的;不過這樣的話可能就會讓遊戲廠商很困擾了。
其實我會覺得這一篇就比較能夠解釋CPU和Driver之間應該要有的動作:
gdc2002_d3d_performance.pdf (90 KB)
page14~15
理想上的狀況,CPU和GPU之間的工作應該能Queue起來,
並且讓CPU的工作能overlap到GPU目前的工作上,
這樣就不會變成CPU和GPU之間實質上大半都是在互相wait。
http://developer.nvidia.com/docs/IO...Performance.pdf
這篇也有助於尋找整個引擎的bottlenack。
雖然這對現職GameDeveloper而言的bluesystem兄似乎是有點班門弄斧了,
不過這是我的一點意見。
