Performance 使用ICC编译器缩短代码的执行时间

Performance 使用ICC编译器缩短代码的执行时间,performance,gcc,Performance,Gcc,我正在研究某些基于DSP的算法,这些算法涉及大量计算。我使用了gcc库的所有选项(-O3,-ftreevectorize…)。整个代码的执行时间是43毫秒。我使用ICC编译器运行相同的代码,但代码的执行时间没有显著减少。如何在不修改现有代码的情况下减少ICC中的代码执行时间?(不使用SIMD/S和asm)如果您对浮点数学的要求不严格,最简单的优化将来自icc-fast file.c 但是,这将同时打开-no prec div,这可能是您不想要的。在这种情况下,请尝试传递icc-03-axSSE4

我正在研究某些基于DSP的算法,这些算法涉及大量计算。我使用了gcc库的所有选项(-O3,-ftreevectorize…)。整个代码的执行时间是43毫秒。我使用ICC编译器运行相同的代码,但代码的执行时间没有显著减少。如何在不修改现有代码的情况下减少ICC中的代码执行时间?(不使用SIMD/S和asm)

如果您对浮点数学的要求不严格,最简单的优化将来自
icc-fast file.c

但是,这将同时打开
-no prec div
,这可能是您不想要的。在这种情况下,请尝试传递
icc-03-axSSE4.1-ipo file.c


如果您愿意在编译上投入更多的时间,您可能会从评测中获得巨大的速度优势
icc-03-axSSE4.1-ipo-prof_gen file.c
将设置您生成配置文件。然后运行代码几次,练习最常见的用例,并使用
icc-03-axSSE4.1-ipo-prof_use file.c重新编译
如果您对浮点数学的要求不严格,最简单的优化将来自
icc-fast file.c

但是,这将同时打开
-no prec div
,这可能是您不想要的。在这种情况下,请尝试传递
icc-03-axSSE4.1-ipo file.c


如果您愿意在编译上投入更多的时间,您可能会从评测中获得巨大的速度优势
icc-03-axSSE4.1-ipo-prof_gen file.c
将设置您生成配置文件。然后运行代码几次,练习最常见的用例,并使用
icc-03-axSSE4.1-ipo-prof_use file.c

向icc传递哪些标志?还有,你在哪个CPU上运行这个?您可能需要考虑剖析代码以查看热点在何处,并确定您是计算绑定还是内存绑定。@保罗:对。我见过这样的代码(也写过一些),其中对
exp
log
pow
sqrt
的简单调用占主导地位。只需记住它就有了巨大的不同。我正在传递icc-03-axSSE4.1 file.c您要传递给icc的标志是什么?还有,你在哪个CPU上运行这个?您可能需要考虑剖析代码以查看热点在何处,并确定您是计算绑定还是内存绑定。@保罗:对。我见过这样的代码(也写过一些),其中对
exp
log
pow
sqrt
的简单调用占主导地位。简单地记住它会产生巨大的差异。我传递icc-03-axSSE4.1 file.cI使用了您提到的所有标志。但是没有任何变化不幸的是,这表明编写的代码无法进行静态优化(例如,在没有运行上下文的情况下只检查代码)。然而,profiling选项将帮助编译器确定最可能的代码路径,并重新安排其输出以优化它。这个编译器给我的结果和其他编译器一样,比如icc、pgi。但是问题是关于这个编译器的教程很少…请告诉我在哪里可以找到相同的教程。我已经使用了您提到的所有标志。但是没有任何更改。不幸的是,这表明编写的代码无法进行静态优化(例如,在没有运行上下文的情况下仅检查代码)。然而,profiling选项将帮助编译器确定最可能的代码路径,并重新安排其输出以优化它。这个编译器给我的结果和其他编译器一样,比如icc、pgi。但是问题是关于这个编译器的教程很少…请告诉我在哪里可以找到相同的教程。