基于 gpa 的性能分析方法...2 Ø ;? o @ +Ûd abcd v 3 w 3. 系统性能分析方法 ¢£...

11
1 基于 基于 基于 基于 GPA 的性能 的性能 的性能 的性能分析方法 分析方法 分析方法 分析方法 1. 介绍 介绍 介绍 介绍 4 SM4.0 DX10 DirectX 2 PC ? GPA 1 GPA DX GPA GPA 2. GPA 性能分析工具 性能分析工具 性能分析工具 性能分析工具 GPA GPA DirectX 2.0 DX9 DX10 GPA GPA GPA BUG wireframe DX DX GPA 4 GPA , GPA

Upload: others

Post on 13-Jul-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

1

基于基于基于基于 GPA 的性能的性能的性能的性能分析方法分析方法分析方法分析方法 作者:郭胜,英特尔公司软件与服务事业部

1. 介绍介绍介绍介绍 视频游戏在集成显卡上的性能日益成为游戏开发者关注的一个重要问题。这主要基于两方面的原因:一方面,最新的集成显卡在功能和性能上有了长足的进步。比如英特尔 4系列集成显卡已经支持最高 SM4.0渲染模式和 DX10,在 DirectX特性方面达到或超过大多数视频游戏的需求,测试表明这类集成显卡可保证市面上大多数视频游戏的可玩性【2】。另一方面,随着移动笔记本市场份额的迅速增长,作为移动 PC的主要图形解决方案,低功耗、高性价比的集成显卡部署量剧增。目前,很多购买移动平台的玩家会关心他们爱玩的游戏是否能在这样的平台上运行。因此,优化游戏在集成显卡上的性能,使之能达到可玩的帧速率,对吸引潜在玩家,提高游戏普及度有重要意义。 然而,由于游戏渲染技术和软硬件组件的复杂性,分析和优化游戏性能并不是一件容易的事。英特尔图形性能分析器(又称英特尔? GPA)【1】能大幅简化游戏在英特尔集成显卡上的性能调优工作。GPA 能采集从平台系统到每一帧的广泛的软硬件性能数据,并且提供各种 DX 状态覆盖和优化评估实验。如何使用 GPA丰富而强大的功能进行性能分析是本文探讨的重点。本文介绍了从实践中总结出来的一套适用于英特尔集成显卡的游戏性能分析方法,阐述了如何分析性能数据和快速定位性能瓶颈。结合这些分析方法使用 GPA 的各项功能,有助于找到最有效的优化方案,激发游戏在基于英特尔集成显卡的系统的性能潜力。

2. GPA 性能分析工具性能分析工具性能分析工具性能分析工具 英特尔的图形性能分析器(GPA)是一套帮助游戏开发人员分析、评估和改进运行于英特尔集成显卡上的游戏性能的工具套件。GPA适用于基于 DirectX的图形应用,当前的 2.0版本支持 DX9,后续版本将支持 DX10。使用 GPA 分析图形应用性能时不需要增加或改动任何源代码。GPA 主要包含两个性能分析工具:系统分析器和帧分析器。这两个工具可以使开发者分别从平台系统和单帧渲染的角度来观察游戏的性能表现和分析潜在的性能问题。GPA 支持假设性的实验,使开发者不需要修改和重新编译游戏程序的源代码,就能评估某种优化可能带来的性能提升。这种功能很有用,在正式优化前评估优化效果有利于提高优化的效率,因为没有开发者愿意看到修改了不少源代码,并解决了由此带来的 BUG,最后发现没有或只获得微小的性能提升。 除了强大的性能分析功能,有些游戏开发者还发现它的帧分析器是一个很好的游戏调试工具。例如系统分析器和帧分析器都有 wireframe模式,可看重叠的相互遮挡的物体,以及虽没有遮挡但实际不可见的物体。帧分析器可动态改变 DX状态,便于开发者不修改源代码和重新编译就能调试各种 DX状态对画面的影响。 另外,虽然目前 GPA只对英特尔 4系列以后的集成显卡提供官方支持,但实际上它的帧分析器也能运行在非英特尔的显卡上。 接下来的章节中将主要介绍基于GPA的性能分析方法,而GPA各项功能的细节和操作方

