2011-02-09 73 views
2

我正在研究某些涉及大量計算的基於DSP的算法。我已經使用了所有選項(-O3,--ftreevectorize ...)的gcc庫。整個代碼的執行時間是43毫秒。我使用ICC編譯器運行相同的代碼,但代碼的執行時間沒有顯着減少。如何在不修改現有代碼的情況下減少ICC中的代碼執行時間? (不使用SIMD/S和C++)使用ICC編譯器減少代碼的執行時間

+1

重新編譯你傳遞給ICC的標誌是什麼?還有你在運行這個CPU?您可能需要考慮分析代碼以查看熱點的位置,並確定您是計算綁定還是內存綁定。 – 2011-02-09 13:14:58

+0

@保羅:對。我看過這樣的代碼(並寫了一些代碼),其中對`exp`,`log`,`pow`或`sqrt`的簡單調用占主導地位。簡單地記錄它就會產生巨大的變化。 – 2011-02-09 14:40:18

回答

0

如果你對浮點運算要求不嚴格,最簡單的優化將來自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