NVPerfHUD
http://www.cnblogs.com/cproom/archive/2006/11/13/559287.html
NVPerfHUD是一个很好的3D程序调试工具,它是NVPerfKit的一部分,由Nvidia开发,在写D3D程序时(它不能查看OpenGL程序)加入简单的语句就可以利用NVPerfHUD来调试察看显卡的工作情况了。
到这里下载其安装文件(包含文档),文档里有详细的使用说明。
最近在使用时,感觉越来越方便,所以在这里说一下最近用的最多的两个功能。
1. 用Frame Debugger来查看单独一帧的渲染情况。
(1) 在Frame Debugger中可以看到多边形的渲染顺序、每次渲染(如DrawIndexedPrimtives)命令所使用的纹理、渲染的目标(后缓存还是纹理等)、渲染命令的调用次数等。
(2) 这些内容通常都是我们需要的,比如我们在使用引擎时,引擎通常会对物体和材质的渲染顺序进行排序,就导致我们的颜色混合不能出现预期的效果,这时候通过FrameDebugger来查看物体及其材质的各个pass是按如何的顺序进行渲染的,就可以查出问题可能的原因,也帮助我们了解了引擎内部的工作原理。
(3) 而像纹理等,我们可以查看其是否是我们所期望的。我们将鼠标放在FrameDebugger窗口中的纹理上,就可显示出鼠标所在位置的纹理的值(如RGBA值),对于一些实时渲染出的纹理或者动态写入数据的纹理,这样尤其有用。
(4) 在Advanced页面中还能看到所使用的顶点和片元shader程序。我们可以查看传给着色程序的参数的实际值,以确定其是否正确。
2. 确定性能瓶颈
对不是瓶颈的部分做优化时不会提高程序的性能的,所以要优化程序得先查出性能的瓶颈在哪里。如上图,通常确定性能瓶颈的顺序是从开始渲染管线的最末段开始进行分析,当然如果你大概能猜到瓶颈在哪里,你可以直接从那个部分查起。
(1) 在程序中将颜色缓存从32位改为16位,查看FPS值是否增加,以确定瓶颈是否因为帧真缓存带宽引起。
(2) 在NVPerfHUD中按下Ctrl+T将纹理强行设置为2*2大小,查看FPS值是否增加,以确定瓶颈是否因为纹理带宽引起。
(3) 在NVPerfHUD中按下Ctrl+1、Ctrl+2……Ctrl+9,NVPerfHUD会自动强行简化各个Profile的Pixel Shader程序,查看FPS值是否增加,以确定瓶颈是否因为复杂的像素程序引起。
(4) 在NVPerfHUD中按下Ctrl+V去掉顶点单元,查看FPS值是否增加,以确定瓶颈是否因为顶点处理引起,包括顶点/索引缓存的传输、Vertex Shader程序和无效的缓存Lock。
(5) 在程序中更改顶点格式的大小,查看FPS值是否增加,如果增加则瓶颈在顶点/索引缓存的传输。
(6) 可以利用Ctrl+N去掉GPU的工作,也就是这个时候GPU的计算速度无限快,如果FPS增加则瓶颈在CPU上。
NVPerfHUD的更多相关文章
- 3D场景优化
一) 有效的性能评测 对于任何一个3D应用程序来说,追求场景画面真实感是一个无止尽的目标,其结果就是让我们的场景越来越复杂,模型更加精细,这必然给图形硬件带来极大的负荷以致于无法达到实时绘制帧率.因此 ...
- [Axiom3D]第一个Axiom3D程序
Axiom3D程序的基本渲染流程 #region Namespace Declarations using System; using System.Linq; using Axiom.Core; u ...
随机推荐
- 细胞分裂(codevs 2952)
题目描述 Description 著名生物学家F博士发现了一种单细胞生物. 它长得像蚯蚓,分裂速度极快(每分钟一次),分裂也像蚯蚓一样,断成两段,再长成. 它很好斗,只要q只聚集在一起,就会q只一群打 ...
- oracle 10g 学习之基本 SQL SELECT 语句(4)
本篇文章中,对于有的和MSSQL Server相同的语法我就没有再写了,这里我只写Oracle和MSSQL Server有点不同的 定义空值 l 空值是无效的,未指定的,未知的或不可预知的值 l ...
- ytu 1304:串的简单处理(水题)
串的简单处理 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 39 Solved: 11[Submit][Status][Web Board] Desc ...
- 好用的PHP分页类
<?php class Page { private $total; //总记录 private $pagesize; //每页显示多少条 private $limit; ...
- VMWare Workstation的命令
1 Ctrl + Alt + <-/-> 多个操作系统的切换
- HDU 4362 Dragon Ball 贪心DP
Dragon Ball Problem Description Sean has got a Treasure map which shows when and where the dragon ...
- POJ 3461 Oulipo KMP
题意:统计其中一个子串的出现次数 题解:即KMP算法中j==m的次数 //作者:1085422276 #include <cstdio> #include <cmath> #i ...
- 一件关于数据库日志log的无聊事情
为何说是无聊的记录呢? 因为事先把问题想复杂了,事后发现的时候觉得更是无聊的行为.还是写下来,毕竟很少弄这么无聊的事情. 事情起因是需要给服务器做性能基数(baseline),用sqldiag 提取了 ...
- eclipse下导入工程的小问题
- Hark的数据结构与算法练习之梳排序
算法说明梳排序是交换排序的一种,它其实也是改自冒泡排序,不同之处是冒泡排序的比较步长恒定为1,而梳排序的比较步长是变化的. 步长需要循环以数组长度除以1.3,到最后大于等于1即可. 光说可能比较抽象, ...