Page 2: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

2

法请参考 GPA软件的用户说明书和快速入门手册【3】。

3. 系统性能分析系统性能分析系统性能分析系统性能分析方法方法方法方法 分析游戏性能时,可以先寻找游戏在硬件上的瓶颈。从系统角度看,游戏渲染负载分布在 CPU、GPU、总线和内存四个主要的硬件域中。以下方法可以判断这些域中是否存在瓶颈:

1. 系统分析器提供了一组与 CPU利用率有关的计数器。当观察到某个 CPU核的平均利用率越接近 100%,则 CPU 端存在瓶颈的可能性越大。有时候,CPU 的平均利用率不是很高,但系统分析器显示它的波动范围的上限经常达到 100%,则 CPU端也有可能存在瓶颈,而且说明 CPU的负载很不稳定。

2. 判断 GPU上是否存在瓶颈可使用系统分析器的“Null hardware”状态覆盖模式。这个模式能去掉所有显卡上的负载以及显卡对内存和总线的访问。如果系统分析器显示帧速率明显上升,GPU存在瓶颈的可能性很大,反之则不然。

3. 集成显卡的显存大部分都在系统内存中,因此内存总线可能存在瓶颈。系统分析器提供了一组内存总线相关的计数器。如果(System Memory Overall Bandwidth)计数器显示的平均带宽值接近平台可维持的最大内存带宽,则说明总线是瓶颈的可能性很大。如果当前使用带宽的最大值低于平台可维持的最大内存带宽,则总线是瓶颈的可能性较低。根据当前的 DDR 技术,平台可维持的最大内存带宽通常是带宽理论峰值的 65%~70%。带宽理论峰值可通过下面公式计算。

公式中因子的值可通过 CPUZ 工具获得。例如 4 系列显卡的芯片组通常采用 DDR3 内存,频率为 533MHz,当使用两个内存槽时,带宽理论峰值为 17.1GB/s。实际可维持最大带宽约为 11.9GB/s。

4. 分析游戏性能时,通常测试平台的内存配置都会比游戏要求的大很多,因此成为瓶颈的可能性较小。判断内存尺寸是否是瓶颈,可以通过操作系统的 Perfmon工具比较内存使用量和总内存尺寸。

分析硬件瓶颈时,要注意以下一些特性:

� 系统中可能存在不只一个瓶颈。在渲染游戏画面时,不同的场景可能有不同的瓶颈。即使在一个场景中,绘制不同对象时也可能产生不同的瓶颈。例如,有的对象的瓶颈在纹理访问上,有的对象的瓶颈在像素着色上。另外某些因素可能导致硬件串行地处理负载。例如调用某些 DX锁或显卡查询时,CPU和 GPU互相等待交替执行。上述情况可以解释为何我们有时会发现管线中若干地方似乎都存在瓶颈。

� 我们并不是总能观察到明显的瓶颈,底层的硬件瓶颈更难发现,有时甚至是不可能的。原因是:并不是系统中所有硬件的负载都可以观察得到;另外,通过改变硬件的负载或处理能力来判断瓶颈时,这些改变往往会导致其他硬件的负载或处理能力也发生改变,比如修改管线前端的负载可能会影响管线后端的负载,而驱动、硬件等的优化机制(如 EarlyZ 等)也可能使对负载的调整并不象预期的那样。所以有可能使得原本不是瓶颈的硬件成为瓶颈,从而带来判断上的误差。 这些因素给瓶颈分析带来了复杂性。很多时候我们可以说某个地方是瓶颈的概率很大或

Page 3: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

3

很低,但并不是绝对的。各种可能性使判断瓶颈时需要多方面综合考察。 除了寻找硬件瓶颈,我们还可以通过观察渲染管线各个阶段的负载分布,从全局的角度分析性能问题的根源。 系统分析器提供的三个状态覆盖模式可以把游戏在图形渲染过程的负载分为四个主要阶段(如图 1)。这几个状态覆盖模式是:

