您的位置:首页 > 运维架构 > Linux

Intel编译器10.x版本优化快速参考指南

2008-04-17 15:58 232 查看
适用于IA-32处理器、Intel® 64[b][1][/b]处理器和IA-64[b][2][/b]处理器。


应用程序性能

使用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调试库。

请点击此处下载,查看全文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息