 |
|
 |
|
 |
 |
| |
英特尔®长期以来一直致力于为广泛的通
信与嵌入式应用提供性能日益出色的
微处理器架构。如今,英特尔®处理器采用
的一款平台架构可提供日益增强的处理能
力,同时还能够解决空间的限制和功耗问
题。随着其创新触角延伸至主频之外,开
始提供集成的平台解决方案,英特尔®当之
无愧地成为支持新一代通信与嵌入式计算
应用的行业领先厂商。
通过推出多核处理器,英特尔®为开发人员
们提供了在优化功耗的同时提升性能的机
遇。为了把握住这一机遇,并行执行多代
码数据流,英特尔®提供了一系列软件工具
与技术信息,帮助开发人员最大限度地提
高多核平台的性能。

图1:调用图(Call Graph)—程序流程的示意图,帮助您快速识别关键函数和调用顺序
充分利用并行处理优势
英特尔®已开发出一套强大的集成软件开发
工具,用以支持多线程应用的快速开发与
优化。这些工具包括:
- 英特尔® VTune™ 可视化性能分析器,用以评估应用特性
并确定性能影响;
- 英特尔®线程检测器和英特尔®线程分析调节器,用以确定
改善代码效率与性能的确切时机;
- 英特尔® C++ 编译器与代码库,用以实现应用软件的自
动并行处理。
英特尔® VTune™ 可视化性能分析器
为协助开发人员确定在应用内实现并行处理的时机,英
特尔®提供了英特尔® VTune™ 可视化性能分析器。该工
具利用硬件中断,向开发人员明确展示了应用的执行方
式。英特尔® VTune™ 可视化性能分析器在 Windows 和
Linux 中,帮助开发人员致力于应用中性能密集型部分的处
理1。该工具还提供了两项技术:抽样和调用图,旨在确定
改善代码内线程的时机。
由于英特尔® VTune™ – 可视化性能分析器能够对处理器中
的几乎每个性能计数器进行抽样,因而开发人员通过重点
关注时钟标记即可了解花费在该程序每个函数上的具体时
间。在确定了最耗时的函数后,开发人员即可进一步查看
源代码,确定线程可否有效实施有些资源密集型函数可能无需进行并行处理。当确定一个
热点无法进行线程处理时,可通过对更高级的函数进行线
程处理来改善性能。英特尔® VTune™ 可视化性能分析器调
用图技术以图形方式显示了整个应用的调用树结构,使开
发人员能够对更高级别的调用进行线程处理,从而支持多
个线程同时调用热点函数。
除帮助开发人员确定在源代码中执行并行处理的机会外,
英特尔® VTune™ 可视化性能分析器还有助于开发人员确
定由于错误共享而引起的线程代码中的性能问题。当两个
线程处理位于同一高速缓存行的数据时,便会发生错误共
享。一旦一个线程改变了该高速缓存行上的数据,此高
速缓存便会无效。由于第二线程必须等待高速缓存重新加
载,因此会影响性能。借助英特尔® VTune™ 可视化性能分
析器抽样技术,开发人员可以对二级高速缓存失误进行抽
样。频繁的高速缓存失误是可能发生错误共享的先兆。
英特尔®线程检测器
英特尔®线程检测器作为英特尔® VTune™ 可视化性能分析
器的一个插件,可在程序运行时检测线程错误。之后将在
存在该错误的源代码行将错误显示出来,并进行隔离。英
特尔®线程检测器能够识别线程错误的潜在原因,并提供解
决方案建议。通过识别共享和专有变量冲突,英特尔®线程
检测器加速了线程应用的开发。