� “Null Hardware”。此状态覆盖模式能把显卡上的负载去掉,可以用于评估显卡负载对帧速率的影响程度,以及判断游戏性能是否受限于显卡。

� “Null Driver”。此模式把显卡驱动以及其后显卡硬件上的负载都去掉,可以用于评估游戏应用层代码的负载对帧速率的影响程度。另外,此模式的帧速率反映了不修改代码的情况下,游戏在任何显卡上(保持 CPU和内存相同)的性能上限。

� “1X1 Scissor Rect”。从模式把显卡上的负载分为矩形裁剪前和裁剪后两大类。在 IIG实现中,此模式几乎可以去除显卡 Rasterization阶段后的所有负载,因此裁剪前主要是顶点相关的处理,裁剪后主要是像素(包括纹理)相关的处理。使用此模式可以评估象素处理(包括纹理)负载对帧速率的影响程度。

图图图图 1::::游戏渲染游戏渲染游戏渲染游戏渲染的负载分布的负载分布的负载分布的负载分布 通过系统分析器可以观察上述覆盖模式下的游戏帧速率和相应的帧时间,从而得到类似图 n的一个负载分布图。需要注意的是,图中显示的每个阶段的时间并不是它们实际处理每帧画面的时间,而是实际处理时间中对整个帧时间有影响的那部分。由于这些阶段有时会并行执行,因此它们的实际处理时间可能会更长。 从负载分布图中可以得到很多信息:

� 观察“裁剪后”阶段的影响时间。如果大于零,则说明像素处理过程中存在瓶颈,反之则不存在。

� 观察“裁剪前”阶段的影响时间。如果很小或为零,说明顶点处理不是瓶颈。否则存在瓶颈。

� 观察驱动的影响时间。如果驱动时间占的比重较大,则说明渲染调用和数据拷贝的量可能较大且(或)效率较低。这种情况下需要进一步考察 DirectX API调用的效率。

Page 4: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

4

� 观察应用层的影响时间。首先可以评估游戏帧速率的上限,正常性能应该在 100帧以上,否则要进一步考察应用层的效率。应用层主要包含游戏代码和 DirectX 层,可以通过VTune获得两部分负载的比例,从而推断是需要优化游戏代码,还是优化对 DirectX API的调用方式。

� 比较目标帧时间在负载分布图中的位置,评估是否仅优化显卡上的负载(如简化着色器)就可能达到所需的性能,还是需要进一步优化应用层的代码。

系统分析器提供了一组 DX 相关的性能计数器(图 2)。观察这些计数器的值有助于了解 DX层的开销,以及分析 DX调用行为对渲染管线后端的性能影响。

� DX绘制调用会产生一定开销。观察“DX Draw Calls per Frame”计数器的值,把它与此类型游戏的均值比较,可以了解 DX绘制调用是否太多。

� 频繁的 DX状态改变会产生很大的性能开销。通过“DX State Changes per Frame”和“DX

Draw Calls per Frame”计数器,可以算出平均每个绘制调用的状态变化数,把它与此类型游戏的均值比较,可以了解 DX状态改变是否太多。

� DX锁通常会使 GPU等待 CPU,因此越少越好。观察“DX Locks per Frame”每帧中锁调用的次数和“DX Lock Percent of Frame Time”占用帧时间的比例可以了解 DX锁调用对性能的影响。

图图图图 2:::: DX计数器的计数器的计数器的计数器的采样采样采样采样值值值值

4. 单帧性能分析单帧性能分析单帧性能分析单帧性能分析方法方法方法方法 慢帧包含了主要的性能瓶颈,分析其中的绘制调用能帮助你发现问题的根源,告诉你渲染哪些对象非常耗时,哪个渲染步骤是需要优化的。单帧分析时可以使用以下方法。

Page 5: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

5

