Gpu Progame Guide G89 (三) GPU优化性能技巧

     这一章会阐述一些达到最好性能的技巧,将帮助大家在GeForce系列显卡上完成性能的优化工作。为了您的方便,这些技巧通过管道组织。每一节,我们会按照重要性等级给出大致的建议,这样大家可以把精力集中到重要的地方去。

     你可以在这里可以对现代GPU的管线有个整体的了解:Graphics Pipeline Performance chapter of the book GPU Gems: Programming Techniques, Tips, and Tricks for Real-Time Graphics。这张所覆盖的对于瓶颈的定位,其实是想说明如何寻找潜在的性能问题在所有的管线阶段中。

     图形管线性能技巧免费使用:http://developer.nvidia.com/object/gpu_gems_samples.html。

 

3.1 List of Tips

     如果使用正确,GPU能够完成极其高等级的性能工作。下面的列表提供了一些可行的性能技巧,这些概述接下来的章节解释的更多细节。

  • API的开销导致的CPU瓶颈:

(1)使用更少的批次

        ☆使用texture atlases/texture arrays去避免State改变:                       http://developer.nvidia.com/object/nv_texture_tools.html。

        ☆在DirectX,使用实例化的API去避免类似SetMatrix这样的相同的实例化的状态改变。

        ☆减少状态改变。

  • 顶点的处理导致的GPU瓶颈: 

(1)使用indexed primitive calls

☆使用 DirectX ID3DXMesh/ID3DX10Mesh optimization calls [OptimizeInplace() 或者  Optimize()] 。

                ☆使用NVTriStrip utility如果Indexed List不能正常使用:

                 http://developer.nvidia.com/object/nvtristrip_library.html 

        (2)顶点设置属性的瓶颈。

☆Large vertices/many vertices 经常会导致属性瓶颈。

                ☆在Vetex Shader中重复计算数据。

                ☆减少顶点的大小。

                ☆只有在确实需要的时候才使用动态的Vertex buffers。

  • Shaders 引起的Gpu瓶颈。

          (1)最高等级的Shader model的选择。

          (2)一直使用最新版本的FXC

          (3)使用最低精度的数据,比如:

                 ☆做任何事情,更喜欢使用Half去代替float。

          (4)Pixed shader瓶颈。

☆当你在Pixed shader里面受到约束的时候,在Vertex shader里面使用线性的计算。

                ☆充分发挥Early Z Culling优化的优势。

          (5)插值式的属性瓶颈。

☆把Vertex的计算放到Pixel shader中去。

                ☆避免Contants当做插值传递。在Shader stage需要的时候使用相同的常量。

  (6)Geometry Shaders:

☆确信你真的需要他,或者说你再也没有更好的选择,就像Instancing。

☆使用尽可能小的maxvertexcount value。

☆使用最小的vertice。

  • 如果不会改变整个Pixel shader生命周期的话,不要使用uniform parameters。
  • 减少使用数学运算。
  • 替代包含纹理寻址的函数。

(1)逐像素光照。

(2)使用FX Composer程序化生成纹理的方式。

(3)sincos, log, exp是原生态指令,不需要使用纹理查找来替代。

  • 纹理化引起的GPU瓶颈。

(1)一直使用Mipmapping。

(2)谨慎使用 trilinear and anisotropic filtering。

☆匹配各种等级的anisotropic filtering过于复杂。

☆使用Photoshop 插件去确认anisotropic filtering 等级,参考:

http://developer.nvidia.com/object/nv_texture_tools.htm

☆遵循简单的法则:如果纹理是噪化的,打开anisotropic filtering。

  • 光栅化导致的GPU瓶颈。

(1)Double-speed z-only and stencil rendering。

(2)Early-z(Z-CUll)优化。

  • 抗锯齿

(1)确保如果需要的时候才打开。

你可能感兴趣的:(优化,Arrays,Parameters,shader,Primitive,optimization)