优化资源共享
Intel® C++ 编译器 帮助
==========================
用法:icl [选项] 文件1 [文件2 …] [/link 链接器选项]
其中options代表零个或多个编译选项;fileN 是C/C++源程序(.c .cc .cpp .cxx .i),汇编(.asm),目标文件(.obj),静态链接库(.lib),或其他可链接的文件;linker_options代表零个或多个链接选项
注意
-----
1. 支持大多数Microsoft® Visual C++™ 编译器选项;对于不支持的多数选项会显示警告。各种选项的精确行为与Microsoft Visual C++ 编译器的同样选项并不完全一致。
2.
Intel C++ 编译器选项可以放置在你的icl.cfg文件中。
3. Intel C++ 编译器多数特殊选项以 /Q 开始:
(*I) 表明其选项是Intel C++ 编译器所独有的
(*M) 指出该选项被Microsoft Visual C++ 编译器支持
编译器选项列表
--------------------
性能选项
-----------
/O1 最大化速度,但是会禁用一些以增加代码尺寸获得极小速度提升的选项:/Ob2gysi-
/O2 最大化速度(缺省):/Ob2gyti
/O3 最大化速度并且启用高级优化
/Ox 启用完全优化
/Od 禁用优化;常用于选择性优化(例如 /Od /Og)
/fast 等同于/QxP /O3 /Qipo /Qprec-div-
/Ob<n> 控制内联扩展:
n=0 禁用内联扩展
n=1 扩展申明为 __inline 的函数, 完成 C++ 的内联任务
n=2 由编译器来决定,可以扩展任何函数 (如同 /Qip)
/Og 启用全局优化
/Oi[-] 启用[禁止]扩展内联函数
/Op[-] 启用[禁止]更好的浮点精度
/Os 启用速度优化,但是禁用一些以增加代码尺寸获得极小速度提升的选项(覆盖/Ot)
/Ot 启用速度优化(覆盖/Os)
/Oy[-] 启用[禁止]使用EBP作为通用目标寄存器(无框架指针)
/Oa[-] 假定程序中无别名
/Ow[-] 假定函数内无别名,但是假定有别名调用
/Qax<codes> 为<codes>所指定的处理器生成代码,同时也生成通用 IA-32 代码。
<codes> 包括一个或多个下面的字符:
K Intel Pentium III 和兼容的 Intel 处理器
W Intel Pentium 4 和兼容的 Intel 处理器
N Intel Pentium 4和兼容的 Intel 处理器。并启用 Intel处理器特有的新优化方法
P Intel Core™ Duo 处理器, Intel Core™ Solo 处理器,
Intel Pentium 4 和兼容的 Intel 处理器有SSE3 指令支持
B Intel Pentium M 和兼容的 Intel 处理器
/Qx<codes> 生成只能在<codes>指定处理器上运行的代码.
/arch:{SSE|SSE2}
分别等同于 /QxK 和 /QxW
/GR[-] 启用[禁用] C++ RTTI
/Qcxx-features
启用标准 C++ 特性(-GX -GR)
/EHa 启用异步C++ 异常句柄模型
/EHs 启用同步 C++ 异常句柄模型
/Ehc 假定 extern "C" 函数不会抛出异常
/Qsafeseh[-]
安全的寄存器异常操作 (/Qvc7.1及以上版本里是缺省值)
/Gd 使用 __cdecl 作为缺省调用约定
/Gr 使用 __fastcall 作为缺省调用约定
/Gz 使用 __stdcall 作为缺省调用约定
/GF 启用只读字符串池优化
/GA 为Windows应用程序优化(假定 .exe)
/GS[-] 启用[禁用(缺省)]溢出检查
/GT 启用纤尘安全的线程局部存储
高级性能选项
--------------------
启用并指定下列范围内的交互过程 (IP)优化选项:
/Qip 启用单文件IP优化(在一个文件内部,如同/Ob2)
/Qipo[n] 启用多文件IP优化(在文件之间)
/Qipo-c 生成一个多文件目标文件(ipo_out.obj)
/Qiop-S 生成一个多文件汇编文件
修改IP的行为:
/Qip-no-inlining 禁止全部或部分内联(需要 /Qio 或 /Qipo)
/Qip-no-ponlining 禁止部分内联(需要 /Qio 或 /Qipo)
/Qipo-separate 每一个源文件创建一个目标程序(覆盖 /Qipo[n])
其他高级性能选项:
/Qunroll[n] 设置打开循环的最大次数。省略n使用缺省启发式分析结果。
使用n=0禁止打开循环
/Qprof-dir <d> 指定存放输出profiling文件(*.dyn 和 *.dpi)的目录
{ profiling 一般是指对程序做性能测试 }
/Qprok-file <f> 指定profiling概要文件的文件名
/Qprof-gen[x] profiling的工具程序;用x进行限制,为PROFORDER工具采集额外的信息
/Qprof-use 指示在优化期间使用profiling信息
/Qfnsplit[-] 启用[禁止]函数分裂(同 /Qprof-use 一起启用)
/Qprof-gen-sampling
为同profrun样本采集工具一起使用准备代码
/Qpc32 设置内部 FPU 精度为24 bit 有符号数
/Qpc64 设置内部 FPU 精度为53 bit 有符号数(缺省)
/Qpc80 设置内部 FPU 精度为64 bit 有符号数
/QIfist[-] 启用[禁用(缺省)]快速浮点到整数转换
/Qrce 等同于/QIfist
/Qprec 改善浮点精度(速度影响小于 /Op)
/Qprec-div[-]
执行FP除法时改善精度(对速度有一些影响)
/Qprec-sqrt[-]
确定平方根优化是否启用
/Qfp-port[-]
按照指示舍入浮点结果(对速度有一些影响)
/Qfpstkchk 启用每次函数调用后均检查浮点栈
/Qsfalign8 函数变量在栈上按8或16字节对齐(缺省)
/Qsfalign16 函数变量在栈上按16字节对齐
/Qsfalign 强迫所有函数栈对齐
/Qsfalign- 取消所有函数栈对齐
/Gh 在函数引导处调用 __penter;用户profiling时常用
/GH 在函数结尾处调用__pexit;用户profiling时常用
/Qscalar-rep[-] 启用(缺省)[禁用] 纯量替换(要求 /O3)
/Qvec-report[n] 控制矢量化诊断信息的数量:
n=0 没有诊断信息
n=1 标示矢量化的循环 (缺省)
n=2 标示矢量化和未矢量化的循环
n=3 标示矢量化和未矢量化的循环妨碍数据的依存信息
n=4 标示未矢量化的循环
n=5 标示未矢量化的循环和妨碍数据的依存信息
/Qopt-report 输出优化报告到 stderr
/Qopt-report-file<file> 指定保存优化报告的文件名
/Qopt-report-level[level] 指定优化报告的详细程度(min|med|max)
/Qopt-report-phase<name> 指定要生成报告的阶段
/Qopt-report-routine<name> 在包含在指定name中的程序上报告
/Qopt-report-help 显示可用于报告的优化阶段
/Qtcheck 为检测多线程BUG而生成测试器
(要求Intel(R) Thread Checker,不可在编译器上单独使用)
/Qtprofile 为分析多线程性能而生成测试器
(要求Intel(R) Thread Profiler,不可在编译器上单独使用)
/Qopenmp 允许编译器产生基于OpenMP指示的多线程编码
/Qopenmp-profile 使用OpenMP运行库制导的链接,以产生OpenMP 性能测试信息
供VTune(TM) Performance Analyzer 的OpenMP调试组件运用
/Qopenmp-stubs 允许用户编译串行的OpenMP程序。
OpenMP指示被忽略并且链接一个简短的OpenMP库。
/Qopenmp-report{0|1|2} 控制OpenMP并行器的诊断级别
/Qparallel 允许自动并行器安全地将循环多线程化
/Qpar-report{0|1|2|3} 控制自动并行器诊断级别
/Qpar-threshold[n] 设置将循环自动并行化阀值。N是整数取值0到100
/Qalias-args[-] 启用(缺省)[禁止] 关于C/C++函数可以有别名的规则
如果禁用此规则,其安全性由用户保证。
/Qansi-alias[-] 启用[禁止(缺省)]在优化当中使用ANSI别名规则;
用户保证程序遵循了这些规则
/Qcomplex-limited-range[-]
启用[禁止(缺省)]对于某些复数运算使用基本代数展开。
对于复数计算密集型程序启用会丢失一些精度换取性能改善
/Qssp enable software-based speculative pre-computation
/Qssp 启用基于软件的推测式预计算
/fp:<name> 启用 <name> 浮点模型变量:
except[-] - 启用[取消]浮点语义学
double - 舍入中间变量至 53-bit (double) 精度
extended - 舍入中间变量至 64-bit (extended) 精度
fast[=1|2] - 启用更野蛮的浮点优化
precise - 允许值安全的优化
source - 启用中间变量适用源精度
strict - 启用 -fp:precise -fp:except, disables
禁用收缩,启用 pragma stdc fenv_access
/Qinline-min-size=<n>
设置内联程序的尺寸下限{小于此下限的程序要内联}
/Qinline-min-size-
内联程序尺寸没有下限
/Qinline-max-size=<n>
设置内联程序尺寸上限{大于此限制的程序不内联}
/Qinline-max-size-
内联程序没有尺寸上制
/Qinline-max-total-size=<n>
全部内联扩展的函数的最大尺寸
/Qinline-max-total-size-
全部内联扩展的函数的最大尺寸无限制
/Qinline-max-per-routine=<n>
一个内联函数能扩展的最大尺寸
/Qinline-max-per-routine-
一个内联函数能扩展的最大尺寸无限制
/Qinline-max-per-compile=<n>
每一次编译中内联函数的最大扩展次数
/Qinline-max-per-compile-
每一次编译中内联函数的最大扩展次数无限制
/Qinline-factor=<n>
设定内联扩展的上限,以百分比表示
/Qinline-factor-
没有设定内联扩展的上限
/Qinline-forceinline
将inline函数强制内联