4.1 寻找昂贵寻找昂贵寻找昂贵寻找昂贵的绘制调用的绘制调用的绘制调用的绘制调用 就像分析程序的 CPU性能时,我们总是关注热点函数一样,分析 GPU上的性能,首先需要关注的是昂贵的绘制调用,它们消耗了很多 GPU时间,往往是导致性能瓶颈的主要原因。使用帧分析器可以按照 GPU Duration对所有绘制调用进行排序(图 3),从而获得前几个最耗时的绘制调用。选择其中一个绘制调用,帧分析器能告诉你这个调用占用的 GPU时间以及在整个帧时间中的比重。很多时候,单独分析某一个昂贵调用的意义并不大,因为虽然这个调用比其他调用更耗时,但在整个帧时间中的比重可能很小,因此单独优化对整体性能的影响并不明显。真正需要关注的是某一批同类的绘制调用,比如所有绘制场景中的地形或植被的调用。如果帧分析器显示它们在整个帧时间中的比重很大,那么优化这批绘制调用能带来显著的性能提升。昂贵的绘制调用往往存在于昂贵的绘制调用集中。在帧分析器中,在某个昂贵绘制调用的着色器上使用鼠标右键的弹出菜单(图 3),可以选择使用这个着色器的所有绘制调用,从而把同类的绘制调用都找出来。当此昂贵调用没有自定义的着色器时,可通过相同方法,选择关联某个纹理的所有同类绘制调用。通过上述方法选择同类的绘制调用,还有一个作用,就是根据这些绘制调用的 ID号,能判断使用相同资源和着色器的绘制调用是否连续。如果不连续,则说明调整绘制顺序可能提高性能。

图图图图 3:::: 按按按按 GPU时间排序并选择所有相同着色器的绘制调用时间排序并选择所有相同着色器的绘制调用时间排序并选择所有相同着色器的绘制调用时间排序并选择所有相同着色器的绘制调用

当选择了一个或一组绘制调用,首先可以通过渲染目标观察绘制了那些对象,要关注这些对象的可见性和像素的覆盖范围,如果对象不可见或者可见范围很小,则意味着有很大优化空间。然后,可以观察与这些绘制调用关联的各种数据,通过各种实验分析性能瓶颈和评估潜在的优化效果。

4.2 分析图元批处理尺寸分析图元批处理尺寸分析图元批处理尺寸分析图元批处理尺寸 除了渲染对象的时间,绘制调用本身具有一定的额外开销。因此,为了提高效率,每个绘制调用批处理的图元个数不能太小。对于英特尔集成显卡来说,合适的图元批处理尺寸是

Page 6: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

6

200~1000。使用帧分析器可以按照 Prim Count对所有绘制调用进行排序(图 4),了解过小批处理尺寸的绘制调用所占的比例,以及它们渲染的对象,从而判断是否可以把它们进行合并提高效率。另一方面,对于过大批处理尺寸的绘制调用,观察它们在最终渲染目标上像素覆盖率,从而判断程序是否应用了细节分层(LOD)技术、或者适当的阻塞查询技术避免过度渲染开销。

图图图图 4:::: 按批处理尺寸排序按批处理尺寸排序按批处理尺寸排序按批处理尺寸排序,,,,观察顶点和像素处理的开销观察顶点和像素处理的开销观察顶点和像素处理的开销观察顶点和像素处理的开销

4.3 评估优化效果评估优化效果评估优化效果评估优化效果 优化程序无法避免修改代码,在此之前,如果能评估优化的效果,则能指明正确的方向,大大节约优化时间。因为修改代码会导致重新编译,还可能引入 bug,没有程序员愿意看到修改代码后,性能提升很小或者没有变化。 当选择了待分析的绘制调用后,首先观察和比较 Details Tab中的 Vertex Shader Duration和 Pixel Shader Duration(图 4),判断绘制调用的瓶颈主要在顶点处理还是像素处理上(注意,GPA提供的 Vertex Shader Duration和 Pixel Shader Duration泛指大部分顶点和像素相关的处理,因此即使用固定管线渲染,这两个数据依然有效)。如果瓶颈在顶点处理上,则需要检查顶点计算(如着色器程序)的复杂度和顶点数量等,可选择的优化方案有简化顶点计算、顶点网格的 LOD和阻塞查询等。如果瓶颈在像素处理上,则需要关注像素的个数、像素着色器的复杂度、纹理尺寸和过滤算法等。

Page 7: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

7

