2015-10-14 44 views
4

我正在試驗一種使用XCode 7.0在C++中編寫的算法。當我比較XCode中的標準LLVM編譯器與使用G ++(5.2.0)編譯時創建的二進制文件的性能時,使用LLVM創建的二進制文件比使用g ++編譯器創建的代碼快一個數量級(> 10倍)。使用G ++而不是LLVM編譯時代碼顯着較慢代碼

我使用g ++編譯器的-03代碼優化標誌如下:

/usr/local/Cellar/gcc/5.2.0/bin/g++-5 -o3 -fopenmp -DNDEBUG main.cpp \ 
PattersonInstance.cpp \ 
... \ 
-o RROTprog 

需要的G ++編譯,因爲算法進行編譯和高性能計算機上運行,​​我不能用LLVM編譯器。另外我想用Open MP來使代碼更快。

所有關於造成這些速度差異以及如何解決這些問題的原因都值得歡迎。

在此先感謝您的幫助!

大號

回答

10

我可以打賭,會發生什麼情況是這樣的:你通過-o3編譯器,而不是-O3(即CAPITAL O),併爲此-o3只是指示編譯器生成的可執行輸出到文件名爲"3"。但是,稍後在同一命令行中使用-o RROTprog,最後的-o是編譯器在輸出可執行文件時考慮的那個。

實際效果:-O3不存在,因此沒有進行優化。

+0

這確實是發生了什麼...我在編譯器標誌上讀取信息的站點有一個字母,它與O和o之間的區別很小,所以我認爲它是後者...非常感謝指出這一點,因爲我永遠不會認爲這是問題! –