图2:英特尔®线程检测器—通过在执行时监控应用,确定数据争用、线程死锁及其它线程错误
当两个或多个线程试图同时访问同一资源时,对一个应用
进行线程处理便可能导致数据争用。如果线程无法有效通
信,运行时也会非常不稳定。例如,在读/写数据争用中,
一个线程可能试图写入一个变量,而同时另一个线程正要
读取这一变量。写入操作是否已发生将直接关系到读取线
程的结果。由于数据争用属于不确定性错误,因此除错会
非常困难。程序可能在测试中始终正确运行,但却在客户
运行时发生错误。同步访问通用资源对于避免数据争用错
误相当重要。然而,由于同步可能会降低应用速度,因此
最好仅在必要时执行。英特尔®线程检测器通过检测可能发
生和已经发生的错误,能够帮助确定同步化需求。
英特尔®线程分析调节器
对于采用 OpenMP、Windows API 或 POSIX 线程的线程
应用,英特尔提供了英特尔®线程分析调节器。英特尔®线程
分析调节器充分利用了英特尔® VTune™ 可视化性能分析器
的工具技术,能够帮助调节线程应用。该线程调节器:
- 支持直观地应用检查;
- 通过展示沿线程移动的重要路径,支持更高效地使用线程;
- 识别可能影响性能的同步化问题和额外阻塞时间问题;
- 突出工作负载的不平衡;
- 最大限度提高并行区域所用时间,以改进应用性能。
借助英特尔®线程分析调节器,开发人员能够监控代码优化
效果,更好地调节工作负载平衡与同步化。如欲了解更多
信息,请查看英特尔®线程分析调节器2之入门指南。

图3:英特尔®线程分析调节器—查看线程开销与同步化如何影响您的应用性能
英特尔® C++ 编译器 9.0
对于资源有限的开发人员来说,能够自动分析环路并确定
并行处理机会的编译器将是一个更轻松的选择。对于希望
提高多核系统性能的开发人员,建议首先要实现自动并行
处理。
英特尔® C++ 编译器是一款用于 32 位英特尔®架构处理器的
优化编译器。英特尔®编译器可用于 Microsoft Windows 和
Linux 操作系统,支持 C 和 C++ 语言一致,并兼容 GCC
二进制兼容。
该编译器支持 OpenMP,并提供了自动并行处理功能。
OpenMP3 是一种用于多处理平台的共享内存应用程序接
口。OpenMP 使用简单的接口,隐藏线程管理和线程通
信的许多细节。通过向源代码中添加 pragma 编译控制指
令,开发人员可以指定代码的并行区域。这些 pragma 也
可以传递诸如变量属性及简单同步化等信息。OpenMP 代
码与该代码的初始串行版本极为类似。
在自动并行处理模式下,该编译器可对这些环路进行分
析,并为其创建线程代码,从而可以更好地利用并行处理
优势。该编译器可以预估环路内部有多少次计算将发生。
如果计算结果表明数量极少,则可能不会采用并行处理。
这可通过设定阈值选项来得以实现。编译器将只对那些确
定安全的环路进行并行处理,并会自动报告无法对环路进
行并行处理的原因。
对于那些选择明确控制线程,以期实现最佳性能的开发人
员,随 POSIX 和 Windows API 等一起提供的线程库就是
很好的选择。借助这些线程库,开发人员可以非常全面地
管理代码流。英特尔®编译器采用与 OpenMP 部署相同的底
层线程库。因此,OpenMP 代码也可采用自动并行处理模
式执行。
技术培训及资源
英特尔®为开发人员提供了各种培训资源。以下链接可导向
部分在线培训资源。
结论
为了充分发挥多核处理器的性能,开发人员可以修改应
用,以充分利用处理器固有的并行处理优势。借助英特尔®
软件工具,开发人员能够识别线程处理机会和调节线程性
能,从而实现从串行到并行处理转换的轻松转变。
1 英特尔® VTune™ 可视化性能分析器,
http://www.intel.com/cd/software/products/asmo-na/eng/vtune/index.htm
2 英特尔®线程分析器入门指南,
ftp://download.intel.com/support/performancetools/threadprofiler/
gettingstartedtp.pdf
3 OpenMP 标准,
http://www.openmp.org
|
|
|
 |
|
|
 |
|
 |