图图图图 5:::: 使用帧分析器进行各种实验使用帧分析器进行各种实验使用帧分析器进行各种实验使用帧分析器进行各种实验

当主要瓶颈在像素处理中时,可进行“2x2 Textures”实验(图 5),评估减小纹理尺寸能带来的最大性能提升。“2x2 Textures”实验可以使程序只访问显卡纹理 cache中的纹理,因此大大减少了从内存访问纹理的带宽和延迟。如果此实验显示绘制调用的时间减少很多,则纹理尺寸有可能是瓶颈。这时候需要进一步观察 Texture Tab中的纹理列表,看这些绘制调用使用了那些纹理和访问这些纹理的次数,考虑是否能减少纹理数量,或者使用 MIP 级别更高的小纹理。(tips:观察纹理有时也能帮助我们判断所选绘制调用渲染的是何场景对象。)

Page 8: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

8

图图图图 6:::: 改变纹理改变纹理改变纹理改变纹理MIP级别的实验级别的实验级别的实验级别的实验

继续使用“Clamp to MIP”实验(注意把帧分析器恢复到初始状态)可评估更低细节的纹理对性能和画面的影响(图 6)。方法是:选择一个被频繁访问的大尺寸纹理,调整 MIP级别使纹理尺寸减少,观察 GPU时间和“Normal”方式下的渲染目标的改变,如果发现时间减少明显而画面变化很小,则可以采用减少纹理分辨率的优化方案。通常,如果瓶颈确实是纹理尺寸的话,“Clamp to MIP”实验和“2x2 Textures”实验一样,都能使性能大幅提高。但也有例外的情况,我们曾观察到这样的案例:做“2x2 Textures”实验时 GPU时间减少很多,而用“Clamp to MIP”实验缩小纹理尺寸时 GPU时间却增加很多。原因是,绘制调用中进行了 Alpha测试(AlphaTest),而这两种实验不仅改变纹理的尺寸,还会改变纹理中的Alpha值,因此导致不同的 AlphaTest负载。当我们在 State Tab中关闭 AlphaTest后(图 7),发现时间减少的幅度和“2x2 Textures”实验差不多,从而发现问题的根源在 AlphaTest上,而不是纹理尺寸上。当瓶颈在 AlphaTest上时,可以通过调整 Alpha参考值来提升性能。

Page 9: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

9

图图图图 7:::: 改变改变改变改变 DX状态的实验状态的实验状态的实验状态的实验

除了纹理尺寸,纹理过滤算法也可能是瓶颈。如果你怀疑这方面的问题,则可以在StateTab中改变纹理采样器使用的过滤算法,评估简单算法能带来的优化效果。 当纹理相关的实验对性能影响不大时,可尝试“Simple Pixel Shader”实验(图 5)。此实验用一个很简单的像素着色器替换程序原有的像素着色过程。此着色器使用单一颜色对像素直接着色,所以没有访问纹理的开销。无论绘制调用使用的是自定义的着色器还是固定渲染管线,“Simple Pixel Shader”都会替换它们。如果此实验明显减少 GPU时间,并且可以排除纹理访问方面的瓶颈,则要重点关注着色程序的复杂度。此时在 Shaders Tab中检查着色器代码,看是否使用了复杂的着色指令或算法。Shaders Tab 中可以显示绘制调用使用的效果文件。通常效果文件中可能包含多个版本的着色器程序。如果你不是这部分代码的开发者,则可以通过对比当前 DX状态和着色器程序中指定的 DX状态,从而把绘制调用关联到具体的着色器代码上。

如果“Simple Pixel Shader”实验对性能的影响不是很大,可以在 Overdraw模式下观察渲染目标和屏幕某一点的像素历史(图 5),考察是否绘制调用重复渲染的像素过多。如果overdraw很多,可以考虑用 Disable erg实验(图 5),或编程时使用 earlyZ优化。 上面主要介绍在一种状态改变的情况下或一种覆盖模式下进行实验,实际分析过程中,开发者可以按需灵活组合多种状态修改和覆盖模式进行深入的分析。

