`
yhr934tl
  • 浏览: 13844 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

perfHUD使用说明

 
阅读更多

perfHUD使用说明
2011年04月14日
  perfHUD使用说明
  以下前半部分是PerfHUD 6 Quick Tutorial,后半部分是PerfHUD 6 User Guide
  注意使用PerfKit_x86_XP_6.62.0120.1800.exe中的驱动,才能正常显示PerfHUD图表。
  还要看看PerfSDK中的NVIDIA Developer Control Panel是否可以开启,若可以,才说明安装无误。
  另外,driver time和driver sleep似乎在ogre中支持不全,需要添加代码才可以显示。
  1.PerfHUD的系统需求
  只支持geforce 6系列以上显卡。只支持DX9.0c和DX10,不支持openGL。只支持Windows XP和
  Windows Vista.
  2.安装驱动
  在Windows Vista上,驱动的版本至少是173以上,这允许你使用PerfHUD所有的功能。
  在Windows XP上,你必须安装NVIDIA PerfKit提供的驱动。否则,你将不能完全使用PerfHUD所有
  的功能。
  3.设置激活PerfHUD面板的快捷键
  双击“NVIDIA PerfHUD 6 Launcher”(PerfHUD的桌面图标),会弹出一个设置面板,最上方有一个
  文本框,点击它,直接按住键盘上是的“ctrl”或“shift”或“alt”,再按住一个按键,就自动
  组成了一个快捷键,显示在文本框中。若不设置,默认是“ctrl+Z”。
  注意:快捷键不要和应用程序使用的重复了,否则只认应用程序的。PerfHUD本身的一些快捷键只在
  被激活后才起效。
  4.编辑你的程序
  为了更好地分析,你需要添加一段代码到你的程序中,这段代码需要在你发布你的程序的时候移除,
  以免你的程序会被其他人用同样的方法分析。
  你或许见过如下代码:
  ------------------------------------
  HRESULT Res;
  Res = g_pD3D->CreateDevice(
  D3DADAPTER_DEFAULT,
  D3DDEVTYPE_HAL,
  hWnd,
  D3DCREATE_HARDWARE_VERTEXPROCESSING,
  &d3dpp,
  &g_pd3dDevice
  );
  ------------------------------------
  当你使用PerfHUD游览你的程序时,将创建一个NVIDIA PerfHUD适配器。其给予了PerfHUD分析你的
  程序的许可。另外,你必须选择标准的光栅类型作为设备类型,因为一些程序可能不经意间选择了
  NVIDIA
  PerfHUD适配器ID,并向未经授权的分析暴露了程序。只要你选择了PerfHUD适配器,那么你的程序实
  际上并没有使用标准的光栅。
  以下代码将帮助你的程序开启PerfHUD分析:
  ===
  DX9
  ------------------------------------
  // Set default settings
  UINT AdapterToUse=D3DADAPTER_DEFAULT;
  D3DDEVTYPE DeviceType=D3DDEVTYPE_HAL;
  #if SHIPPING_VERSION
  // When building a shipping version, disable PerfHUD (opt-out)
  #else
  // Look for 'NVIDIA PerfHUD' adapter
  // If it is present, override default settings
  for (UINT Adapter=0;AdapterGetAdapterCount();Adapter++)
  {
  D3DADAPTER_IDENTIFIER9        Identifier;
  HRESULT                       Res;
  Res = g_pD3D->GetAdapterIdentifier(Adapter,0,&Identifier);
  if (strstr(Identifier.Description,"PerfHUD") != 0)
  {
  AdapterToUse=Adapter;
  DeviceType=D3DDEVTYPE_REF;
  break;
  }
  }
  #endif
  if (FAILED(g_pD3D->CreateDevice( AdapterToUse, DeviceType, hWnd,
  D3DCREATE_HARDWARE_VERTEXPROCESSING,
  &d3dpp, &g_pd3dDevice) ) )
  {
  return E_FAIL;
  }
  ------------------------------------
  ====
  DX10
  ------------------------------------
  #if SHIPPING_VERSION
  // When building a shipping version, disable PerfHUD (opt-out)
  #else
  // Look for 'NVIDIA PerfHUD' adapter
  // If it is present, override default settings
  IDXGIFactory *pDXGIFactory;
  ID3D10Device *pDevice;
  HRESULT hRes;
  hRes = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&pDXGIFactory);
  // Search for a PerfHUD adapter.
  UINT nAdapter = 0;
  IDXGIAdapter* adapter = NULL;
  IDXGIAdapter* selectedAdapter = NULL;
  D3D10_DRIVER_TYPE driverType = D3D10_DRIVER_TYPE_HARDWARE;
  while (pDXGIFactory->EnumAdapters(nAdapter, &adapter) !=
  DXGI_ERROR_NOT_FOUND)
  {
  if (adapter)
  {
  DXGI_ADAPTER_DESC adaptDesc;
  if (SUCCEEDED(adapter->GetDesc(&adaptDesc)))
  {
  const bool isPerfHUD = wcscmp(adaptDesc.Description, L"NVIDIA PerfHUD") == 0;
  // Select the first adapter in normal circumstances or the PerfHUD one if it exists.
  if(nAdapter == 0 || isPerfHUD)
  selectedAdapter = adapter;
  if(isPerfHUD)
  driverType = D3D10_DRIVER_TYPE_REFERENCE;
  }
  }
  ++nAdapter;
  }
  #endif
  if(FAILED(D3D10CreateDevice( selectedAdapter, driverType, NULL, 0, D3D10_SDK_VERSION,
  &pDevice)))
  return E_FAIL;
  ------------------------------------
  确定你的程序在运行时没有使用软件光栅。
  若你使用的是ogre,那么你可以省略这一步,ogre已经为我们做好了。
  但要记得设置ogre配置窗口的PerfHUD状态和设置使用的渲染驱动。
  5.启动应用程序测试
  右键点击应用程序->发送到perfHUD即可启动测试了,或者拖到perfHUD图表上启动。
  ogre在程序启动前的选项面板中也有一个perfHUD选项,选yes就可以了。
  运行程序,就可以看到perfHUD的图表显示在最上层。
  激活PerfHUD,可以看到程序界面下方出现了4个选项。
  5.1 Performance Dashboard(性能仪表)
  用于查找场景中出现瑕疵的地方。
  默认就是Performance Dashboard模式。
  在此模式下,你可以使用的快捷键:
  +  加快程序(上限是6倍)
  -  减慢程序(下限是1/8倍)
  ctrl+T 转换程序中所有纹理为2×2大小
  ctrl+D 查看帧缓冲的深度复杂度
  你也可以自定义图表:
  鼠标左键点击蓝色方块 打开配置对话框
  鼠标左键点击并拖动绿色方块 改变图表大小
  鼠标左键点击红色方块 关闭图表
  你还可以创建新图表,鼠标右键点击空白处,在弹出菜单中选“New Batch Size Graph” 
  5.2 Frame Debugger(帧调试器)
  用于在Performance Dashboard查找出场景中出现瑕疵的地方后,冻结帧,调试其绘画调用,
  从细节上分析性能。
  此模式下,在下方会出现一个滑动条,可以拖动它查看不同的帧中的绘画调用。
  当前绘画调用是用高亮的桔黄色表示在右上方。
  在此模式下,你可以使用的快捷键:
  上下箭头 减少或增加当前的绘画调用
  Home 跳到第1帧
  End 跳到最后一帧
  Page Up 大量减少当前的绘画调用
  Page Down 大量增加当前的绘画调用
  你也可以在左上方的下拉列表中对当前帧调用不同的显示:
  Textures 查看和编辑纹理和渲染目标
  call list 查看整个D3D调用列表
  Dependencies 查看生产者和消费者的相关性
  Perf Event 查看程序描述帧部分的性能标签,点击标签,立即跳到相关的绘画调用。
  左上方是纹理列表。
  右上方是渲染目标列表。
  鼠标左键双击图片,可以看到鼠标位置的像素信息。
  鼠标右键点击图片,可以选择替换的纹理,回到Performance Dashboard模式下就可以看到效果。
  点击右下方“Advanced”按钮,可以查看当前图像管道的信息:
  Vertex Assembly 显示场景中的顶点信息
  Vertex Shader 显示使用的顶点片段程序
  Pixel Shader 显示使用的像素片段程序
  Raster Operations 显示光栅操作
  5.3 Frame Profiler(帧剖析器)
  用于提供每次绘画调用详细的性能信息的统计数据,其是关于性能和GPU使用的。
  其可以快速地对当前帧进行一些性能测试。
  6.使用PerfHUD高效地剖析
  6.1检查你的程序是偏向于CPU还是GPU计算
  若你的程序偏向于CPU,那么针对于GPU的优化并不会提供多少性能。
  你可以使用Performance Dashboard快速地检查你的程序是偏向于CPU还是GPU计算。
  第1个方法是检查图表:Total Frame Time(总的帧时间)和Driver Time(驱动时间)。
  若你的程序是偏向于CPU,你可以看到黄线(Total Frame Time)和红线(Driver Time)有很大间隔。
  第2个方法是按“Ctrl+N”去忽略所有绘画调用。若你的帧速没有增加,那么说明GPU再好也不能使你
  的程序运行的再快了,此时说明你的程序是偏向于CPU的。
  其他情况,你可以使用CPU性能分析工具,如Intel的VTune或AMD的CodeAnalyst。
  6.2使用Frame Debugger解决渲染错误
  若你在Performance Dashboard下发现了任何图像错误,你可以立刻转换到Frame Debugger,检查每一
  个绘画调用的几何体、纹理、shader、光栅操作。
  6.3用Frame Profiler解决性能问题
  Frame Profiler自动提供性能分析。
  7.全部快捷键
  F1 帮助
  F2 隐藏/显示UI
  F4 立即反馈
  F5 转到Performance Dashboard
  F6 转到Debug Console
  F7 转到Frame Debugger
  F8 转到Frame Profiler
  F9 切换可编辑shader
  F10 切换可编辑渲染器状态
  F11 截屏
  Shift+F11 截屏(没有HUD)
  8.Performance Dashboard快捷键
  9.Frame Debugger和Frame Profiler通用快捷键(在2个模式下通用)
  ctrl+A 切换高级模式
  ctrl+H 切换高亮当前绘画调用
  Right/Up arrow 前进1绘画调用
  Left/Down arrow 后退1绘画调用
  Home 跳到第0个绘画调用
  End 跳到最后一个绘画调用
  PageDown 后退10个绘画调用
  PageUp 前进10个绘画调用
  10.Frame Debugger高级快捷键
  所有菜单都支持键盘控制。可以使用Up/Down arrow移动选项,按回车执行当前选项,按Esc关闭菜单。
  一些菜单也有快捷键。
  10.1 Texture View中的快捷键
  Ctrl+Up/Down 上移/下移当前绘画调用的纹理
  Ctrl+Plus/Minus 增加/减少选中纹理的大小
  Ctrl+Shift+Up/Down 上移/下移渲染目标
  Ctrl+Shift+Plus/Minus 增加/减少选中渲染目标的大小
  Alt+T/R 打开当前选中纹理/渲染目标的相关菜单
  相关菜单中的快捷键:
  O 原始纹理
  2 2×2纹理
  B 空纹理
  W 白色纹理
  M 多映射纹理
  10.2 Advanced Inspectors(高级监控器)中的快捷键
  Ctrl+Tab/Ctrl+Shift+Tab 循环到下一个/上一个高级监控器
  11.信息披露
  一般的性能度量都显示在屏幕顶部的状态条中。这些数据提供了一个比较你的程序完成其工作量的速
  度的度量。帧数被用于计算显示的帧率,默认是20。你可以调整它,使用以下快捷键:
  [ 减少帧数
  ] 增加帧数
  12.时间控制
  注意屏幕左上角的速度控制图标,就在信息披露下方。
  控制允许你决定你的程序的回放速度。当你正在查看一个特定帧时,控制你的程序的时间会很有用。
  其快捷键:
  小键盘+ 增加速度
  小键盘- 减少速度
  小键盘Enter 暂停/继续
  注意:PerfHUD可以冻结你的程序,通过使你的程序每次请求当前时间时返回相同的值。这模拟一个无
  限快的渲染循环,因此每帧会有相同的工作量被提交。
  注意:若你的程序已经执行了一个帧速限制功能,那么你可能需要去关闭这个功能,才能使用PerfHUD
  的时间控制、debugging(调试)和profiling(剖析)。
  13.实时测试
  实时测试提供了一个便捷的方法去快速收集关于你的程序的性能问题所在的信息。通过一个按键,你
  可以替换你的程序中的所有纹理,或使你的程序忽略所有绘画调用。通过检查这些测试中帧率的不同,
  你可以获得更多关于瓶颈领悟。
  注意:在GeForce6以上的GPU上,Frame Profiler提供了更多自动化的和精确的性能信息,关于每个绘
  画调用基础。以下测试是很有用的:
  Ctrl+T 孤立纹理单元
  迫使GPU使用2×2纹理,若帧率有显著提高,那么你的程序性能是被纹理宽度限制了。
  Ctrl+V 孤立顶点单元
  使用1×1的裁剪矩形,在顶点单元之后,去裁剪所有在管线阶段中的光栅化和遮蔽工作。此方法近
  似删减了图像管线,在顶点单元之后。并可以被用于度量你的程序性能是否被顶点转换、CPU工作量和
  总线处理所限制。
  Ctrl+N 排除GPU
  此特征模拟一个无限快的GPU,通过忽略所有DrawPrimitive()和DrawIndexedPrimitives()调用。这
  模拟了你的程序激活时的帧率,若整个图形管线没有性能代价的话。若你的帧速没有增加,那么说明
  GPU再好也不能使你的程序运行的再快了,此时说明你的程序是偏向于CPU的。
  注意:此时,CPU通过状态改变引发的额外开销也会被忽略。
  Ctrl+M 排除几何体
  此特征会减少每个绘画调用中绘制的三角形的数量,一般1次绘画调用会绘制2个三角形的整数倍,在
  界面上看起来就是一个个方块。此操作就是只绘制1个三角形。这减少了GPU中处理的几何体的数量。
  Ctrl+D 显示深度复杂度
  显示你的场景中透支(全景渲染造成的浪费)的数量。你拥有的透支越多,你的GPU处理的工作量就越
  大,这会导致场景的显示性能的降低。
  Ctrl+W 切换线框显示模式
  用线框模式显示你的整个场景,不需要任何遮蔽。
  Ctrl+1 使用红色的着色固定管道像素
  Ctrl+2 使用淡绿色的着色ps_1_1
  Ctrl+3 使用绿色的着色ps_1_3
  Ctrl+4 使用黄色的着色ps_1_4
  Ctrl+5 使用淡蓝色的着色ps_2_0
  Ctrl+6 使用蓝色的着色ps_2_a
  Ctrl+7 使用桔红色的着色ps_3_0
  Ctrl+8 使用红色的着色ps_4_0
  使用Ctrl+1..8可以开启特定的shader类型,也可以用特定的颜色绘制这些像素。你可以使用其设想这
  些版本的shader被怎么用和用在哪,也可以评估每个shader版本在你的程序中的性能影响。
  注意:shader可视化只在当一个D3D设备被创建作为一个非纯设备时工作。在PerfHud配置设置中,你可
  以迫使设备以非纯设备模式创建。
  14.自定义图像和层
  New Object Createion LED的参数说明:
  2T 使用CreateTexture()创建2D纹理
  VT 使用CreateVolumeTexture()创建体积纹理
  CT 使用CreateCubeTexture()创建天空盒子纹理
  VS 创建顶点shader
  GS 创建几何体shader
  PS 创建像素shader
  BU 创建缓冲
  IB 使用CreateIndexBuffer()创建索引缓冲
  RT 使用CreateRenderTarget()创建渲染目标
  DSS 使用CreateDepthStencilSurface()创建深度模板表面
  MSC 任何不适合其他种类的创建对象
  Graphs Locked 关闭图表的移动或改变大小的功能
  Remove All Graphs 移除这一层的所有图表
  Default Layout 重新设置当前层到默认
  Restore Layout 点击菜单项去显示层列表
  Save Layout 点击菜单按钮去保存和命名当前图像层
  Default Layout 重新保存当前层
  15. 解释默认图表
  15.1.单元应用图表
  此图表在监控你的程序的高级性能特征时很有用.当你看到一个潜在问题时,转换到Frame Profiler去冻
  结
  当前帧,并用绘画调用分析单元应用。每条线代表特有的GPU单元的使用率。
  VA 顶点集合单元
  SHD 顶点shader单元
  TEX 像素shader单元
  ROP 光栅操作单元
  15.2.计时图表
  Driver Time(ms) 每帧中CPU执行驱动代码的总时间,包括Driver Sleeping(ms)
  GPU Idle(ms) 每帧中GPU空闲的总时间
  Driver Sleeping(ms) 驱动等待GPU的累积时间
  Frame Time(ms) 前一帧到下一帧的总时间--你要保持其中图表中的线尽可能低。为了方便,以下的图表
  列
  举了一些通用帧的时间和对于的帧率。
  FRAME_TIME  17ms  34ms  50ms  75ms  100ms
  FPS         60    30    20    13    10
  注意:Frame Time(ms)和Driver Time(ms)代表的线的时间间隔是你的程序逻辑电路和操作系统花费的时
  间。
  你或许会看到突然的波动在图表中。这经常是由操作系统中在后台执行一个硬盘存取过程、纹理加载、
  或上
  下文切换导致的。
  只要波动是偶然才发生的,那么情况就是正常的。若是他们频繁地发生,那或许是由于你的程序执行CPU
  密集
  操作时效率很低。
  若Driver Time和Frame Time的线是同时波动的,那很可能是因为驱动正在从CPU到GPU加载纹理。
  若Frame Time的线波动的同时Driver Time的线没有波动,你的程序可以执行了一些CPU密集操作(比如解
  码声
  音)或硬盘存取。此时也可能是由于操作系统正在处理其他过程。
  注意:GUP Idle或许会在以上2种情况中波动,因为你没有发送数据到GPU。
  16.Debug Console图表
  Debug Console将显示所有经由DX Debug运行时的信息,此信息是你的程序经由OutputDebugString()发
  出的,
  其它的任何警告或错误都是由PerfHUD发现的。
  注意:最大支持的debug输出字符串大小是4kb,只有字符串的前80个字符才可见,若字符串没有换行符
  。
  由PerfHUD发现的资源创建事件和警告都将记录在console窗口中。
  你可以使用一些操作定制Debug Console如何工作:
  Clear Logging 清理显示窗口的记录
  Stop Logging 停止显示新纪录
  你可以设置只显示你的程序或PerfHUD的消息。
  17.Frame Debugger图表
  17.1.简单模式
  17.1.1.Texture View
  显示了当前绘画调用的每个纹理和渲染目标。纹理列举在左侧窗口,渲染目标列举在右侧窗口。
  在左侧窗口鼠标右击可以看到弹出窗口如下:
  2*2 Texture
  Black
  25% Gray
  50% Gray
  75% Gray
  White
  Horizontal gradient
  Vertical Gradient
  Color Mipmap Texture 每个mip使用一种颜色,第0级用红色,最低级用蓝色,其他级使用其他的颜色。
  你可以使用此项测试多纹理映射在屏幕上的显示精确度。
  Remove All Texture Overrides
  Tonemap 0-1 查看纹理的色调
  Save To File
  Visualize 以全屏的模式查看纹理
  17.1.2.API Call List View
  显示当前帧中的每个D3D API调用,不同类型的调用使用以下的颜色区分:
  Draw           Blue        绘画调用用蓝色
  State/Effect   Purple      状态/效果用紫色
  Lock/Unlock    Red         锁定/解锁用红色
  Perf Marker    Green       Perf标记用绿色
  Other          Black       其他用黑色
  你可以双击列表中调用跳到对应帧,并查看当前调用对应的几何体。
  17.1.3.Dependency View
  显示绘画调用在图像和帧两方面的生产者和调用者的关系。
  点击列表视图中的生产者和消费者,你将看到滑动条移动到相应的位置,你可以快速理解场景中对象之
  间
  的依赖关系。
  17.1.4.D3D Perf Events View
  略。未知用途。
  17.2.Advanced Mode
  允许你检查每个管线阶段的细节,包括:
  Vertex Assembly  获得顶点数据
  Vertex Shader  顶点shader
  Geometry Shader 几何体shader
  Pixel Shader  像素shader
  Raster Operations  光栅操作
  17.2.1.Vertex Assembly监控器
  显示选中的绘画调用的几何体,包括2个窗口:
  几何体窗口
  你可以使用鼠标左键拖动,以旋转几何体。
  顶点数据窗口
  绘画调用参数和返回标记;索引和顶点缓冲格式,大小;FVF(顶点格式)。
  通过以上窗口,你可以验证你的模型的索引格式是否正确,确定其是16bit索引,不论是什么程序。
  17.2.2.Vertex, Geometry 和 Pixel Shader监控器
  Shader监控器包括4个部分:
  源码编辑器
  位于右上方,显示当前绘画调用的顶点片段程序代码。你可以直接编辑它,并可以用搜索查找shader
  中的
  文本,还可以右击鼠标,在弹出窗口执行以下:
  Open
  Replace
  Save
  Save As
  Close
  Close All
  Comlile
  Discard Current Edits
  Restore Original Shader
  Visualize Shader
  shader常量查看器
  位于右下方,显示了所有shader中的常量和定义
  纹理查看器
  位于左上方
  采样编辑器
  位于左下方,你可以设置其属性,并右击鼠标,在弹出窗口执行以下:
  Apply Current State 应用当前采样状态到场景
  Apply Sampler State to All Samplers 拷贝当前选中的采样到其他采样
  Restore State  恢复原始采样状态
  Restore Sampler Slot States 为当前采样恢复所有采样属性
  Restore All Sampler States 恢复所有采样状态
  Expand All Samplers 扩展所有采样
  Collapse All Samplers 隐藏所有采样
  注意:采样状态编辑会覆盖当前帧的所有绘画调用。
  在所有的shader监控器中,你需要检查的:
  是否预期的shader被应用到了当前绘画调用;
  是否常量没有通过#NAN、#INF;
  是否纹理状态设置正确。
  在像素shader监控器中,你需要检查的:
  是否纹理和渲染目标纹理被使用正确;
  是否纹理过滤专题被设置正确。
  17.3.Raster Operations监控器
  显示了一些关于当前绘画调用的光栅操作(ROP)单元的信息。信息使用树状列表显示。有2个窗口,一个
  在左边,
  显示和编辑渲染状态,一个在右边,显示渲染目标。
  以下列举了光栅的属性:
  Depth State 深度
  Stencil State 模板
  Alpha Test State 透明测试
  Rasterizer State 光栅化
  Color Mask State 颜色模板
  Blend State 混合
  Vertex and Primitive State 顶点格式
  Lighting and Material State 光照和材质
  Fog State 雾
  Point and Sprite State 点精灵
  Texture State 纹理
  Tessellation State 棋盘格子
  Other State
  你可以设置其属性,并右击鼠标,在弹出窗口执行以下:
  Apply Current State Globally 应用到全局
  Restore State 恢复
  Restore Category States 恢复类型
  Restore All States 恢复所有
  Expand All Categories 扩展所有类型
  Collapse All Categories 取消所有类型
  以下渲染状态可能很耗资源:
  Zenable 深度
  Fillmode 填充模式
  ZWriteEnable 深度写入
  AlphaTestEnable 透明测试
  SRCBLEND and DSTBLEND 源混合和目标混合
  AlphablendEnable 透明混合
  Fogenable 雾
  Stencil enable 模板
  StencilTest 模板测试
  18.Frame Profiler
  Frame Profiler针对一个特点帧,自动提供性能分析,查找出消耗资源最大的绘画调用。
  18.1.简单模式
  18.1.1.每个单元的瓶颈图表
  位于下方。图表中横条的意义:
  黄色部分 总时间
  红色部分 在当前状态框中被所有调用使用的时间
  桔红色部分 被当前绘画调用使用的时间
  18.1.2.瓶颈百分比图表
  位于上方。通过图表你可以快速查看哪一个绘画调用是瓶颈,以及那一个单元是问题。
  每个单元的使用率,GPU和CPU时间,shader像素数,纹理LOD,顶点格式。
  18.1.3.State buckets
  状态栏.你可以使用默认的状态栏配置。
  18.2.高级模式
  略。
  19.Troubleshooting
  已知的问题:
  (1)PerfHUD不支持多设备,只支持第一个创建的设备。
  (2)PerfHUD可能会在使用软件顶点过程时崩溃。
  (3)当程序使用固定管道的T&L(光影转换)时,状态监控器不会显示细节信息。
  (4)当PerfHUD被激活,并且你点到关闭按钮上时,运行在窗口模式的程序可能不能正常离开。
  20.为什么驱动要等待GPU
  GPU满负荷运转是一个典型的情况,其发生在你有2个通过FIFO(先入先出队列)连接的处理器,其中一个
  提供给另一个远超过其处理能力的数据。
  此种情况显示如下,CPU提供给GPU远超过其处理能力的命令。当其发生时,所有命令开始在FIFO队列中
  构建,也叫做“push buffer”。为了避免FIFO从驱动溢出,就必须等待FIFO空出空间以放置新命令。
  图解:原图中,黄线大概在70,红线大概在30,蓝线大概在27,绿线在0.
  若是你发现帧率如下:
  (1)高,那么你可以在CPU上做更多工作,这不会影响帧率(对象裁剪,物理碰撞,游戏逻辑,AI等等)。
  (2)不富裕,你应该减少创建复杂度,以减轻GPU加载。
分享到:
评论

相关推荐

    PerfHUDAny

    PerfHUDAny可以将NVDIA的PerfHUD工具应用到任意D3D9程序上. 含源代码.

    CryEngine地形分析

    1材质排序:从PerfHUD的结果来看,Cryengine对DXAPI的调用是最为简洁的,如此多的材质,却只有如此简洁的状态切换过程,不能不令人赞叹,相比之下,OGRE或者GB之类的三流引擎做得就要差得多。材质排序已经被做到了...

    微信小程序-番茄时钟源码

    微信小程序番茄时钟的源码,支持进一步的修改。番茄钟,指的是把工作任务分解成半小时左右,集中精力工作25分钟后休息5分钟,如此视作种一个“番茄”,而“番茄工作法”的流程能使下一个30分钟更有动力。

    激光雷达专题研究:迈向高阶智能化关键,前瞻布局把握行业脉搏.pdf

    电子元件 电子行业 行业分析 数据分析 数据报告 行业报告

    安享智慧理财测试项目Mock服务代码

    安享智慧理财测试项目Mock服务代码

    课程设计 基于SparkMLlib的ALS算法的电影推荐系统源码+详细文档+全部数据齐全.zip

    【资源说明】 课程设计 基于SparkMLlib的ALS算法的电影推荐系统源码+详细文档+全部数据齐全.zip课程设计 基于SparkMLlib的ALS算法的电影推荐系统源码+详细文档+全部数据齐全.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    华中科技大学电信专业 课程资料 作业 代码 实验报告-雷达与信息对抗-内含源码和说明书.zip

    华中科技大学电信专业 课程资料 作业 代码 实验报告-雷达与信息对抗-内含源码和说明书.zip

    2024华为OD机试D卷 - TLV解析 Ⅱ - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    基于Bilibili公开的数据,通过Flink实时分析计算,做成需要的动态图表源码+部署文档+全部资料齐全 高分项目.zip

    【资源说明】 基于Bilibili公开的数据,通过Flink实时分析计算,做成需要的动态图表源码+部署文档+全部资料齐全 高分项目.zip基于Bilibili公开的数据,通过Flink实时分析计算,做成需要的动态图表源码+部署文档+全部资料齐全 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-49.5.0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    2024华为OD机试D卷 - N进制减法 - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    setuptools-32.1.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-6.0.2.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-0.7.5.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-20.7.0.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip

    【资源说明】 基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip基于Hadoop的智能购书系统的设计与实现+部署文档+全部资料 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    setuptools-0.9.8-py33-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    机械装备制造信息化整体解决方案(PPT格式).rar

    在面对机械装备制造行业日益增长的信息化需求时,本PPT格式的解决方案文档旨在提供一个全面、高效的数字化转型蓝图。这个资料包涵盖了从生产流程自动化到智能数据分析,再到供应链管理优化的各个方面,旨在帮助机械制造企业实现更高层次的生产智能化和运营效率。解决方案中,我们首先强调了制造执行系统(MES)的集成,它能够实时监控工厂的生产线,确保生产过程的透明度和可追溯性。通过与物联网(IoT)设备的结合,可以实现设备状态的远程监控和维护预测,从而减少停机时间并提高生产效率。其次,方案中还包含了一套完整的企业资源规划(ERP)系统,它能够帮助企业管理从原材料采购到成品出库的整个流程,确保物流和信息流的无缝对接。ERP系统的应用不仅提升了资源的使用效率,也为企业决策提供了数据支持。此外,我们还提出了基于大数据和人工智能技术的智能分析模块,该模块能够对生产过程中产生的海量数据进行深度分析,帮助企业发现潜在的生产瓶颈,优化产品设计,提升产品质量,同时也能够根据市场趋势调整生产计划,增强企业的市场响应能力。最后,为了确保整个信息系统的安全性和稳定性,解决方案还包括了先进的网络安全措施和数据备份机制,保障企业

    厦门大学软件工程系卓越工程师班算法分析与设计课程实验源码-内含源码和说明书.zip

    厦门大学软件工程系卓越工程师班算法分析与设计课程实验源码-内含源码和说明书.zip

    setuptools-20.4.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics