﻿﻿<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated on Wed, 25 Nov 2009 15:51:50 -0800 -->
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="http://software.intel.com/zh-cn/articles/visual-computing/all/feed" rel="self" type="application/rss+xml" />
    <title>英特尔软件网络 articles FEED</title>
    <link>http://software.intel.com/zh-cn/articles/visual-computing/all</link>
    <description></description>
    <language>zh-cn</language>
    <item>
      <title>基于GPA的性能分析方法</title>
      <description><![CDATA[ 
<div style="layout-grid:15.6pt" class="Section1">
<p class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: &quot;Times New Roman&quot;; mso-ansi-language: ZH-CN;">作者</span><span style="font-size: 10pt; font-family: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: &quot;Times New Roman&quot;;">：</span><span style="font-size:10.0pt;font-family: 宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family: Arial">郭胜，</span><span style="font-size:10.0pt;font-family:宋体;mso-hansi-font-family: ">英特尔公司软件与服务事业部</span></p>
<h2 style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l3 level1 lfo6; tab-stops:list 21.0pt"><span style="mso-fareast-font-family: Arial;mso-bidi-font-family:Arial" lang="EN-US"><span style="mso-list:Ignore">1.<span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: 黑体; mso-ascii-font-family: Arial;">介绍</span></h2>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">视频游戏在集成显卡上的性能日益成为游戏开发者关注的一个重要问题。这主要基于两方面的原因：一方面，最新的集成显卡在功能和性能上有了长足的进步。比如英特尔</span><span lang="EN-US">4</span><span style="font-family:宋体;mso-ascii-font-family:">系列集成显卡已经支持最高</span><span lang="EN-US">SM4.0</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">渲染模式和</span><span lang="EN-US">DX10</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">，在</span><span lang="EN-US">DirectX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">特性方面达到或超过大多数视频游戏的需求，测试表明这类集成显卡可保证市面上大多数视频游戏的可玩性【</span><span lang="EN-US">2</span><span style="font-family:宋体;mso-ascii-font-family:">】。另一方面，随着移动笔记本市场份额的迅速增长，作为移动</span><span lang="EN-US">PC</span><span style="font-family:宋体;mso-ascii-font-family:">的主要图形解决方案，低功耗、高性价比的集成显卡部署量剧增。目前，很多购买移动平台的玩家会关心他们爱玩的游戏是否能在这样的平台上运行。因此，优化游戏在集成显卡上的性能，使之能达到可玩的帧速率，对吸引潜在玩家，提高游戏普及度有重要意义。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">然而，由于游戏渲染技术和软硬件组件的复杂性，分析和优化游戏性能并不是一件容易的事。英特尔图形性能分析器（又称英特尔</span><span lang="EN-US">? GPA</span><span style="font-family:宋体;mso-ascii-font-family:">）【</span><span lang="EN-US">1</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">】能大幅简化游戏在英特尔集成显卡上的性能调优工作。</span><span lang="EN-US">GPA</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">能采集从平台系统到每一帧的广泛的软硬件性能数据，并且提供各种</span><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">状态覆盖和优化评估实验。如何使用</span><span lang="EN-US">GPA</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">丰富而强大的功能进行性能分析是本文探讨的重点。本文介绍了从实践中总结出来的一套适用于英特尔集成显卡的游戏性能分析方法，阐述了如何分析性能数据和快速定位性能瓶颈。结合这些分析方法使用</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">的各项功能，有助于找到最有效的优化方案，激发游戏在基于英特尔集成显卡的系统的性能潜力。</span></p>
<h2 style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l3 level1 lfo6; tab-stops:list 21.0pt"><span style="mso-fareast-font-family: Arial;mso-bidi-font-family:Arial" lang="EN-US"><span style="mso-list:Ignore">2.<span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span lang="EN-US">GPA</span><span style="font-family:黑体;mso-ascii-font-family:Arial">性能分析工具</span></h2>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">英特尔的图形性能分析器（</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">）是一套帮助游戏开发人员分析、评估和改进运行于英特尔集成显卡上的游戏性能的工具套件。</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">适用于基于</span><span lang="EN-US"> DirectX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">的图形应用，当前的</span><span lang="EN-US">2.0</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">版本支持</span><span lang="EN-US">DX9</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">，后续版本将支持</span><span lang="EN-US">DX10</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">。使用</span><span lang="EN-US">GPA</span><span style="font-family: 宋体;mso-ascii-font-family:">分析图形应用性能时不需要增加或改动任何源代码。</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">主要包含两个性能分析工具：系统分析器和帧分析器。这两个工具可以使开发者分别从平台系统和单帧渲染的角度来观察游戏的性能表现和分析潜在的性能问题。</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">支持假设性的实验，使开发者不需要修改和重新编译游戏程序的源代码，就能评估某种优化可能带来的性能提升。这种功能很有用，在正式优化前评估优化效果有利于提高优化的效率，因为没有开发者愿意看到修改了不少源代码，并解决了由此带来的</span><span lang="EN-US">BUG</span><span style="font-family:宋体;mso-ascii-font-family:">，最后发现没有或只获得微小的性能提升。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">除了强大的性能分析功能，有些游戏开发者还发现它的帧分析器是一个很好的游戏调试工具。例如系统分析器和帧分析器都有</span><span lang="EN-US">wireframe</span><span style="font-family:宋体;mso-ascii-font-family: ">模式，可看重叠的相互遮挡的物体，以及虽没有遮挡但实际不可见的物体。帧分析器可动态改变</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态，便于开发者不修改源代码和重新编译就能调试各种</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态对画面的影响。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">另外，虽然目前</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">只对英特尔</span><span lang="EN-US">4</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">系列以后的集成显卡提供官方支持，但实际上它的帧分析器也能运行在非英特尔的显卡上。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">接下来的章节中将主要介绍基于</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">的性能分析方法</span><span lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">而</span><span lang="EN-US">GPA</span><span style="font-family: 宋体;mso-ascii-font-family:">各项功能的细节和操作方法请参考</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">软件的用户说明书和快速入门手册【</span><span lang="EN-US">3</span><span style="font-family:宋体;mso-ascii-font-family:">】。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<h2 style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l3 level1 lfo6; tab-stops:list 21.0pt"><span style="mso-fareast-font-family: Arial;mso-bidi-font-family:Arial" lang="EN-US"><span style="mso-list:Ignore">3.<span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: 黑体; mso-ascii-font-family: Arial;">系统性能分析方法</span></h2>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">分析游戏性能时，可以先寻找游戏在硬件上的瓶颈。从系统角度看，游戏渲染负载分布在</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">、</span><span lang="EN-US">GPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">、总线和内存四个主要的硬件域中。以下方法可以判断这些域中是否存在瓶颈：</span></p>
<p class="MsoNormal"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">1.<span style="font:7.0pt "> </span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">系统分析器提供了一组与</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">利用率有关的计数器。当观察到某个</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">核的平均利用率越接近</span><span lang="EN-US">100%</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">，则</span><span lang="EN-US">CPU</span><span style="font-family: 宋体;mso-ascii-font-family:">端存在瓶颈的可能性越大。有时候，</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">的平均利用率不是很高，但系统分析器显示它的波动范围的上限经常达到</span><span lang="EN-US">100%</span><span style="font-family:宋体;mso-ascii-font-family:">，则</span><span lang="EN-US">CPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">端也有可能存在瓶颈，而且说明</span><span lang="EN-US">CPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">的负载很不稳定。</span></p>
<p class="MsoNormal"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">2.<span style="font:7.0pt "> </span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">判断</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">上是否存在瓶颈可使用系统分析器的“</span><span lang="EN-US">Null hardware</span><span style="font-family:宋体;mso-ascii-font-family: ">”状态覆盖模式。这个模式能去掉所有显卡上的负载以及显卡对内存和总线的访问。如果系统分析器显示帧速率明显上升，</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">存在瓶颈的可能性很大，反之则不然。</span></p>
<p class="MsoNormal"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">3.<span style="font:7.0pt "> </span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">集成显卡的显存大部分都在系统内存中，因此内存总线可能存在瓶颈。系统分析器提供了一组内存总线相关的计数器。如果（</span><span lang="EN-US">System Memory Overall Bandwidth</span><span style="font-family:宋体; mso-ascii-font-family:">）计数器显示的平均带宽值接近平台可维持的最大内存带宽，则说明总线是瓶颈的可能性很大。如果当前使用带宽的最大值低于平台可维持的最大内存带宽，则总线是瓶颈的可能性较低。根据当前的</span><span lang="EN-US">DDR</span><span style="font-family:宋体;mso-ascii-font-family:">技术，平台可维持的最大内存带宽通常是带宽理论峰值的</span><span lang="EN-US">65</span><span style="font-family:宋体;mso-ascii-font-family:">％～</span><span lang="EN-US">70</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">％。带宽理论峰值可通过下面公式计算。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><v:shapetype id="_x0000_t75"><v:stroke></v:stroke><v:formulas><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f><v:f></v:f></v:formulas><v:path></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21480" alt="image002.png" width="640" title="image002.png" /></span></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">公式中因子的值可通过</span><span lang="EN-US">CPUZ</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">工具获得。例如</span><span lang="EN-US">4</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">系列显卡的芯片组通常采用</span><span lang="EN-US">DDR3</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">内存，频率为</span><span lang="EN-US">533MHz</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">，当使用两个内存槽时，带宽理论峰值为</span><span lang="EN-US">17.1GB/s</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">。实际可维持最大带宽约为</span><span lang="EN-US">11.9GB/s</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">。</span></p>
<p class="MsoNormal"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.<span style="font:7.0pt "> </span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">分析游戏性能时，通常测试平台的内存配置都会比游戏要求的大很多，因此成为瓶颈的可能性较小。判断内存尺寸是否是瓶颈，可以通过操作系统的</span><span lang="EN-US">Perfmon</span><span style="font-family:宋体;mso-ascii-font-family: ">工具比较内存使用量和总内存尺寸。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">分析硬件瓶颈时，要注意以下一些特性：</span></p>
<ul>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">系统中可能存在不只一个瓶颈。在渲染游戏画面时，不同的场景可能有不同的瓶颈。即使在一个场景中，绘制不同对象时也可能产生不同的瓶颈。例如，有的对象的瓶颈在纹理访问上，有的对象的瓶颈在像素着色上。另外某些因素可能导致硬件串行地处理负载。例如调用某些</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">锁或显卡查询时，</span><span lang="EN-US">CPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">和</span><span lang="EN-US">GPU</span><span style="font-family: 宋体;mso-ascii-font-family:">互相等待交替执行。上述情况可以解释为何我们有时会发现管线中若干地方似乎都存在瓶颈。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">我们并不是总能观察到明显的瓶颈，底层的硬件瓶颈更难发现，有时甚至是不可能的。原因是：并不是系统中所有硬件的负载都可以观察得到；另外，通过改变硬件的负载或处理能力来判断瓶颈时，这些改变往往会导致其他硬件的负载或处理能力也发生改变，比如修改管线前端的负载可能会影响管线后端的负载，而驱动、硬件等的优化机制（如</span><span lang="EN-US">EarlyZ</span><span style="font-family:宋体;mso-ascii-font-family:">等）也可能使对负载的调整并不象预期的那样。所以有可能使得原本不是瓶颈的硬件成为瓶颈，从而带来判断上的误差。</span></div>
</li>
</ul>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">这些因素给瓶颈分析带来了复杂性。很多时候我们可以说某个地方是瓶颈的概率很大或很低，但并不是绝对的。各种可能性使判断瓶颈时需要多方面综合考察。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">除了寻找硬件瓶颈，我们还可以通过观察渲染管线各个阶段的负载分布，从全局的角度分析性能问题的根源。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">系统分析器提供的三个状态覆盖模式可以把游戏在图形渲染过程的负载分为四个主要阶段（如图</span><span lang="EN-US">1</span><span style="font-family:宋体;mso-ascii-font-family:">）。这几个状态覆盖模式是：</span></p>
<ul>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">“</span><span lang="EN-US">Null Hardware</span><span style="font-family:宋体;mso-ascii-font-family: ">”。此状态覆盖模式能把显卡上的负载去掉，可以用于评估显卡负载对帧速率的影响程度，以及判断游戏性能是否受限于显卡。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">“</span><span lang="EN-US">Null Driver</span><span style="font-family:宋体;mso-ascii-font-family: ">”。此模式把显卡驱动以及其后显卡硬件上的负载都去掉，可以用于评估游戏应用层代码的负载对帧速率的影响程度。另外，此模式的帧速率反映了不修改代码的情况下，游戏在任何显卡上（保持</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">和内存相同）的性能上限。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">“</span><span lang="EN-US">1X1 Scissor Rect</span><span style="font-family:宋体;mso-ascii-font-family: ">”。从模式把显卡上的负载分为矩形裁剪前和裁剪后两大类。在</span><span lang="EN-US">IIG</span><span style="font-family:宋体;mso-ascii-font-family:">实现中，此模式几乎可以去除显卡</span><span lang="EN-US">Rasterization</span><span style="font-family:宋体;mso-ascii-font-family: ">阶段后的所有负载，因此裁剪前主要是顶点相关的处理，裁剪后主要是像素（包括纹理）相关的处理。使用此模式可以评估象素处理（包括纹理）负载对帧速率的影响程度。</span></div>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><img src="http://software.intel.com/file/21479" alt="image019.gif" width="640" title="image019.gif" /></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">1</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：游戏渲染的负载分布</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">通过系统分析器可以观察上述覆盖模式下的游戏帧速率和相应的帧时间，从而得到类似图</span><span lang="EN-US">n</span><span style="font-family:宋体;mso-ascii-font-family:">的一个负载分布图。需要注意的是，图中显示的每个阶段的时间并不是它们实际处理每帧画面的时间，而是实际处理时间中对整个帧时间有影响的那部分。由于这些阶段有时会并行执行，因此它们的实际处理时间可能会更长。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">从负载分布图中可以得到很多信息：</span></p>
<ul>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">观察“裁剪后”阶段的影响时间。如果大于零，则说明像素处理过程中存在瓶颈，反之则不存在。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">观察“裁剪前”阶段的影响时间。如果很小或为零，说明顶点处理不是瓶颈。否则存在瓶颈。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">观察驱动的影响时间。如果驱动时间占的比重较大，则说明渲染调用和数据拷贝的量可能较大且（或）效率较低。这种情况下需要进一步考察</span><span lang="EN-US">DirectX API</span><span style="font-family:宋体;mso-ascii-font-family: ">调用的效率。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family:宋体;mso-ascii-font-family: "><span style="font-family: Verdana;"></span>观察应用层的影响时间。首先可以评估游戏帧速率的上限，正常性能应该在</span><span lang="EN-US">100</span><span style="font-family:宋体;mso-ascii-font-family:">帧以上，否则要进一步考察应用层的效率。应用层主要包含游戏代码和</span><span lang="EN-US">DirectX</span><span style="font-family:宋体;mso-ascii-font-family: ">层，可以通过</span><span lang="EN-US">VTune</span><span style="font-family:宋体;mso-ascii-font-family:">获得两部分负载的比例，从而推断是需要优化游戏代码，还是优化对</span><span lang="EN-US">DirectX API</span><span style="font-family:宋体;mso-ascii-font-family: ">的调用方式。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">比较目标帧时间在负载分布图中的位置，评估是否仅优化显卡上的负载（如简化着色器）就可能达到所需的性能，还是需要进一步优化应用层的代码。</span></div>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">系统分析器提供了一组</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">相关的性能计数器（图</span><span lang="EN-US">2</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">）。观察这些计数器的值有助于了解</span><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">层的开销，以及分析</span><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">调用行为对渲染管线后端的性能影响。</span></p>
<ul>
<li>
<div class="MsoNormal"><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">绘制调用会产生一定开销。观察“</span><span lang="EN-US">DX Draw Calls per Frame</span><span style="font-family:宋体;mso-ascii-font-family:">”计数器的值，把它与此类型游戏的均值比较，可以了解</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">绘制调用是否太多。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">频繁的</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态改变会产生很大的性能开销。通过“</span><span lang="EN-US">DX State Changes per Frame</span><span style="font-family:宋体; mso-ascii-font-family:">”和“</span><span lang="EN-US">DX Draw Calls per Frame</span><span style="font-family:宋体; mso-ascii-font-family:">”计数器，可以算出平均每个绘制调用的状态变化数，把它与此类型游戏的均值比较，可以了解</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态改变是否太多。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">锁通常会使</span><span lang="EN-US">GPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">等待</span><span lang="EN-US">CPU</span><span style="font-family: 宋体;mso-ascii-font-family:">，因此越少越好。观察“</span><span lang="EN-US">DX Locks per Frame</span><span style="font-family:宋体;mso-ascii-font-family: ">”每帧中锁调用的次数和“</span><span lang="EN-US">DX Lock Percent of Frame Time</span><span style="font-family:宋体; mso-ascii-font-family:">”占用帧时间的比例可以了解</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">锁调用对性能的影响。</span></div>
</li>
</ul>
<p class="MsoNormal"><b style="mso-bidi-font-weight:normal"><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: Arial; mso-font-kerning: 0pt;" lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21481" alt="image006.png" width="640" title="image006.png" /></span></span></p>
<span style="font-size: 12pt; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体;" lang="EN-US"><o:p></o:p></span>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">2</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"> DX</span></b><b style="mso-bidi-font-weight:normal"><span style="font-size: 14.0pt;font-family:宋体;mso-ascii-font-family:">计数器的采样值</span></b><b style="mso-bidi-font-weight:normal"><span style="font-size: 14pt;" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<h2 style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l3 level1 lfo6; tab-stops:list 21.0pt"><span style="mso-fareast-font-family: Arial;mso-bidi-font-family:Arial" lang="EN-US"><span style="mso-list:Ignore">4.<span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: 黑体; mso-ascii-font-family: Arial;">单帧性能分析方法</span></h2>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">慢帧包含了主要的性能瓶颈，分析其中的绘制调用能帮助你发现问题的根源，告诉你渲染哪些对象非常耗时，哪个渲染步骤是需要优化的。单帧分析时可以使用以下方法。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.1<span style="font:7.0pt "> </span></span></span></b><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">寻找昂贵的绘制调用</span><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">就像分析程序的</span><span lang="EN-US">CPU</span><span style="font-family:宋体;mso-ascii-font-family:">性能时，我们总是关注热点函数一样，分析</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">上的性能，首先需要关注的是昂贵的绘制调用，它们消耗了很多</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">时间，往往是导致性能瓶颈的主要原因。使用帧分析器可以按照</span><span lang="EN-US">GPU Duration</span><span style="font-family:宋体;mso-ascii-font-family: ">对所有绘制调用进行排序（图</span><span lang="EN-US">3</span><span style="font-family:宋体;mso-ascii-font-family:">），从而获得前几个最耗时的绘制调用。选择其中一个绘制调用，帧分析器能告诉你这个调用占用的</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">时间以及在整个帧时间中的比重。很多时候，单独分析某一个昂贵调用的意义并不大，因为虽然这个调用比其他调用更耗时，但在整个帧时间中的比重可能很小，因此单独优化对整体性能的影响并不明显。真正需要关注的是某一批同类的绘制调用，比如所有绘制场景中的地形或植被的调用。如果帧分析器显示它们在整个帧时间中的比重很大，那么优化这批绘制调用能带来显著的性能提升。昂贵的绘制调用往往存在于昂贵的绘制调用集中。在帧分析器中，在某个昂贵绘制调用的着色器上使用鼠标右键的弹出菜单（图</span><span lang="EN-US">3</span><span style="font-family:宋体;mso-ascii-font-family:">），可以选择使用这个着色器的所有绘制调用，从而把同类的绘制调用都找出来。当此昂贵调用没有自定义的着色器时，可通过相同方法，选择关联某个纹理的所有同类绘制调用。通过上述方法选择同类的绘制调用，还有一个作用，就是根据这些绘制调用的</span><span lang="EN-US">ID</span><span style="font-family:宋体;mso-ascii-font-family:">号，能判断使用相同资源和着色器的绘制调用是否连续。如果不连续，则说明调整绘制顺序可能提高性能。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21482" alt="image008.png" width="640" title="image008.png" /></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">3</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt"> </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">按</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">GPU</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">时间排序并选择所有相同着色器的绘制调用</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">当选择了一个或一组绘制调用，首先可以通过渲染目标观察绘制了那些对象，要关注这些对象的可见性和像素的覆盖范围，如果对象不可见或者可见范围很小，则意味着有很大优化空间。然后，可以观察与这些绘制调用关联的各种数据，通过各种实验分析性能瓶颈和评估潜在的优化效果。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.2<span style="font:7.0pt "> </span></span></span></b><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">分析图元批处理尺寸</span><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">除了渲染对象的时间，绘制调用本身具有一定的额外开销。因此，为了提高效率，每个绘制调用批处理的图元个数不能太小。对于英特尔集成显卡来说，合适的图元批处理尺寸是</span><span lang="EN-US">200~1000</span><span style="font-family:宋体;mso-ascii-font-family: ">。使用帧分析器可以按照</span><span lang="EN-US">Prim Count</span><span style="font-family:宋体;mso-ascii-font-family: ">对所有绘制调用进行排序（图</span><span lang="EN-US">4</span><span style="font-family:宋体;mso-ascii-font-family:">），了解过小批处理尺寸的绘制调用所占的比例，以及它们渲染的对象，从而判断是否可以把它们进行合并提高效率。另一方面，对于过大批处理尺寸的绘制调用，观察它们在最终渲染目标上像素覆盖率，从而判断程序是否应用了细节分层（</span><span lang="EN-US">LOD</span><span style="font-family:宋体;mso-ascii-font-family:">）技术、或者适当的阻塞查询技术避免过度渲染开销。</span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21483" alt="image010.png" width="640" title="image010.png" /></span>
  <o:p></o:p></span></b></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">4</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt"> </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">按批处理尺寸排序，观察顶点和像素处理的开销</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.3<span style="font:7.0pt "> </span></span></span></b><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">评估优化效果</span><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">优化程序无法避免修改代码，在此之前，如果能评估优化的效果，则能指明正确的方向，大大节约优化时间。因为修改代码会导致重新编译，还可能引入</span><span lang="EN-US">bug</span><span style="font-family:宋体;mso-ascii-font-family:">，没有程序员愿意看到修改代码后，性能提升很小或者没有变化。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">当选择了待分析的绘制调用后，首先观察和比较</span><span lang="EN-US">Details Tab</span><span style="font-family:宋体;mso-ascii-font-family: ">中的</span><span lang="EN-US">Vertex Shader Duration</span><span style="font-family:宋体;mso-ascii-font-family: ">和</span><span lang="EN-US">Pixel Shader Duration</span><span style="font-family:宋体;mso-ascii-font-family: ">（图</span><span lang="EN-US">4</span><span style="font-family:宋体;mso-ascii-font-family:">），判断绘制调用的瓶颈主要在顶点处理还是像素处理上（注意，</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">提供的</span><span lang="EN-US">Vertex Shader Duration</span><span style="font-family:宋体;mso-ascii-font-family:">和</span><span lang="EN-US">Pixel Shader Duration</span><span style="font-family:宋体;mso-ascii-font-family:">泛指大部分顶点和像素相关的处理，因此即使用固定管线渲染，这两个数据依然有效）。如果瓶颈在顶点处理上，则需要检查顶点计算（如着色器程序）的复杂度和顶点数量等，可选择的优化方案有简化顶点计算、顶点网格的</span><span lang="EN-US">LOD</span><span style="font-family:宋体;mso-ascii-font-family:">和阻塞查询等。如果瓶颈在像素处理上，则需要关注像素的个数、像素着色器的复杂度、纹理尺寸和过滤算法等。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21484" alt="image012.png" width="640" title="image012.png" /></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">5</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt"> </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">使用帧分析器进行各种实验</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">当主要瓶颈在像素处理中时，可进行“</span><span lang="EN-US">2x2 Textures</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验（图</span><span lang="EN-US">5</span><span style="font-family:宋体;mso-ascii-font-family:">），评估减小纹理尺寸能带来的最大性能提升。“</span><span lang="EN-US">2x2 Textures</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验可以使程序只访问显卡纹理</span><span lang="EN-US">cache</span><span style="font-family:宋体;mso-ascii-font-family:">中的纹理，因此大大减少了从内存访问纹理的带宽和延迟。如果此实验显示绘制调用的时间减少很多，则纹理尺寸有可能是瓶颈。这时候需要进一步观察</span><span lang="EN-US">Texture Tab</span><span style="font-family:宋体;mso-ascii-font-family: ">中的纹理列表，看这些绘制调用使用了那些纹理和访问这些纹理的次数，考虑是否能减少纹理数量，或者使用</span><span lang="EN-US">MIP</span><span style="font-family:宋体;mso-ascii-font-family:">级别更高的小纹理。（</span><span lang="EN-US">tips</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">：观察纹理有时也能帮助我们判断所选绘制调用渲染的是何场景对象。）</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21485" alt="image014.png" width="640" title="image014.png" /></span></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">6</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt"> </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">改变纹理</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">MIP</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">级别的实验</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">使用“</span><span lang="EN-US">Clamp to MIP</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验（注意把帧分析器恢复到初始状态）可评估更低细节的纹理对性能和画面的影响（图</span><span lang="EN-US">6</span><span style="font-family:宋体;mso-ascii-font-family:">）。方法是：选择一个被频繁访问的大尺寸纹理，调整</span><span lang="EN-US">MIP</span><span style="font-family:宋体;mso-ascii-font-family:">级别使纹理尺寸减少，观察</span><span lang="EN-US">GPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">时间和“</span><span lang="EN-US">Normal</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">”方式下的渲染目标的改变，如果发现时间减少明显而画面变化很小，则可以采用减少纹理分辨率的优化方案。通常，如果瓶颈确实是纹理尺寸的话，“</span><span lang="EN-US">Clamp to MIP</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验和“</span><span lang="EN-US">2x2 Textures</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验一样，都能使性能大幅提高。但也有例外的情况，我们曾观察到这样的案例：做“</span><span lang="EN-US">2x2 Textures</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验时</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">时间减少很多，而用“</span><span lang="EN-US">Clamp to MIP</span><span style="font-family:宋体;mso-ascii-font-family:">”实验缩小纹理尺寸时</span><span lang="EN-US">GPU</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">时间却增加很多。原因是，绘制调用中进行了</span><span lang="EN-US">Alpha</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">测试（</span><span lang="EN-US">AlphaTest</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">），而这两种实验不仅改变纹理的尺寸，还会改变纹理中的</span><span lang="EN-US">Alpha</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">值，因此导致不同的</span><span lang="EN-US">AlphaTest</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">负载。当我们在</span><span lang="EN-US">State Tab</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">中关闭</span><span lang="EN-US">AlphaTest</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">后（图</span><span lang="EN-US">7</span><span style="font-family: 宋体;mso-ascii-font-family:">），发现时间减少的幅度和“</span><span lang="EN-US">2x2 Textures</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验差不多，从而发现问题的根源在</span><span lang="EN-US">AlphaTest</span><span style="font-family:宋体;mso-ascii-font-family: ">上，而不是纹理尺寸上。当瓶颈在</span><span lang="EN-US">AlphaTest</span><span style="font-family:宋体;mso-ascii-font-family: ">上时，可以通过调整</span><span lang="EN-US">Alpha</span><span style="font-family:宋体;mso-ascii-font-family:">参考值来提升性能。</span></p>
<p class="MsoNormal"><span style="font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-hansi-font-family: 宋体;" lang="EN-US"><span style="font-family:宋体; mso-ascii-font-family:"><img src="http://software.intel.com/file/21486" alt="image016.png" width="640" title="image016.png" /></span>
  <o:p></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal"><span style="font-size:14.0pt;font-family:宋体;mso-ascii-font-family: ">图</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">7</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">：</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt"> </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">改变</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US">DX</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt;font-family: 宋体;mso-ascii-font-family:">状态的实验</span></b><b style="mso-bidi-font-weight: normal;"><span style="font-size:14.0pt" lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">纹理尺寸，纹理过滤算法也可能是瓶颈。如果你怀疑这方面的问题，则可以在</span><span lang="EN-US">StateTab</span><span style="font-family:宋体;mso-ascii-font-family: ">中改变纹理采样器使用的过滤算法，评估简单算法能带来的优化效果。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">当纹理相关的实验对性能影响不大时，可尝试“</span><span lang="EN-US">Simple Pixel Shader</span><span style="font-family:宋体;mso-ascii-font-family: ">”实验（图</span><span lang="EN-US">5</span><span style="font-family:宋体;mso-ascii-font-family:">）。此实验用一个很简单的像素着色器替换程序原有的像素着色过程。此着色器使用单一颜色对像素直接着色，所以没有访问纹理的开销。无论绘制调用使用的是自定义的着色器还是固定渲染管线，“</span><span lang="EN-US">Simple Pixel Shader</span><span style="font-family:宋体;mso-ascii-font-family: ">”都会替换它们。如果此实验明显减少</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">时间，并且可以排除纹理访问方面的瓶颈，则要重点关注着色程序的复杂度。此时在</span><span lang="EN-US">Shaders Tab</span><span style="font-family:宋体;mso-ascii-font-family: ">中检查着色器代码，看是否使用了复杂的着色指令或算法。</span><span lang="EN-US">Shaders Tab</span><span style="font-family:宋体;mso-ascii-font-family: ">中可以显示绘制调用使用的效果文件。通常效果文件中可能包含多个版本的着色器程序。如果你不是这部分代码的开发者，则可以通过对比当前</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态和着色器程序中指定的</span><span lang="EN-US">DX</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">状态，从而把绘制调用关联到具体的着色器代码上。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count:1"></span></span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">如果“</span><span lang="EN-US">Simple Pixel Shader</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">”实验对性能的影响不是很大，可以在</span><span lang="EN-US">Overdraw</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">模式下观察渲染目标和屏幕某一点的像素历史（图</span><span lang="EN-US">5</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">），考察是否绘制调用重复渲染的像素过多。如果</span><span lang="EN-US">overdraw</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">很多，可以考虑用</span><span lang="EN-US">Disable erg</span><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">实验（图</span><span lang="EN-US">5</span><span style="font-family: 宋体;mso-ascii-font-family:">），或编程时使用</span><span lang="EN-US">earlyZ</span><span style="font-family:宋体;mso-ascii-font-family:">优化。</span></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">上面主要介绍在一种状态改变的情况下或一种覆盖模式下进行实验，实际分析过程中，开发者可以按需灵活组合多种状态修改和覆盖模式进行深入的分析。</span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight:normal"><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.4<span style="font:7.0pt "> </span></span></span></b><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">分析绘制场景对象的次序</span><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">场景对象的次序对性能的影响很大。比如按状态或资源排序，分组绘制场景对象能大大减少图形渲染管线切换的开销；从前向后渲染能减少像素过度着色等。在帧分析器中，依次选择绘制调用，观察渲染目标的改变，可以获得场景中各种对象的渲染顺序。分析渲染顺序时，要关注以下几个方面：</span></p>
<ul>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">判断这种顺序是否有利于提高性能，例如，具有相同渲染状态（包括</span><span lang="EN-US">DX</span><span style="font-family:宋体;mso-ascii-font-family:">状态、着色器，纹理等）的绘制调用是否连续。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">寻找其它昂贵的绘制调用集。有些同类的绘制调用放在一起时，在整个帧时间中的比重较大，但其中任何一个单独调用的</span><span lang="EN-US">GPU</span><span style="font-family:宋体;mso-ascii-font-family:">开销却不大，因此这类绘制调用集无法通过最昂贵的绘制调用发现，却可以在分析场景渲染顺序时找出来。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">绘制次序是否显示程序采用了某种优化技术。比如实现早期</span><span lang="EN-US">Z</span><span style="font-family:宋体;mso-ascii-font-family:">裁剪（</span><span lang="EN-US">Early-Z Rejection</span><span style="font-family:宋体;mso-ascii-font-family:">）或阻塞查询的两趟绘制。由于某些技术只在特定条件下才有效果，否则反而对性能不利。因此如果程序中使用了这些技术，则需要通过帧分析器提供的各种信息判断这种技术是否真正有利于性能。比如，早期</span><span lang="EN-US">Z</span><span style="font-family:宋体;mso-ascii-font-family:">裁剪适合于像素多且着色复杂度高的对象，如果帧分析器显示绘制调用不满足这些条件，则可能会带来额外的性能开销。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">考察是否有冗余的绘制调用，比如重复绘制场景对象或花大量时间绘制了最终不可见的对象。</span></div>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span style="mso-fareast-font-family: " lang="EN-US"><span style="mso-list:Ignore">4.5<span style="font:7.0pt "> </span></span></span></b><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">观察渲染目标的变化</span><span lang="EN-US"><o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">是选择了绘制调用，还是改变帧分析器中的状态，或进行了某种实验，渲染目标的变化都能提供很多信息。帧分析器提供了多种方式观察渲染目标，灵活组合使用这些功能可以全面观察场景。</span></p>
<ul>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">如果要看绘制调用对画面的可见的改变，则选择</span><span lang="EN-US">Normal</span><span style="font-family:宋体;mso-ascii-font-family:">方式；</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">如果要看绘制调用覆盖画面的范围，则选择</span><span lang="EN-US">HightLight</span><span style="font-family:宋体;mso-ascii-font-family: ">方式，此模式下不可见的绘制也会显示出来；</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">如果要看绘制调用渲染对象的网格，则选择</span><span lang="EN-US">wireframe</span><span style="font-family:宋体;mso-ascii-font-family: ">或</span><span lang="EN-US">highlighted wireframe</span><span style="font-family:宋体;mso-ascii-font-family: ">方式</span><span lang="EN-US">.</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">如果怀疑所选绘制调用渲染的对象被遮挡住了，则选择</span><span lang="EN-US">pop out</span><span style="font-family:宋体;mso-ascii-font-family: ">使这些对象显现出来。</span></div>
</li>
<li>
<div class="MsoNormal"><span style="font-family: Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:Wingdings" lang="EN-US"><span style="mso-list: Ignore;"><span style="font:7.0pt "></span></span></span><span style="font-family:宋体;mso-ascii-font-family: ">如果要对比相邻两个绘制调用对画面的改变，使用</span><span lang="EN-US">Scrub Mode</span></div>
</li>
</ul>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<h2 style="margin-left:21.0pt;text-indent:-21.0pt;mso-list:l3 level1 lfo6; tab-stops:list 21.0pt"><span style="mso-fareast-font-family: Arial;mso-bidi-font-family:Arial" lang="EN-US"><span style="mso-list:Ignore">5.<span style="font: 7pt &quot;Times New Roman&quot;;"> </span></span></span><span style="font-family: 黑体; mso-ascii-font-family: Arial;">总结</span></h2>
<p class="MsoNormal"><span style="font-family:宋体; mso-ascii-font-family:">近年来，随着整合芯片技术的快速发展，集成显卡对视频游戏的支持正在不断增强。针对集成显卡优化游戏性能有助于提高游戏的潜在销量。本文分别从系统和单帧分析的角度介绍了基于英特尔图形性能分析器的分析方法。这些方法包括：观察性能计数器判断软硬件瓶颈；使用状态覆盖模式分析渲染负载分布；寻找每帧渲染中耗时的绘制调用；考察绘制调用的效率和顺序；利用各种实验评估最佳优化方向等。我们希望这些方法对开发者优化英特尔集成显卡上的游戏性能起到抛砖引玉的作用。也期待开发者在英特尔软件网络上分享使用</span><span lang="EN-US">GPA</span><span style="font-family:宋体;mso-ascii-font-family:">时发现的更多有效的性能分析方法和技巧。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<h2><span style="font-family:黑体;mso-ascii-font-family:Arial">参考资料</span><span lang="EN-US"> </span></h2>
<p class="MsoNormal"><span lang="EN-US">[1] <a href="http://software.intel.com/zh-cn/articles/intel-gpa/">http://software.intel.com/zh-cn/articles/intel-gpa/</a></span><span class="a"><span style="font-size:10.0pt;font-family:Arial;color:black" lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span class="a"><span style="font-size:10.0pt; font-family:Arial;color:black" lang="EN-US">[ 2 ] </span></span><span class="MsoHyperlink"><span lang="EN-US"><a href="http://www.intel.com/support/graphics/sb/cs-012643.htm">http://www.intel.com/support/graphics/sb/cs-012643.htm</a></span></span><span class="a"><span style="font-size:10.0pt;font-family:Arial;color:black" lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span lang="EN-US">[3] <a href="http://software.intel.com/en-us/articles/intel-graphics-performance-analyzers-quick-start-guide/">http://software.intel.com/en-us/articles/intel-graphics-performance-analyzers-quick-start-guide/</a> <br /><br /><b>PDF下载</b><br /><a href="http://software.intel.com/file/21490" onclick="function onclick() { function onclick() { ndownload('http://software.intel.com/file/21490') } }">基于GPA的性能分析方法.pdf</a><br /></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<h2><span style="font-family:黑体;mso-ascii-font-family:Arial">作者简介</span></h2>
<p class="MsoNormal"><b style="mso-bidi-font-weight:normal"><span style="font-family: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">郭胜</span></b> <span style="font-family:宋体;mso-ascii-font-family: ">英特尔开发者关系部门的应用工程师，主要负责为游戏独立软件开发商（</span><span lang="EN-US">ISV</span><span style="font-family:宋体;mso-ascii-font-family:">）提供英特尔技术咨询和性能优化服务。他拥有南京大学计算机硕士学位，擅长实时</span><span lang="EN-US"> 3D </span><span style="font-family:宋体;mso-ascii-font-family:">图形应用的软件设计、编程以及性能优化。</span></p>
<p class="MsoNormal"><span class="a"><span style="font-size:10.0pt; font-family:Arial;color:black" lang="EN-US"><o:p></o:p></span></span></p>
</div>


 ]]></description>
      <link>http://software.intel.com/zh-cn/articles/GPA-Analysis-Method</link>
      <pubDate>Sun, 20 Sep 2009 22:27:58 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/GPA-Analysis-Method#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/GPA-Analysis-Method</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>国内流行网游在英特尔多核集成显卡平台上的测试与结果分析</title>
      <description><![CDATA[ <p style="text-align: left;"><strong class="sectionHeading">国内流行网游在英特尔多核集成显卡平台上的测试与结果分析</strong><br /><br />吴晓昶 张妤芝<br /><br />摘要<br />长久以来，集成显卡被视为性能低下的产品，对于主流游戏无论是技术规格还是3D性能上都显得不足。我们对国内流行的网游在英特尔最新的多核集成显卡平台上进行测试，测试结果表明英特尔多核集成显卡平台对大多数的国内网游具有足够的规格和性能支持，基本上能满足大多数游戏玩家的需求。</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/intel-multi-core-graphic-test</link>
      <pubDate>Sun, 21 Jun 2009 20:49:49 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/intel-multi-core-graphic-test#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/intel-multi-core-graphic-test</guid>
      <category>多核软件开发</category>
      <category>Graphics</category>
      <category>视觉计算</category>
    </item>
    <item>
      <title>利用多核扩充性能</title>
      <description><![CDATA[ <strong>隆重推介 SMOKE 框架和演示</strong><br /><br /><em>作者：Orion Granatir 和 Ryan Shrout<br /></em><br />
<p>继 2004 年主频大战使处理器技术改进步伐开始变缓之后，第一款多核处理器在主流市场的投放，开启了个人计算的新纪元。通常人们会认为，随着处理内核的倍增，性能也将翻倍。但在数年之后的今天，我们都知道，对于某些我们钟爱的应用，事实并非如此。要发挥多核处理器的全部能力需要多线程应用，而相比传统的编码工作，开发合理线程化的软件是一项不同且更加有难度的任务。</p>
<p>如今，游戏开发工作已经落后于多线程软件的发展。鉴于典型的编码结构主要会涉及一个巨大的 while 循环，游戏成为了消耗主频大战中所涉及处理器纯速度的单线程程序的缩影。现在，既然我们都在向“更多内核”而不是“更多时钟”的方向发展，那么游戏开发人员就需要调整编程模式和思路来充分利用电脑硬件，甚至利用游戏社区。</p>
<p>正如所有现代编码员所知晓的那样，线程化并非一件易事。然而，尽管最初构建多线程游戏引擎需要做大量工作，但回报却是相当丰厚的，并且可一直延续到未来。（如欲了解详细信息，请参阅<a href="http://whatif.intel.com/">http://whatif.intel.com/</a> 上 Jeff Andrews 撰写的《设计并行游戏引擎》一文。）</p>
<p>作为多核处理器制造商，英特尔当然希望促进可充分发挥处理器全部性能的适当技巧的发展。有鉴于此，英特尔开发了名为 Smoke 的双用途框架和技术演示，重点介绍正确实施的多线程游戏的优势。它还向游戏开发人员展示了如何实现线程管理、资源共享和工作负载的平衡，以创建一个适用于当今和未来处理器的高度模块化、灵活的游戏引擎。</p>
<p class="sectionHeading"><br /><br /><strong>什么是 Smoke？</strong></p>
<p>Smoke 是一个在纯游戏环境中最大限度提高处理器性能的模型框架。旨在充分利用所有可用的线程，Smoke 在标准的双核英特尔® 赛扬® 处理器和支持英特尔® 超线程（HT）技术的新英特尔® 酷睿™ i7 处理器上的运行效率均相同。曾在多个展会和技术活动上公开展示的Smoke 视频演示，使用了多项现代化的游戏开发技术，包括支持物理处理的 Havok，支持音频回放的 FMOD，支持图形渲染的 Ogre* 3D 和 DirectX* 9 等等。鉴于您可能希望获得内部开发的演示，此处代码所展示的为已经完成分区、可配置的Smoke 框架产品。英特尔开发 Smoke 主要是作为一项教学工具，用于展示创建可扩充至任意数量线程的框架的能力。 <br />我们鼓励开发人员通过检验新的线程技巧，了解通常会抑制游戏潜在线程能力的不同游戏引擎系统间的交互情况，来深入探索这项技术。英特尔希望通过 Smoke 和其它工作，帮助证明可以高效地完成多线程游戏开发，而相应的时间投资也是值得的。</p>
将 Smoke 划分为多个部分，其框架设计（参见图 1）的简单性显而易见，这样做还可以明确说明，软件如何支持含有 N 个线程的硬件高效运作。
<p><img src="http://software.intel.com/file/16834" alt="" /></p>
<p>图 1：Smoke 框架 <br />该框架围绕一个调度程序和一个变更控制管理器（CCM）设计而成，前者负责管理系统任务，后者负责最大限度减少线程游戏的传统缺陷：线程同步。数据结构在 Smoke 框架的多个任务和线程间共享数据，旨在通过易于开发的接口支持独立处理和系统模块性。</p>
调度程序是逻辑组件，负责管理由每个单独系统决定的各种系统任务。当每个系统部署了适当的接口后，该系统便能够轻松高效地与框架进行交互。
<p><img src="http://software.intel.com/file/16835" alt="" /></p>
<p>图 2：CCM 负责系统间的通信。 <br />CCM 负责系统间的通信。CCM（参见图 2）可降低框架对于繁重线程同步操作的依赖性。例如，如果物理 API 系统更改的对象也在其它系统进行了注册，则无需将该更改直接发送给这些系统，它们会在当前帧结束时获知这一更改，从而可继续独立地处理当前帧。</p>
<p><img src="http://software.intel.com/file/16836" alt="" /></p>
<p>图 3：SystemAI 和 SystemGraphic 正在订阅来自SystemPhysics 的位置变更。</p>
对象在系统间的注册，发生在框架采用 Smoke 形成的接口进行初始化的期间。当系统修改了数据后，它会告知 CCM，该信息会在下一次帧更新期间传递下去（参见图 3）。CCM 不会将数据传递给每个订阅系统，而是会将数据留给系统自身，仅在系统当前操作需要时，才会复制该数据。
<p><img src="http://software.intel.com/file/16837" alt="" /></p>
<p>图 4：可简化系统间通信的接口。</p>
为了保持 Smoke 高度模块化的设计，我们在多个系统和框架自身间开发了接口，这是一个关键特性。框架的任务是支持各个系统间的通信（参见图 4）。例如，我们可能拥有一个用于改变模型位置的几何接口，或是一个用于改变特定对象 AI 状态的行为接口。调度程序使用任务接口来安排和调用每个系统的工作。在 Smoke 中运行典型的帧处理可帮助说明这一活动。我们假设引擎中的一个帧正在被渲染，此时框架的系统会细分需处理的任务，由此开始进行处理。调度程序根据帧调用每个系统，允许系统自然地将自身工作划分为可细分成多个任务的粒状部分。出色的中间件能够很轻松地完成上述操作，从而最大限度减少调度程序的必要工作。
<p><img src="http://software.intel.com/file/16838" alt="" /></p>
<p>图 5：工作线程被从可用处理工作池分配给任务。. <br />当所有这些任务创建完成后，它们会被集中到一个所有可用工作线程能够访问的池中。合理设计的框架可支持每个内核一个工作线程，而这也正是设计的能力和可扩充性真正开始大显身手的领域。之后，根据每个特定线程的负载情况以及框架对于每项任务处理器密集程度的估计，池中的每项任务会分配给线程（参见图 5）。关于以下方面，Smoke 开发人员承认还存在问题：跨每个线程恰当地平衡任务负载要求对每项任务中的工作有些预先确定的了解。显然，在非常轻量级的框架中——如本例中的框架，我们是很难获得此类信息的。</p>
当细分任务时，处理器的高速缓存一致性是另一个需要时刻注意的重要问题。在最佳的情况下，设置线程应该处理数据块，而不是任意或交织的数据，这样处理内核便能够以更加线性的方式访问高速缓存和内存资源，实现更快速的处理。
<p><img src="http://software.intel.com/file/16838" alt="" /></p>
<p>图 6：每个工作线程均有一个 CCM 可以访问的更改队列。 <br />在处理当前帧期间，不同的工作线程和任务会向 CCM 发布讯息（参见图 6），以显示所有已注册对象的最新状态信息。当帧完成后，CCM 会在下一个帧开始处理前，将这些讯息发送给已经订阅了最新对象的相应系统，由此最新数据可通过框架进行传播。通过重复这个过程，我们就可以获得完全线程化、独立处理的游戏引擎模型。</p>
<div>
<hr size="2" />
</div>
<p><strong>运行中的</strong><strong> Smoke </strong><strong>演示</strong><strong> </strong><br />为展示该框架的强大能力，英特尔制作了一个图形演示，通过它观看者可亲眼见证框架的性能优势。该场景描绘了一座农舍正在受到空降陨石的围攻，降落的陨石导致周围的树木燃起了熊熊烈火（参见图 7）。 <br /> 图 7：所有八个处理线程全部运行情况下的 Smoke 演示。</p>
Smoke 演示允许观看者控制能够访问框架所创建任务的工作线程的数量。将线程数量与系统中的可访问线程总数（英特尔® 酷睿™ i7 处理器为八个线程）相匹配，可以带来最佳的性能。而英特尔的演示允许在运行时线程数量多次迭代，由此可反映该框架所带来的性能增益。
<p><img src="http://software.intel.com/file/18586" alt="" width="552" height="336" /></p>
<p>图 7 展示了在基于英特尔® 酷睿™ i7 处理器的系统上，按 74 fps 的帧率，以所有八个线程运行演示的情况。 您可以看到，性能框中的所有八个 CPU 的负载量基本持平，CPU 总使用率在高于 80% 的范围内。您还可以看到演示中各个系统的工作负载细分情况，包括程序火、树、人工智能、物理引擎等等。</p>
<p><img src="http://software.intel.com/file/18587" alt="" width="551" height="339" /></p>
<p>图 8：采用四个处理线程运行的演示同一区域</p>
如图 8 所示，我们将 Smoke 中的线程数量由八个减少到了四个，采用四个工作线程设置演示。结果，系统使用了近 46% 的 CPU 总功耗，平均帧率为 49，性能相比采用八个线程降低了 50%。
<p><img src="http://software.intel.com/file/18588" alt="" width="549" height="336" /></p>
<p>图 9a：在仅有两个活动线程的情况下，演示的性能受到巨大影响。</p>
<p><img src="http://software.intel.com/file/18589" alt="" width="549" height="340" /></p>
<p>图 9b：同样的工作可以由一个工作线程来完成，但性能会受到影响。 <br />图 9a 和 9b 展示了同一场景分别采用两个工作线程和一个工作线程运行的情况；每往下一步，性能就会大幅降低。演示采用八个工作线程运行，要比采用一个工作线程速度快 6.7 倍多，这表明借助合理实施的多线程游戏引擎，开发人员可以真正提高具有任意数量处理内核的系统的性能。</p>
<div>
<hr size="2" />
</div>
<p><strong>Smoke </strong><strong>在当今的意义</strong><strong> </strong></p>
<p>尽管我们可以立即得出结论，这个多线程化的框架在构建时便考虑到了英特尔的全新多核图形架构，但在当今的游戏引擎中采用 Smoke 类的设计仍具有明显的优势。借助当前的英特尔® 酷睿™ i7 处理器，具有四个超线程内核的系统（由此可支持八个逻辑线程）将进入游戏领域。充分利用这一处理能力无疑是一项挑战，而与本文所述类似的设计可支持游戏开发人员使用远远超出当今游戏作品需求的处理动力。</p>
<p>英特尔的软件开发团队构建 Smoke，仅仅是为了证明高效线程化的游戏引擎对于任意数量的线程都是可能的。尽管我们不希望游戏开发人员直接采用我们的设计，并将这一框架完全复制到他们自己的游戏中，但英特尔还是在 <a href="http://whatif.intel.com/">http://Whatif.intel.com</a> 上为所有游戏开发人员免费提供了代码，以帮助向市场传达凭借当今和未来的 CPU 硬件所能成就的无限可能。 <br />虽说让软件充分利用电脑中的硬件不仅仅是个技术问题，但随着全球市场越来越看重高能效、绿色技术，这对于当前和未来的计算也变得日益重要。尽管我们明确希望看到各个处理领域效率的提高，但游戏也同等重要和有利：毕竟，如果一点娱乐都享受不到，所有工作又有什么用呢？</p>
<p>英特尔 Smoke 框架是一个出色的前瞻性范例，展示了软件开发人员如何利用英特尔硬件提供最佳的用户体验。</p>
<div>
<hr size="2" />
</div>
<p><strong>作者简介</strong><strong> </strong><br />Orion Granatir 是英特尔视觉计算软件部门的高级工程师，是 Smoke 项目的技术负责人。在 2007 年加入英特尔之前，Orion 曾在 Insomniac Games 公司担任高级程序员，从事了多款 PlayStation 3* 作品的开发工作。他的最新作品包括：《抵抗：灭绝人类（Resistance:Fall of Man）》*和《瑞奇与叮当未来：毁灭工具（Ratchet and Clank Future:Tools of Destruction）》*。</p>
<p>Ryan Shrout 早在上中学的时候就创建了面向硬件发烧友的网站，年纪轻轻便借助计算机开始了自己的职业生涯。经过八年多的发展，如今这家网站已经成为最大的技术编辑站点。作为 PC Perspective（pcper.com）的主编，Ryan 总是以批评的目光审视 CPU 和 GPU 设计，重点关注其底层技术和所能带来的实际优势。</p>
<div>
<hr size="2" />
</div>
<p> 原文参看： http://software.intel.com/en-us/articles/performance-scaling-with-cores/</p>
获取相关评论。订阅<a href="http://www.intelsoftwaregraphics.com/?lid=dvuee/GNFxo=&amp;siteid=cqMoF5H/37o=">视觉冲击英特尔® 软件通讯</a>。（该杂志新鲜有趣、资讯丰富，极具视觉冲击力，免费提供，并且您可以随时取消订阅。） ]]></description>
      <link>http://software.intel.com/zh-cn/articles/performance-scaling-with-cores</link>
      <pubDate>Thu, 18 Jun 2009 08:17:33 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/performance-scaling-with-cores#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/performance-scaling-with-cores</guid>
      <category>多核软件开发</category>
      <category>视觉计算</category>
    </item>
    <item>
      <title>面向 MID 进行用户界面设计的经验之谈</title>
      <description><![CDATA[ <br />
<div class="Section1">
<div class="sectionHeading">摘要</div>
<p>MID（移动互连设备）是 PC 产品系列的一项最新创新，它具有 PC 的所有功能，但功耗却有明显的降低。鉴于 MID 的功能及用途，在设计用户界面（UI）时需要考虑到多方面的因素，以便为用户提供卓越的使用体验。本白皮书从总体上介绍了 MID 的 UI 设计规则。Hildon 用户界面以任务为导向，所以它需要一些特别的处理。本白皮书还介绍了 Hildon UI 设计的已知最佳方案（BKM）。</p>
<div class="sectionHeading">1. MID 简介</div>
<p>MID（移动互连设备）是 PC 产品系列的一项最新创新，它具有 PC 的所有功能，但功耗却有明显的降低。MID 是一种小外形（SFF）设备，它便于携带，可提供 24x7 全天候的数据访问功能。 <br /> 英特尔一直致力于开发并推广各种技术，以满足 MID 用户的需求。在 MID 的创新过程中，英特尔最重要的一项贡献就是，通过其集成显卡驱动程序英特尔®图形媒体加速器，为用户提供了集成的显卡软件。 <br /> MID 一般采用尺寸较小（4.5” – 6”）的高分辨率触摸显示屏，并具有小型的键盘。为了给用户提供类似于 PC 的使用体验，MID 显示屏上的内容必须易于阅读，必须能够使用手指在显示屏上轻松进行操作，这也就是说，操作系统和应用的 UI 必须是高度定制的。</p>
<br />
<div class="sectionHeading">2. Midinux 概览</div>
<p>Linux 是一种开源操作系统，它允许在系统级别上进行高度的定制，例如快速启动、快速从待机模式恢复；在应用级别上，它还允许进行 UI 风格及主题方面的定制。 <br /> Midinux 是首款基于 Linux 的操作系统，它完全支持英特尔 2007 MID 平台。它具有基于 GTK 的移动应用框架，专为 MID 的屏幕尺寸和分辨率而优化。图 1 显示了 MID 应用框架堆栈。 <br /> <br /> <img src="http://software.intel.com/file/12978" border="0" alt="" width="573" height="411" /></p>
<p><strong>图 1. MID 应用框架堆栈</strong></p>
<br />
<p><strong>2.1 Hildon 概览</strong></p>
<p>Hildon 用户界面以及 Maemo 均基于开源组件。Hildon 以 Gnome 桌面使用的工具套件 GTK＋ 为基础，并在原有基础上进行了一些改进，使其更适合于移动设备。首款采用 Hildon UI 风格的产品为 Nokia 770 Internet Tablet。Hildon 用户界面主要以触摸屏操作为基础，这就意味着用户将主要通过手写笔和手指来使用设备。虽然设备上有几个强制性的硬件按钮，用户在大多数时间均通过触摸屏操作设备。Hildon 支持多任务处理，可以同时运行多个应用，并且用户可以在不同应用之间切换。 <br /> Hildon UI 包含 4 个基本组件：任务导航条、标题区域、状态指示区域以及应用区域。<strong>任务导航条</strong>是位于屏幕上方的全局屏幕元素。任务导航条主要用于启动应用并在不同应用之间进行切换。<strong>标题区域</strong>包含应用的标题，该标题可打开应用特定的菜单。标题区域的右侧包含有最小化和关闭按钮。<strong>状态指示区域</strong>包含各种指示系统状态和行为的图标。状态条程序便位于该区域。<strong>应用区域</strong>由处于正常模式的应用使用。在全屏模式中，所有其它组件均会消失，应用区域会扩展至整个屏幕。</p>
<p>图 2 显示了 MID 应用 UI 的一般布局。</p>
<br />
<p><img src="http://software.intel.com/file/12992" border="0" alt="" width="583" height="332" /></p>
<p><strong>图 2. MID 应用 UI 布局</strong></p>
<br /> <br /></div>
<table border="0" cellspacing="0" cellpadding="2" width="260" align="center">
<tbody>
<tr>
<td align="right"><img src="http://cache-www.intel.com/plt/cd/ids/images/common/greyPrevArrow.gif" border="0" alt="上一部分" width="20" height="20" /></td>
<td class="sectionBodyText" align="left">上一部分</td>
<td class="sectionBodyText" style="TEXT-ALIGN: center">1  <a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-2">2</a> <a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-3">3</a> <a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-4">4</a> <a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-5">5</a></td>
<td class="sectionBodyText" align="right"><a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-2">下一部分</a></td>
<td class="sectionBodyText" align="left"><a href="http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid-2"><img src="http://cache-www.intel.com/plt/cd/ids/images/common/nextarrow.gif" border="0" alt="" width="20" height="20" /></a></td>
</tr>
<tr>
<td colspan="5"><img src="http://cache-www.intel.com/plt/cd/ids/images/common/spacer.gif" border="0" alt="" width="1" height="8" /><br />
<div class="sectionBodyText" style="TEXT-ALIGN: center">第 1 页, 共 5 页</div>
</td>
</tr>
</tbody>
</table> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid</link>
      <pubDate>Sun, 15 Feb 2009 03:59:12 -0800</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/best-known-methods-of-ui-design-for-mid</guid>
      <category>移动软件开发社区</category>
      <category>视觉计算</category>
    </item>
    <item>
      <title>SIGGRAPH 2008现场照片</title>
      <description><![CDATA[ <p><font size="2"><strong>同我们一同分享在SIGGRAPH 2008的欢乐时光!</strong></font></p>
<p><strong><font size="2">第一天</font></strong><strong><font size="2">, 星期一, 2008 年八月10日 (进场):</font></strong></p>
<table width="100%" cellspacing="5" cellpadding="0" border="0">
    <!-- MSTableType="nolayout" -->
    <tbody>
        <tr>
            <td width="49%" valign="top"><a href="day1_1.jpg" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4902" alt="" /></a><br />
            在展示区域安装设备<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top"><a href="/file/4904" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4905" alt="" /></a><br />
            展台设备拆箱<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4906" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4907" alt="" /></a><br />
            在英特尔展台剧院搭建<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4908" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4909" alt="" /></a><br />
            在英特尔展台剧院安装设备<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp; </td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top" colspan="3"><strong>&nbsp;<font size="2">第二天, 星期二, 2008年八月11日 (展览日, 第一天):</font></strong>&nbsp;&nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp; </td>
        </tr>
        <tr>
            <td width="49%" valign="top">
            <p>&nbsp;<a href="/file/4910" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4911" alt="" /></a><br />
            洛杉矶会议中心外景<br />
            &nbsp; </p>
            </td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4912" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4913" alt="" /></a><br />
            英特尔SIGGRAPH展台的演示<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4914" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4915" alt="" /></a><br />
            英特尔软件网路的博客区域<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4916" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4917" alt="" /></a><br />
            英特尔展台剧院区域的人群<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4918" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4919" alt="" /></a><br />
            英特尔展区工作人员Gina Bovara &amp; Quentin Froemke的快乐时光<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4920" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4921" alt="" /></a><br />
            SIGGRAPH入口区域<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top" colspan="3"><strong>&nbsp;第三天, 星期三,&nbsp; 2008年八月13日 (展览日, 第二天): </strong></td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4922" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4923" alt="" /></a><br />
            英特尔展台内的会议室<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4924" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4925" alt="" /></a><br />
            英特尔视觉计算社区经理Steve Pitzel在Artrage展区<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4926" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4927" alt="" /></a><br />
            英特尔工作人员John McHugh展示肌肉男的魅力<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4928" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4929" alt="" /></a><br />
            繁忙的展台 <br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4930" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4931" alt="" /></a><br />
            Autodesk展区:&nbsp; 英特尔工作人员Ben Kutcher (右)<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4932" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4933" alt="" /></a><br />
            英特尔工作人员Gina Bovara和4位新的英特尔软件网络成员<br />
            &nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a href="/file/4934" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4935" alt="" /></a><br />
            英特尔Take Five视频摄像Amy Barton和Jerry Makare<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a href="/file/4936" target="_blank"><img height="250" width="350" border="0" src="http://software.intel.com/file/4937" alt="" /></a><br />
            英特尔工作人员Staffer Joel DeGuzman在介绍英特尔软件网络</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top" colspan="3"><strong>&nbsp;<font size="2">第四天, 星期四, 2008年八月14日 (展览日, 第三天): </font></strong>&nbsp;&nbsp;</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4938"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4939" /></a><br />
            英特尔工作人员Joel DeGuzman和Janet Holmes在英特尔软件网路及合作伙伴展示区域<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4940"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4941" /></a><br />
            &nbsp;位于展示区域的英特尔集群就绪服务器</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4942"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4943" /></a><br />
            展台内的讲座区域由Orion Granatir主讲<br />
            &nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4944"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4945" /></a><br />
            展台内讲座区域人头攒动 <br />
            </td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4946"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4947" /></a><br />
            展示结束，拆卸工作开始</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;<a target="_blank" href="/file/4948"><img height="250" width="350" border="0" alt="" src="http://software.intel.com/file/4949" /></a><br />
            展台内展示区域拆卸工作</td>
        </tr>
        <tr>
            <td width="49%" valign="top">&nbsp;</td>
            <td width="2%" valign="top">&nbsp;</td>
            <td width="49%" valign="top">&nbsp;</td>
        </tr>
    </tbody>
</table> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/photos-from-siggraph-2008</link>
      <pubDate>Fri, 15 Aug 2008 10:15:44 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/photos-from-siggraph-2008#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/photos-from-siggraph-2008</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>英特尔软件网路在SIGGRAPH 2008活动概览</title>
      <description><![CDATA[ <object height="120" width="600" align="middle" id="events" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param value="sameDomain" name="allowScriptAccess" />
<param value="false" name="allowFullScreen" />
<param value="about:blank" name="movie" />
<param value="high" name="quality" />
<param value="#IC4C7D" name="bgcolor" /></object>
<p><strong>&nbsp;</strong></p>
<p><strong><a href="/file/12769">体验令你心跳加速的视觉计算技术</a>!&nbsp; <br />
</strong>了解我们在SIGGRAPH <a href="/file/12769">的主要活动细节</a> PDF (383kb).</p>
<p><strong>同时浏览我们于八月4日发布的论文:</strong><br />
<strong>&quot;</strong><a href="/file/12768"><strong>Larrabee: 一个用于视觉计算的多核x86架构</strong></a><strong>&quot;</strong> (.PDF, 2.10 MB)</p>
<p><strong>同时还有<a href="/zh-cn/articles/photos-from-siggraph-2008">会议现场英特尔展台的照片</a>!</strong></p>
<p>&nbsp;</p>
<table width="90%" cellspacing="10" cellpadding="2" border="0">
    <!-- MSTableType="nolayout" -->
    <tbody>
        <tr>
            <td width="49%" valign="top"><!-- NewsFeed Links -->
            <p><strong>我们最新的关于SIGGRAPH的博客:</strong></p>
            <div><!-- reader part -->
            <ul id="newsFeed">
                <li>Gathering Feed Info, one moment... </li>
            </ul>
            </div>
            <p>&nbsp;</p>
            <p><strong>我们最新的SIGGRAPH视频:</strong></p>
            <ul>
                <li>访问我们的中文 <a target="_blank" href="http://softwarevideos-zho.intel.com">Take Five 视频主页</a> </li>
                <li>访问我们的英文 <a href="http://www.intel.com/software/videos/">Take Five 视频主页</a> </li>
            </ul>
            <p><strong>&nbsp;</strong></p>
            <p><strong>SIGGRAPH 相关链接:</strong> </p>
            <ul>
                <li>添加我们 <a target="_blank" href="http://www.new.facebook.com/group.php?gid=12530951131">英特尔 @ SIGGRAPH Facebook</a> 页面 </li>
                <li><a target="_blank" href="http://www.siggraph.org/s2008/">SIGGRAPH 官方主页</a> </li>
                <li><a target="_blank" href="http://www.intel.com/go/visualcomputing">视觉计算的就职机会</a> </li>
            </ul>
            <!-- RSS Feed of Events --></td>
            <td width="2%" valign="top" rowspan="2">&nbsp;</td>
            <td width="49%" valign="top" rowspan="2">
            <p><strong>会议课程安排:</strong> <br />
            &nbsp; </p>
            <p><strong>2008年8月11日 (星期一)</strong></p>
            <ul>
                <li>6:00PM 至 8:00PM (Hall B)<br />
                &quot;<a target="_blank" href="http://www.siggraph.org/s2008/attendees/special/">Papers Fast Forward; 60 Second Presentation</a>&quot; 演讲人 Larry Seiler </li>
            </ul>
            <p><strong>&nbsp;<br />
            2008年8月12日 (星期二)</strong></p>
            <ul>
                <li>10:30AM 至 11:15AM (Hall B)<br />
                &quot;<a target="_blank" href="http://www.siggraph.org/s2008/attendees/program/item/?type=papers&amp;id=34">Larrabee: A Many-Core x86 Architecture for Visual Computing</a>&quot; 演讲人 Larry Seiler </li>
            </ul>
            <p><strong>&nbsp;<br />
            2008年8月14日 (星期三)</strong></p>
            <ul>
                <li>8:30AM 至 12:15PM (403AB)<br />
                &quot;<a target="_blank" href="http://www.siggraph.org/s2008/attendees/program/item/?type=class&amp;id=549">Beyond Programmable Shading:&nbsp; Fundamentals</a>&quot; 是一个由Aaron Lefohn协调安排的包含Tom Forsyth介绍Larrabee架构的部分以及Aaron讲授的Larrabee编程介绍<br />
                &nbsp; </li>
                <li>1:45PM 至 5:30PM (403AB)<br />
                &quot;<a target="_blank" href="http://www.siggraph.org/s2008/attendees/program/item/?type=class&amp;id=57">Beyond Programmable Shading:&nbsp; In Action</a>&quot; 是一个由Aaron Lefohn协调安排的包含Matt Pharr 介绍Larrabee高级渲染技巧的话题 </li>
            </ul>
            <p><strong>&nbsp;<br />
            8月11-15日 (星期一到星期五)</strong></p>
            <ul>
                <li>请参观访问由英特尔赞助的 <a target="_blank" href="http://www.siggraph.org/s2008/attendees/studio/">The Studio（工作室）</a>&nbsp; </li>
            </ul>
            <p><strong>&nbsp;<br />
            8月12-14日 (星期二到星期四)</strong></p>
            <ul>
                <li>在展览区域参观<a target="_blank" href="http://www.siggraph.org/s2008/attendees/exhibition/">英特尔的展台</a><strong>(#513) </strong></li>
            </ul>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td width="49%" valign="top">
            <p>&nbsp;</p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td width="50%" valign="top">&nbsp;</td>
            <td width="100%" valign="top" colspan="2">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top" align="center" colspan="3"><a target="_blank" href="http://www.intel.com/go/visualcomputing"><img height="113" width="170" border="0" alt="" src="http://software.intel.com/file/2831" /></a>&nbsp;&nbsp;&nbsp;&nbsp; <img border="0" alt="Intel @ SIGGRAPH 2008" src="http://software.intel.com/file/2830" />&nbsp;&nbsp;&nbsp;&nbsp; <a target="_blank" href="http://www.intel.com/idf/signup.htm?iid=isnSIGGRAPHpage"><img height="113" width="170" border="0" alt="Intel Developer Forum 2008" src="http://software.intel.com/file/2823" /></a></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/intel-software-network-at-siggraph-2008</link>
      <pubDate>Thu, 14 Aug 2008 15:44:12 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/intel-software-network-at-siggraph-2008#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/intel-software-network-at-siggraph-2008</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>英特尔® 图形技术开发社区</title>
      <description><![CDATA[ <!--<img height="160" alt="" width="584" src="http://software.intel.com/file/2121" />--><embed src="/file/12915" width="580" height="137" type="application/x-shockwave-flash" scale="showall" play="true" loop="false" menu="false" wmode="Window" quality="1"></embed><br />

<table id="Table_01" height="85" cellspacing="0" cellpadding="0" width="585" border="0">
    <tbody>
        <tr>
            <td rowspan="3"><img height="85" alt="" width="10" src="http://software.intel.com/file/1207" /></td>
            <td><img height="22" alt="" width="119" src="http://software.intel.com/file/1208" /></td>
            <td rowspan="3"><img height="85" alt="" width="26" src="http://software.intel.com/file/1209" /></td>
            <td><img height="22" alt="" width="122" src="http://software.intel.com/file/1210" /></td>
            <td rowspan="3"><img height="85" alt="" width="26" src="http://software.intel.com/file/1211" /></td>
            <td><img height="22" alt="" width="122" src="http://software.intel.com/file/1212" /></td>
            <td rowspan="3"><img height="85" alt="" width="30" src="http://software.intel.com/file/1213" /></td>
            <td><img height="22" alt="" width="119" src="http://software.intel.com/file/1214" /></td>
            <td rowspan="3"><img height="85" alt="" width="11" src="http://software.intel.com/file/1215" /></td>
        </tr>
        <tr>
            <td><a href="/zh-cn/articles/intel-gma-3000-and-x3000-developers-guide"><img id="starthere" height="38" alt="开 始" width="119" border="0" name="starthere" onMouseOver="MM_swapImage('starthere','','/file/12906',1)" onMouseOut="MM_swapImgRestore()" src="http://software.intel.com/file/12910" /></a></td>
            <td><a href="http://softwarecommunity.intel.com/videos/home.aspx"><img id="videos" height="38" alt="视 频" width="122" border="0" name="videos" onMouseOver="MM_swapImage('videos','','/file/12907',1)" onMouseOut="MM_swapImgRestore()" src="http://software.intel.com/file/12911" /></a></td>
            <td><a href="/en-us/forums/user-community-for-visual-computing"><img id="forums" height="38" alt="论 坛" width="122" border="0" name="forums" onMouseOver="MM_swapImage('forums','','/file/12908',1)" onMouseOut="MM_swapImgRestore()" src="http://software.intel.com/file/12912" /></a></td>
            <td><a href="http://softwareblogs-zho.intel.com/"><img id="blogs" height="38" alt="博 客" width="119" border="0" name="blogs" onMouseOver="MM_swapImage('blogs','','/file/12909',1)" onMouseOut="MM_swapImgRestore()" src="http://software.intel.com/file/12913" /></a></td>
        </tr>
        <tr>
            <td><img height="25" alt="" width="119" src="http://software.intel.com/file/1216" /></td>
            <td><img height="25" alt="" width="122" src="http://software.intel.com/file/1217" /></td>
            <td><img height="25" alt="" width="122" src="http://software.intel.com/file/1218" /></td>
            <td><img height="25" alt="" width="119" src="http://software.intel.com/file/1219" /></td>
        </tr>
    </tbody>
</table>
<p>
<table style="WIDTH: 750px; HEIGHT: 500px" cellspacing="1" cellpadding="1" width="750" summary="" border="0" class="sectionBody">
    <tbody>
        <tr>
            <td valign="top" width="55%">
            <div class="sectionHeading"><img alt="" src="http://software.intel.com/file/12905" /></div>
            <strong></strong>
            <div class="sectionHeading"><br />
            <strong><strong>在此处了解有关英特尔&reg; 集成显卡的更多信息：</strong></strong></div>
            <ul type="disc"><u><font color="#0000ff"></font></u>
                <li value="1"><a href="/zh-cn/articles/common-misconceptions-of-intel-integrated-graphics">英特尔&reg; 集成显卡的常见误解</a> </li>
                <li value="2"><a href="/zh-cn/articles/quick-reference-guide-to-intel-integrated-graphics">英特尔&reg; 集成显卡快速参考指南</a> </li>
                <li value="3"><a href="/zh-cn/articles/intel-gma-3000-and-x3000-developers-guide">英特尔&reg; 图形助推器（GMA） 3000 与 X3000 开发人员指南</a> </li>
                <li value="4"><a href="/zh-cn/articles/tools-and-tips-for-debugging-issues-on-intel-3000-and-x3000-series-integrated-graphics">英特尔&reg; 3000 和 X3000 调试工具与技巧</a> </li>
            </ul>
            <p class="sectionHeading"><br />
            <strong>所有图形技术：</strong></p>
            <strong></strong>
            <ul>
                <li><a href="/en-us/articles/a-framework-for-implementing-ping-pong-texture-algorithms-for-directx">在DirectX实现Ping Pong纹理算法</a> <strong>NEW!</strong> <img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/en-us/articles/compression-for-high-quality-high-bandwidth-video">高品质、高带宽视频的压缩</a>&nbsp; <strong>- 英特尔出版社书籍 </strong><a href="http://www.intel.com/intelpress/">最新节选</a>！&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/zh-cn/articles/32027">加速视频编码例程的运行</a>&nbsp; </li>
                <li><a href="/zh-cn/articles/video-gross-error-detection">视频粗差检测</a> </li>
                <li><a href="/videos/intel-ipp-for-multithreaded-digital-media-software-development">（视频）英特尔&reg; 集成性能基元（英特尔&reg; IPP）与媒体应用</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" />&nbsp; </li>
                <li><a href="http://www3.intel.com/cd/software/products/asmo-na/eng/302910.htm#rt">IPP 中新添光线追踪/渲染功能！</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
            </ul>
            <br />
            <br />
            <div class="sectionHeading"><strong>支持、工具与代码范例</strong>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /></div>
            <div>
            <ul>
                <li><a href="http://support.intel.com/support/graphics/gaming/index.htm">基于英特尔&reg; 显卡的游戏指南支持</a> </li>
                <li><a href="http://downloadcenter.intel.com/">显卡芯片组驱动程序</a> </li>
            </ul>
            </div>
            </td>
            <td valign="top">
            <p><img alt="" hspace="4" align="left" vspace="1" src="http://software.intel.com/file/12917" />一个CG角色的存在仅限于显示设备上的这些像素点吗？ Half-Life2和Crysis仅因为是纹理贴图而正点吗？ 物理，人工智能甚至音效在您的游戏体验中扮演哪种角色？ <br />
            - Pitz</p>
            <h2 class="sectionHeading">&nbsp;</h2>
            <h2 class="sectionHeading">视觉计算(Visual Compting)</h2>
            <ul>
                <li><a href="/zh-cn/articles/real-time-deep-ocean-simulation-on-multi-threaded-architectures">多线程架构上的实时深海模拟</a> <strong>新！</strong><a href="/en-us/articles/real-time-deep-ocean-simulation-on-multi-threaded-architectures"></a> </li>
                <li><a href="/zh-cn/articles/multi-threaded-shadow-volumes-on-mainstream-graphics-hardware">在主流显卡硬件上创建阴影锥（Shadow Volume）</a><a href="/en-us/articles/multi-threaded-shadow-volumes-on-mainstream-graphics-hardware"></a> </li>
                <li><a href="/en-us/articles/procedural-terrain-generation-with-fractional-brownian-motion">借助分数布朗运动生成程序地形</a> <strong>新！</strong>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/file/1813">IPP中的光线追踪函数</a><img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
            </ul>
            <blockquote>
            <p><a href="/file/1498  ">英特尔信息技术峰会 上海站 视觉计算专场主题演讲&nbsp;</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" />英特尔副总裁, 软件及解决方案事业部总经理 蕾妮詹姆斯<br />
            <br />
            </p>
            </blockquote>
            <h2 class="sectionHeading">游戏上的图形应用</h2>
            <ul>
                <li><a href="/zh-cn/articles/carry-small-game-large ">轻装上阵，畅玩游戏</a>&nbsp; </li>
                <li><a href="/en-us/articles/real-time-shadow-maps-on-mainstream-graphics-hardware">主流显卡硬件上的实时阴影贴图</a> <strong>升级版！</strong>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> <a href="/en-us/articles/real-time-fur-rendering-for-short-haired-creatures"></a></li>
                <li><a href="/zh-cn/articles/real-time-fur-rendering-for-short-haired-creatures">对毛发较短生物的实时毛发渲染</a>&nbsp; <strong>升级版！</strong><a href="/en-us/articles/real-time-fur-rendering-for-short-haired-creatures"></a> </li>
                <li><a href="/zh-cn/articles/intel-gdc">GDC大会 Intel/Havok 专题内容</a>&nbsp; </li>
                <li><a href="/en-us/articles/gdc-speakers">谁代表我们参加了 GDC? 查看这里:</a> <img alt="" src="http://software.intel.com/file/13097" /><br />
                <br />
                </li>
            </ul>
            <h2 class="sectionHeading">成功案例</h2>
            <ul>
                <li><a href="/file/1478">GameCreators</a> <img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/file/1479">Multiverse</a> <img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/file/1480">NetDevil</a> <img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> </li>
                <li><a href="/downloads/graphics/GDC/Mesh_TDVision_SuccessStory.pdf">TD Vision</a> <img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /><br />
                </li>
            </ul>
            <h2 class="sectionHeading"><br />
            已经开发了游戏软件? 成为我们的软件合作伙伴吧。</h2>
            <h2 class="sectionHeading"><br />
            <span class="sectionBody">了解为何加入<a href="http://www3.intel.com/cd/software/partner/asmo-na/eng/index.htm">英特尔软件合作伙伴计划</a>能帮助您的游戏发挥到极致。 </span></h2>
            <h2 class="sectionHeadingText">&nbsp;</h2>
            </td>
        </tr>
    </tbody>
</table>
</p>
<div class="sectionHeading">
<div class="sectionHeading"><strong>参加我们的讨论吧！ </strong></div>
<p><span class="sectionBody">寻找答案！报数！做图形技术论坛的勇士。请参与我们的<a href="/en-us/forums/user-community-for-visual-computing">图形技术论坛</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" />&nbsp;和 <a href="http://softwareblogs-zho.intel.com/">博客</a>&nbsp;：</span></p>
<div class="sectionHeading">
<div class="sectionHeading"><strong>它山之石 </strong></div>
<p><span class="sectionBody">它山之石可以攻玉，<a href="/zh-cn/articles/32026">链接</a>中的这些技术和产品相关的文章来源于网络，并不代表英特尔的观点，供大家在开发中参考。</span></p>
<div class="sectionHeading">
<div class="sectionHeading"><strong>知识库</strong></div>
<p><span class="sectionBody">查看<a href="http://softwarecommunity.intel.com/Wiki/Graphics/239.htm">知识库</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" />了解常见问题解答，以及有关图形优化的更多信息。</span></p>
</div>
</div>
</div> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/graphix</link>
      <pubDate>Sat, 19 Jul 2008 15:30:17 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/graphix#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/graphix</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>主流图形硬件上的多线程阴影锥</title>
      <description><![CDATA[ <br />
<div class="sectionHeading">简介</div>
<p>本白皮书主要介绍一些在主流图形硬件上实时生成阴影的技术。阴影可增加 3D 图像的逼真度。纹理精确度低会导致阴影贴图受到抗锯齿假象的影响，而阴影锥可以从物理角度创建准确的阴影，避免上述问题。然而，如果存在多个产生阴影的动态对象或大量移动光源，这种技巧就会严重影响性能。本文阐述了如何利用多线程方法采取 CPU 生成阴影锥，从而将图形硬件从这一任务瓶颈中解放出来。<br />
</p>
<br />
<br />
<!--<br />
This article provides:<br />
<br />
<ul>
    <li>A general overview of shadow volume algorithms, and explanations of some of its strengths and weaknesses. </li>
    <li>A detailed implementation of the shadow volumes on mainstream graphics hardware using Microsoft DirectX*. </li>
    <li>A simple example of threading to improve performance. </li>
</ul>--><!--page break<hr />
<div class="sectionHeading"><a target="_blank" href="http://www.intel.com/cd/ids/developer/asmo-na/eng/249487.htm">Read entire PDF (197KB)</a></div>
<hr />
-->
<div class="sectionHeading">下载 PDF 文档</div>
<br />
主流图形硬件上的多线程阴影锥 [<a target="_blank" href="http://www.intel.com/cd/ids/developer/asmo-na/eng/382025.htm">PDF</a> 149KB]&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /> <br />
<br />
<br />
<br />
<div class="sectionHeading">下载演示</div>
<br />
英特尔&reg; 集成显卡（IIG）上的多线程阴影锥 [<a class="freedownload emailrequired" href="MT_Shadow_Volumes_on_IIG.zip">ZIP</a> 373KB]&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" />
<div></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/multi-threaded-shadow-volumes-on-mainstream-graphics-hardware</link>
      <pubDate>Tue, 08 Jul 2008 02:04:07 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/multi-threaded-shadow-volumes-on-mainstream-graphics-hardware#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/multi-threaded-shadow-volumes-on-mainstream-graphics-hardware</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>借助多线程能力和英特尔® 集成性能基元（英特尔® IPP）加速视频编码例程</title>
      <description><![CDATA[ <div class="sectionBody"><strong>作者：Kiefer Kuah</strong><br />
<br />
视频编码器中常用的&ldquo;绝对差值求和(sum of absolute difference)&rdquo;例程已进行了优化，这是通过将例程分解为多条线程并使用英特尔&reg; 集成性能基元（英特尔&reg; IPP）来实现的。对于单个四核处理器，多线程实现的性能加速达 3.84 倍。英特尔&reg; IPP 函数又使性能获得1.45 倍的提高，从而四核总体性能加速达到 5.55 倍。这种方法不需要重新编写大量的代码，可快速实现。</div>
<div class="sectionHeading">简介</div>
<div class="sectionBody">在过去的一年中，越来越多的台式机和笔记本电脑开始采用双核处理器，这应该是软件开发商开发多线程应用的极具说服力的原因。向更高级别并行计算发展的趋势势不可挡。英特尔&reg; 酷睿&trade;2 双核处理器是一款双核处理器。该处理器的四核版（即英特尔&reg; 酷睿&trade;2 四核处理器）已于最近推出。为充分利用多核的优势，软件应用需要进行多线程处理。在任一给定时间，单线程的应用只能在单核上执行，而使其他内核处于空闲状态。而一个架构优秀的多线程应用中，工作负载被划分为相等的块，平均分配给各个可用内核。要获得多线程的最佳性能，确保分配给各个内核的工作负载完全平衡至关重要。本文中，我们以一个视频编码应用为示例，该应用中将例程多线程化获得的加速比几乎与核的数量成线性比例。对于单个四核处理器，多线程实现的加速比为 3.84 倍。<br />
<br />
视频编码中计算密集型运算之一是运动预测（motion estimation）。此运算占用编码器中大约 40% 或更多的计算周期。搜索运动向量（motion vectors）就是将某一帧中的某一像素块与参考帧中的多个像素块进行比较，从而找出在参考帧中与之最相似的像素块。工作量将随着数据集的大小（此例中是视频帧的大小）而增加。 <br />
<br />
图 1 中显示了执行此运动向量搜索运算的部分代码。在双嵌套循环中将调用 blockMatch 函数。此示例中，调用的次数为 frameHeight/blockHeight* frameWidth/blockWidth，其中 frameHeight 和 frameWidth 是以像素数表示的帧高度和帧宽度，blockHeight 和 blockWidth 是以像素数表示的块高度和块宽度。搜索范围通常限制在参考帧内的某一区域，这样可以减少此函数被调用的次数。此函数通过指针被传递到参考帧以及当前帧中的当前块，并计算参考帧中与当前块最匹配的块。结果将存储在传递到此函数的&ldquo;matchBlock[i][j]&rdquo;自变量中。 <br />
<br />
<strong>图 1. 在嵌套循环中调用 blockMatch 例程。</strong></div>
<table style="MARGIN-TOP: -10px; PADDING-TOP: 0px" cellspacing="0" cellpadding="4" width="564" bgcolor="#efefef" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px" nowrap="nowrap" width="564">
            <pre style="MARGIN-BOTTOM: 0px"><pre xmlns:urlreplace="urn:PlatformDocument">	for (int i=0; i&lt;frameHeight/blockHeight; i++)
	{
		for (int j=0; j&lt;frameWidth/blockWidth; j++)
		{
			blockMatch(refFrame, stepBytesRF,
curFrame+stepBytesCF*i+j*blockWidth, stepBytesCF, matchBlock[i][j]);
		}
	}
</pre>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<div class="sectionBody">此代码即通过 OpenMP* 进行了多线程化。虽然也可以使用 Windows* 线程化 API，但在此例中使用 OpenMP 更为简单。只需在循环前添加 OpenMP 的编译指示指令即可实现（图 2）。此编译指示指令将指示编译器对循环进行线程化处理。要使用的线程的数量是在运行时根据系统中可用的内核数量动态确定的。您也可以在编程时确定应用中要使用的线程数量，但是只有在有充足的理由时，才这样做。英特尔&reg; 编译器 9 和 Microsoft Visual Studio 2005* 均支持 OpenMP。 <br />
<br />
<strong>图 2. 使用 OpenMP 进行多线程化处理。</strong></div>
<table style="MARGIN-TOP: -10px; PADDING-TOP: 0px" cellspacing="0" cellpadding="4" width="564" bgcolor="#efefef" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px" nowrap="nowrap" width="564">
            <pre style="MARGIN-BOTTOM: 0px"><pre xmlns:urlreplace="urn:PlatformDocument">#pragma omp parallel for
	for (int i=0; i&lt;frameHeight/blockHeight; i++)
	{
		for (int j=0; j&lt;frameWidth/blockWidth; j++)
		{
			blockMatch(refFrame, stepBytesRF,
curFrame+stepBytesCF*i+j*blockWidth, stepBytesCF, matchBlockOptimized[i][j]);
		}
	}
</pre>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<div class="sectionBody">接下来，我们使用 IPP 5.1 中已优化的函数替换了 C++ 代码（图 3）。该 IPP 函数计算参考块和当前块之间的&ldquo;绝对差值求和&rdquo;。IPP 中提供了 7 个&ldquo;绝对差值求和&rdquo;函数，这些函数适用于不同的块大小。 <br />
<br />
<strong>图 3. 调用 IPP 函数 ippiSAD4x4_8u32s。</strong></div>
<table style="MARGIN-TOP: -10px; PADDING-TOP: 0px" cellspacing="0" cellpadding="4" width="564" bgcolor="#efefef" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px" nowrap="nowrap" width="564">
            <pre style="MARGIN-BOTTOM: 0px"><pre xmlns:urlreplace="urn:PlatformDocument">	for (int j=0; j&lt;frameWidth-blockWidth; j++)
	{
		temSum = 0;
		pCur = curBlock;
		pRef = refFrame+i*stepBytesRF+j;
		ippiSAD4x4_8u32s(pCur, stepBytesCB, pRef,
stepBytesRF, &amp;temSum, IPPVC_MC_APX_FF);
		if (temSum &lt; lowSum)
		{
			lowSum = temSum;
			matchBlock[0] = j;
			matchBlock[1] = i;
		}
	}
</pre>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<div class="sectionHeading">结果</div>
<div class="sectionBody">分别在英特尔&reg; 酷睿&trade;2 双核处理器和英特尔&reg; 酷睿&trade;2 四核处理器上，对运动向量搜索例程进行测试。该线程例程获得的加速比几乎与内核数量成线性比例。它在双核处理器上产生的加速比为 1.89 倍；在四核处理器上产生的加速比为 3.84 倍（表 1）。通过使用优化的 IPP 函数，可获得更大的增益。IPP 函数本身产生的加速比介于 1.39 倍 和 1.45倍之间。与多线程化结合使用，双核处理器即可实现 2.67 倍的加速比，四核处理器可实现加 5.55 倍的加速比。 <br />
<br />
IPP 函数中包含 SIMD 指令。在初始化期间，IPP 库检测处理器的特性并确定支持哪些单指令多数据流指令集扩展（SSE），从而调度该处理器支持的最优化版本的函数。使用 IPP 就无需自己编写 SIMD 优化的函数。<br />
</div>
<div class="sectionBodyText" style="PADDING-BOTTOM: 4px" xmlns:urlreplace="urn:PlatformDocument"><strong>表 1. 以毫秒计的消耗时间。加速比是以 C++ 函数消耗时间为基准进行计算的。在这些测试中，帧大小和块大小设置为下列值：frameWidth = 128，frameHeight = 128，blockWidth = 4，blockHeight = 4。</strong></div>
<table class="sectionBodyTextText" cellspacing="0" cellpadding="4" width="460" border="1" xmlns:urlreplace="urn:PlatformDocument">
    <tbody>
        <tr>
            <td class="sectionBodyText" valign="top" align="left" width="112">&nbsp;</td>
            <td class="sectionBodyText" valign="top" align="left" width="174" colspan="2">2.67GHz Core&trade;2 Duo</td>
            <td class="sectionBodyText" valign="top" align="left" width="174" colspan="2">2.67GHz Core&trade;2 Quad</td>
        </tr>
        <tr>
            <td class="sectionBodyText" valign="top" align="left" width="112">Function函数</td>
            <td class="sectionBodyText" valign="top" align="left" width="87">
            <p>Time (ms)</p>
            <p>时间（毫秒）</p>
            </td>
            <td class="sectionBodyText" valign="top" align="left" width="87">
            <p>Speedup</p>
            <p>加速比</p>
            </td>
            <td class="sectionBodyText" valign="top" align="left" width="87">
            <p>Time (ms)</p>
            <p>时间（毫秒）</p>
            </td>
            <td class="sectionBodyText" valign="top" align="left" width="87">
            <p>Speedup</p>
            <p>加速比</p>
            </td>
        </tr>
        <tr>
            <td class="sectionBodyText" valign="top" align="left">C++</td>
            <td class="sectionBodyText" valign="top" align="right">355.82</td>
            <td class="sectionBodyText" valign="top" align="left">1.00x</td>
            <td class="sectionBodyText" valign="top" align="right">356.08</td>
            <td class="sectionBodyText" valign="top" align="left">1.00x</td>
        </tr>
        <tr>
            <td class="sectionBodyText" valign="top" align="left">C++ threaded C++ 线程化</td>
            <td class="sectionBodyText" valign="top" align="right">188.12</td>
            <td class="sectionBodyText" valign="top" align="left">1.89x</td>
            <td class="sectionBodyText" valign="top" align="right">92.68</td>
            <td class="sectionBodyText" valign="top" align="left">3.84x</td>
        </tr>
        <tr>
            <td class="sectionBodyText" valign="top" align="left">
            <p>IPP optimized </p>
            <p>IPP 优化</p>
            </td>
            <td class="sectionBodyText" valign="top" align="right">256.21</td>
            <td class="sectionBodyText" valign="top" align="left">1.39x</td>
            <td class="sectionBodyText" valign="top" align="right">245.1</td>
            <td class="sectionBodyText" valign="top" align="left">1.45x</td>
        </tr>
        <tr>
            <td class="sectionBodyText" valign="top" align="left">
            <p>IPP optimized<br />
            threaded</p>
            <p>IPP 优化 线程化 </p>
            </td>
            <td class="sectionBodyText" valign="top" align="right">133.21</td>
            <td class="sectionBodyText" valign="top" align="left">2.67x</td>
            <td class="sectionBodyText" valign="top" align="right">64.13</td>
            <td class="sectionBodyText" valign="top" align="left">5.55x</td>
        </tr>
    </tbody>
</table>
<div class="sectionBody"><br />
在应用中并行代码与串行代码的比决定了多线程实现的加速比大小。假设 p 是应用中可以并行化的代码的比率，n 是内核数量，则根据阿姆达尔定律，可能的加速比为 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;加速比&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 / (1-p+p/n) <br />
<br />
随着并行化程度的提高（即随着 n 的增加），p/n 项将越来越小。随着 n 相比 p 越来越大，p/n 趋近于 0，则等式右端便剩下 1/(1-p)。我们知道 (1-p) 是串行代码的比率。换句话说，在提高应用并行部分的并行化程度时，限制加速比的因素是串行代码。 <br />
<br />
我们可以估测优化的运动评估中增益对整体性能的影响程度。如果运动向量搜索约占 40% 编码工作，并且使用 IPP 及 4 条线程以 5.55 倍加速，则整个编码器的理论加速比为 1.49 倍。 </div>
<div class="sectionHeading">结论</div>
<div class="sectionBody">在应用开发过程中，用于提升性能的多线程化处理通常只是后期考虑。随着双核处理器和四核处理器越来越普及，我们需要有针对性地进行多线程化处理提高关键代码的性能。您可以不再依赖于处理器频率的增加来提高应用的性能或功能组合。在多核处理器中运行时，经过适当多线程化处理的代码可以获得显著的加速比。在该运动评估示例中获得的加速比接近理论极限。该示例只是编码器中的几个组件之一。还可以检查编码器中的其它组件，以发现进行分解和线程化处理的可能性。 </div>
<div class="sectionHeading">其他资源</div>
<p><a href="http://www3.intel.com/cd/software/products/apac/zho/perflib/ipp/index.htm">英特尔&reg; 高性能多媒体函数库（英特尔&reg; IPP）</a><br />
<br />
<a target="_blank" href="http://www.intel.com/intelpress/sum_ipp.htm">《英特尔&reg; 高性能多媒体函数库：如何使用英特尔&reg; IPP 优化软件应用程序》</a>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /><br />
作者 Stewart Taylor。可通过英特尔出版社获取</p>
<p>&nbsp;</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/32027</link>
      <pubDate>Sat, 10 May 2008 18:32:09 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/32027#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/32027</guid>
      <category>视觉计算</category>
    </item>
    <item>
      <title>他山之石-图形技术</title>
      <description><![CDATA[ <div class="sectionHeading">他山之石</div>
<p>以下文章来源于网络，供大家在参考。</p>
<p><strong>英特尔&reg; 集成显卡相关的文章</strong>&nbsp;</p>
<pre style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 11px; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: verdana, sans-serif; BACKGROUND-COLOR: #dcdcdc"><ul>
<ul>
<li>CNET CHINA 中关村在线：<br /><a href="http://nb.zol.com.cn/78/783059.html">1G还是2G？内存升级前后效能对比测试</a>

</li><li>CNET CHINA 中关村在线：<br /><a href="http://nb.zol.com.cn/56/562988.html">引爆集显潜能 内存升级性能对比测试</a>&nbsp;</li></ul></ul></pre>
<p>&nbsp;</p>
<br />
<p><strong>英特尔&reg; 集成显卡</strong>&nbsp;<img alt="" src="http://cache-www.intel.com/plt/cd/ineng_cn.gif" /></p>
<pre style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 11px; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; FONT-FAMILY: verdana, sans-serif; BACKGROUND-COLOR: #dcdcdc"><ul>
<ul>
<li> 流行科学：<br /><a href="http://www.popsci.com/popsci/technology/d997f0209dd15110vgnvcm1000004eecbccdrcrd.html">制作视频游戏的硬科学，作者：Jacob Ward、Doug Cantor 和 Bjorn Carey</a>
</li><li> Tom 的硬件（Tom&rsquo;s Hardware）<br /><a href="http://www.tomshardware.com/2005/09/15/are_intel/">《英特尔&reg; 集成显卡足以支持游戏么？》&mdash;&mdash;作者：Bruce Gain </a>
</li><li>Softpedia&nbsp;<br /><a href="http://news.softpedia.com/news/Intel-Integrated-Graphics-Receive-a-Performance-Boost-63105.shtml">《英特尔&reg; 集成显卡实现性能飞跃》&mdash;&mdash;作者：Alexandru Pancescu</a>
</li><li>硬件地带（The Hardware Zone）<br /><a href="http://www.hardwarezone.com/articles/view.php?id=2058&amp;cid=6">《Mobo回顾》&mdash;&mdash;作者：Zachary Chan</a></li><li>Engadget.com&nbsp;<br /><a href="http://www.engadget.com/2007/02/24/intels-crestline-integrated-graphics-to-run-directx-10/">《在英特尔的 Crestline 集成显卡上运行 DirectX 10》&mdash;&mdash;作者：Paul Miller</a>
</li></ul>
</ul></pre>
<p>&nbsp;</p> ]]></description>
      <link>http://software.intel.com/zh-cn/articles/32026</link>
      <pubDate>Tue, 15 Apr 2008 12:56:45 -0700</pubDate>
      <comments>http://software.intel.com/zh-cn/articles/32026#comments</comments>
      <guid isPermaLink="true">http://software.intel.com/zh-cn/articles/32026</guid>
      <category>视觉计算</category>
    </item>
  </channel></rss>