4.4 分析绘制场景对象的次序分析绘制场景对象的次序分析绘制场景对象的次序分析绘制场景对象的次序 绘制场景对象的次序对性能的影响很大。比如按状态或资源排序,分组绘制场景对象能大大减少图形渲染管线切换的开销;从前向后渲染能减少像素过度着色等。在帧分析器中,依次选择绘制调用,观察渲染目标的改变,可以获得场景中各种对象的渲染顺序。分析渲染顺序时,要关注以下几个方面:

Page 10: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

10

� 判断这种顺序是否有利于提高性能,例如,具有相同渲染状态(包括 DX状态、着色器,纹理等)的绘制调用是否连续。

� 寻找其它昂贵的绘制调用集。有些同类的绘制调用放在一起时,在整个帧时间中的比重较大,但其中任何一个单独调用的 GPU开销却不大,因此这类绘制调用集无法通过最昂贵的绘制调用发现,却可以在分析场景渲染顺序时找出来。

� 绘制次序是否显示程序采用了某种优化技术。比如实现早期 Z裁剪(Early-Z Rejection)或阻塞查询的两趟绘制。由于某些技术只在特定条件下才有效果,否则反而对性能不利。因此如果程序中使用了这些技术,则需要通过帧分析器提供的各种信息判断这种技术是否真正有利于性能。比如,早期 Z 裁剪适合于像素多且着色复杂度高的对象,如果帧分析器显示绘制调用不满足这些条件,则可能会带来额外的性能开销。

� 考察是否有冗余的绘制调用,比如重复绘制场景对象或花大量时间绘制了最终不可见的对象。

4.5 观察渲染目标的变化观察渲染目标的变化观察渲染目标的变化观察渲染目标的变化 无论是选择了绘制调用,还是改变帧分析器中的状态,或进行了某种实验,渲染目标的变化都能提供很多信息。帧分析器提供了多种方式观察渲染目标,灵活组合使用这些功能可以全面观察场景。

� 如果要看绘制调用对画面的可见的改变,则选择 Normal方式;

� 如果要看绘制调用覆盖画面的范围,则选择 HightLight方式,此模式下不可见的绘制也会显示出来;

� 如果要看绘制调用渲染对象的网格,则选择 wireframe或 highlighted wireframe方式.

� 如果怀疑所选绘制调用渲染的对象被遮挡住了,则选择 pop out使这些对象显现出来。

� 如果要对比相邻两个绘制调用对画面的改变,使用 Scrub Mode

5. 总结总结总结总结 近年来,随着整合芯片技术的快速发展,集成显卡对视频游戏的支持正在不断增强。针对集成显卡优化游戏性能有助于提高游戏的潜在销量。本文分别从系统和单帧分析的角度介绍了基于英特尔图形性能分析器的分析方法。这些方法包括:观察性能计数器判断软硬件瓶颈;使用状态覆盖模式分析渲染负载分布;寻找每帧渲染中耗时的绘制调用;考察绘制调用的效率和顺序;利用各种实验评估最佳优化方向等。我们希望这些方法对开发者优化英特尔集成显卡上的游戏性能起到抛砖引玉的作用。也期待开发者在英特尔软件网络上分享使用GPA时发现的更多有效的性能分析方法和技巧。

参考资料参考资料参考资料参考资料

[1] http://software.intel.com/zh-cn/articles/intel-gpa/

[2] http://www.intel.com/support/graphics/sb/cs-012643.htm

[3] http://software.intel.com/en-us/articles/intel-graphics-performance-analyzers-quick-start-guide/

Page 11: 基于 GPA 的性能分析方法...2 Ø ;? O @ +Ûd ABCD V 3 W 3. 系统性能分析方法 ¢£ óQ'û EF ä Þß ³ 7´þ >'? GH ¢ I CPU n GPU nÒ J + KL M N

11

作者简介作者简介作者简介作者简介 郭胜郭胜郭胜郭胜 英特尔开发者关系部门的应用工程师,主要负责为游戏独立软件开发商(ISV)提供英特尔技术咨询和性能优化服务。他拥有南京大学计算机硕士学位,擅长实时 3D 图形应用的软件设计、编程以及性能优化。