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

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之类的三流引擎做得就要差得多。材质排序已经被做到了...

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    gbkfonts.zip

    将TTF 汉字字体生成可供 TeX 使用的汉字 Type1 字体的转换软件。是使用Texlive运行Ctex模板的准备工作。

    美国大学生数学建模竞赛(MCMICM)

    美国大学生数学建模竞赛(MCMICM)。

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目 支持Unity版本2018.4.2或更高 包含在 Monster Full Pack 第 1 卷中*** 该包当前包含 5 个怪物。 包括: Bufomorph Drackmahre Morphorrid Pardathrox Perderos

    二维拓扑优化设计的后处理和平滑清晰几何图形的提取

    拓扑优化结果提取、设计结果CAD重构、边界提取、设计制造一体化; 二维拓扑优化设计的后处理和平滑清晰几何图形的提取; 适用于SIMP法、水平集法等典型拓扑优化方法。

    ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+参考文章).zip

    ASP.NET《数据库原理及应用技术》课程指导平台提供一个交互性强、功能丰富的在线学习环境,以促进数据库原理及应用技术的教学与学习。 在开发过程中,平台严格遵循软件工程的思想,从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试,都经过了精心的规划和实施。源代码是平台开发的核心,它采用了ASP.NET技术,确保了平台的稳定性和可扩展性。同时,源代码也体现了良好的编程规范和风格,易于理解和维护。

    自然语言,数据清洗后存储成jsonl格式文件

    自然语言,数据清洗后存储成jsonl格式文件

    大创大纲资料.txt-大创

    大创大纲资料.txt-大创

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    小学Scratch游戏化教学的实践研究-以泰州市Y小学为例

    随着智能教育时代的到来,计算机教育击彴祀勺中小学生必不可少的课程。我国陆续出台的文件,均指向鼓励在基础教育阶段开展编程课程。Scratch软件作为一种新型编程工具,以其简单易学、趣味性强等特点深受广大青少年丿谨i喜爱。但在日常教学中发现,传统讲授式教学方式不能长期维待学生学习兴趣,妇比以往学习效果大打折扣。2022年出版的《义务 教育信息科技课程标准》中明确指出,要求教育工作者创新教学方式,创设真实情境以提高 学生学习参与度。游戏化教学这种创新型教学方式, 在与各学科良好的结合效果下,也逐渐进入信息教育者的视野。因此本研究旨在将游戏化元素融入Scratch课堂,探究 Scratch游戏化教学设计一般流程在行动中不断峦进, 以期得到有效实施的策略和建议。 通过三轮行动研究,验证了小学Scratch游戏化教学的一般流程。同时总结出游戏化教学 应用策略,包括在游戏化教学设计时需要合理制定游戏规则,以控制课堂纪律和给予学生适当激励;明确小组分工,学生各司其职,在组内合作和组间竞争中培养学生合作精神;采用多元化评价方式,综合运用纸笔测试和个性创作等方法自评与他评相结合的方式,增强学 生自主学习能

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    纯CSS打造相册效果项目完整源码

    纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体方法:在抽象类中实现算法中不变的部分,这些方法通常是私有的,以避免子类对其进行修改。 抽象方法:在抽象类中声明一些抽象方法,这些方法是为了在子类中实现特定于子类的步骤。 钩子:可以提供一些默认实现的方法,这些方法通常为空或者包含默认逻辑,子类可以选择性地覆盖这些方法。 不变性:为了防止子类改变模板方法中的算法结构,可以将模板方法定义为 final,这样确保了算法结构的不变性。 总的来说,模板方法模式的目的是通过让子类重写某些步骤来增加新功能,同时保持算法的结构不变。这种模式在Java等面向对象的语言中非常常见,它利用了多态性来实现灵活的设计,使得子类可以在不改变算法结构的情况下,重定义算法的某些特定步骤。

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

Global site tag (gtag.js) - Google Analytics