应用程序性能
使用 Intel
®
编译器调试应用程序的步骤
在开始性能调试之前,您可以使用/Od(-00),即在不进行优化的情况下构建应用程序,以检
查它的准确性。
1. 使用通用优化选项(Windows* /O1、/O2或/O3;Linux*和Mac OS* -O1、-O2或-O3),
测量每个选项的性能,确定最适合您的应用程序的选项。大部分用户应该从/02(-02)(默
认值)开始,然后再尝试更高级的选项。接下来,对于与循环有关的应用程序尝试
/03(-03),在基于IA-64的系统上尤其要这样做。
2. 使用特定于处理器的选项微调基于IA-32和Intel 64
®
的目标系统,这些选项如Intel
®
Core™2处理器家族的/QxT(-xT)。有关特定处理器推荐选项的完整列表,请参看表格
“IA-32和Intel 64
®
架构下特定于处理器的推荐优化选项”。对于双核Intel
®
Itanium
®
2
9000系列处理器,请设置/G2-p9000 (–mtune=itanium2-p9000)。
3. 使用Intel
®
VTune™ Performance Analyzer帮助您确定性能“热点”,以了解应用程序的哪
些具体部分能够从调优中受益。Intel
®
编译器的优化报告也可以提供帮助,它可以显示
编译器的哪些方面能够受益。
4. 添加进程间优化(IPO)——/Qipo(-ipo)和/或配置文件导向的优化(PGO)——/Qprof-gen
和/Qprof-use(-prof-gen和-prof-use),然后再次测量性能,以确定应用程序是否可以从中
受益。
5. 对于多核、多处理器或具有超线程技术(HT 技术)的系统,使用并行性能选项(/Qparallel
(-parallel)、/Qopenmp (-openmp))、Intel
®
性能库或Intel®线程构建块优化应用程序。
6. 使用Intel
®
Thread Profiler可以帮助您理解线程应用程序的结构并最大化其性能。使用
Intel® Thread Checker可以诊断线程错误、加速开发流程,从而加快面市速度。这两个
线程工具都可以处理二进制替换和覆盖插入(binary instrumentation)。使用Intel编译器
进行源代码替换和覆盖插入将获得更加完整的源代码信息。
更多细节,请参考编译器文档和《使用Intel® C++和Fortran编译器优化应用程序》白皮书。
本指南内容:
通用优化选项
在开始性能调试之前,您可以使用/Od(-00),即在不进行优化的情况下构建应用程序,以检
查它的准确性。性能调试从/O1、/O2或/O3(-O1、-O2或-O3)开始。对于所有的32位和64
位Intel处理器,这些通用选项应该是任何应用程序调优的中间位置。在使用更高级的选项前,
先测量您的性能。
并行性能
对于具有超线程技术、多核和/或多处理器的系统,Intel编译器支持通过两个机制/Qparallel
(-parallel)或/Qopenmp (-openmp)开发多线程应用程序。
如果您使用Intel
®
Thread Profiler和Intel
®
Thread Checker调优线程应用程序,对于Intel
®
Thread Checker,应使用/Qtcheck (-tcheck)启用源代码替换和覆盖插入,对于Intel® Thread
Profile,应该使用Qtprofile (-tprofile)启用源代码替换和覆盖插入。
IA-32和Intel
®
64架构下特定于处理器的推荐优化选项
使用/QxT(Linux*和Mac OS*使用–xT)可获得Intel
®
Core™2处理器家族的最佳性能,支持
SSE3指令的老Intel系统使用/QxP(Linux*使用-xP)。要获得Intel
®
Core™2处理器家族的最佳
性能,我们推荐使用/QaxT /QxW(Linux*使用–axT –xW),对于其他支持SSE2的系统(包
括AMD系统),可以获得较好的性能。要获得支持SSE3指令的非Intel处理器的最佳性能,我
们推荐使用/QxO (-xO)代替/QxW (-xW)。对于更老的处理器推荐选项,请参见表格“特定
Intel®处理器的推荐优化选项”。
这些选项允许您调优特定Intel处理器的性能。在每次微调前,应测量每个选项的性能受益,
以作为决策参考。使用Intel编译器的优化报告有助于确定哪些地方可以为编译器提供更多帮
助,以解决可能存在的依赖关系或别名问题。
特定于IA-64 (Intel
®
Itanium
®
)处理器的优化选项
通常,使用/O3 (-O3)、IPO和/或PGO并结合优化报告(在本文档的“微调”小节描述)帮助
解决可能的别名问题并提高内存利用率,为基于IA-64的系统提供最佳性能。
进程间优化(IPO)和/或配置文件导向的优化(PGO)选项
IPO包括内联函数,以减少函数调用开销并产生更多的优化机会。PGO提供运行时反馈,以
指导数据和代码布局决策,从而提高了指令缓存效率、分页和分支预测效率。但是,IPO可
能导致代码数量增多。应该使用这些选项在执行性能、编译时间和代码大小之间进行权衡。
IPO最好与PGO一起使用,以指导应该内联哪些函数。
浮点算法选项
Intel®编译器提供的一些选项可以增强所有Intel
®
架构中浮点结果的统一性和准确性,但性能
上有一定的损失。更多有关浮点选项的信息,请参考《Intel
®
C++和Fortran编译器文档》的
“编译器选项”小节。
微调(所有处理器)
确定了性能热点后,您应该向编译器提供更多信息以微调特定函数。优化和向量化报告可以
显示由于某些原因(比如指针别名或内存访问重叠)导致无法完全优化的循环所在的位置。
《Intel
®
C++和Fortran编译器文档》中详细描述了可以用来控制软件流水线、循环展开、向
量化、预读的其他程序、指令和内联函数,可供进一步微调应用程序代码使用。
通用优化选项
Windows* Linux*
Mac
OS*
注释
/0d -00 没有优化。在应用程序开发和调试的早期阶段使用。当应用程序能够
正常运行时,使用更高的设置。
/01 -01 优化大小。忽略可能增加对象大小的优化。大部分情况下创建最小的
优化代码。
此选项对许多大型服务器/数据库应用程序非常有用,这些程序中较
大的代码可能会导致内存分页问题。
/02 -02 最大化速度。默认设置,大部分情况下创建的代码速度比/01(-01)
更快。
/03 -03 启用/02(-02)优化以及更加激进的循环和内存访问优化,比如标量
替换、循环展开、代码复制以消除分支、循环阻塞等,更加有效地使
用缓存和传统数据预读(后者仅适用于基于IA-64的系统)。
对于带有循环且循环经常使用浮点运算或处理大型数据集的应用程
序,特别推荐使用/03(-03)。至于其他应用程序类型,比/02(-02)更
加激进的优化有时可能会降低其速度。
/Zi -g 生成调试信息,以供各种常见平台调试器使用。此选项关闭/02(-02)
并让/0d(-00)成为默认值,除非指定了/02(-02)(或其他0选项)。
/debug:full -debug
full
无论优化级别如何,该选项将通过添加完整的符号信息(包括本地符
号表信息)使优化代码的调试更加简单。
如果对调用将调试的C库例程的应用程序指定了此选项,则必须指定
选项/dbglibs链接相应的C调试库。