Intel C++ Compiler(icc)與gcc對比有什麼優缺點?


就在剛剛,還在跟Intel Compiler Team發郵件溝通,核對了幾個問題,我們要把icc集成到產品里。

這個問題的提問時間是2013年,現在是2015年,我用icc的感覺是,這貨毛病真多。

首先,它要求你預裝一個編譯器,比如是gcc,否則無法工作。

然後,有人說它效率高,我沒太多的感覺,甚至有人說是「明顯快」,我覺得這不太可能,至少我這邊沒有「明顯快」的感覺。

icc是明顯使用空間換時間,而且默認打開了一些開關(這些是在gcc里關閉的)才導致了「明顯快」的感覺(實際能提升10%?),如果優化全開的話,icc和gcc基本無差別。

關鍵的問題在於:

1、icc是收費的,免費的icc的license限制很多(OpenMP就沒打開)

2、icc Bug很多,有些優化開了以後,代碼變得莫名其妙,說不上來哪裡就錯了。

3、icc自己軟體毛病很多,我剛拿到某個版本的時候,編譯的時候編譯器居然segment fail,不知道為什麼對方沒測出來。

我個人覺得,Intel也許是錢多的原因,總喜歡花很多錢,養上一堆人,開發點東西出來,不管這東西是否賺錢,也許是作為技術儲備,也許就是為了燒點錢,比如Intel的OpenMP庫,比如Intel編譯器里支持CilkPlus之類的。

甚至這些產品里,有些的定位就是模糊的(在Intel的代碼里見過#ifdef ARM之類的),有些產品與產品之間甚至有矛盾的地方(估計各個team之間也缺少一定溝通,互相搗鼓什麼對方也都不知道)。

編譯器理論幾乎已經非常成熟了,icc知道針對CPU優化,難道gcc就不能優化了?能在現有的理論框架下搞出點名堂其實不容易,所以我認為icc只是Intel作為技術儲備而做的一個產品,順便燒點錢,大公司不缺這個。

當然,作為一個子公司,我承認icc是很厲害的,只是相對於其它編譯器來說,還需要努力。


給vczh大大的答案補充一點就是icc編譯出來的代碼有bug的潛在可能性比gcc高。我以前參與過的項目里有從gcc轉到icc編譯,就不幸遇到了一些代碼生成的bug。跟用過icc的同行們討論大家似乎普遍對icc的穩定性不那麼看好,用還是用但測試的時候要多加小心。


ICC便一出來在IntelCPU上比gcc明顯更快,但在AMD的CPU上可能反而慢,另外ICC的Bug比GCC多多了。


ICC = benchmark compiler, LOL


原來覺得ICC編譯出來效率更高,但是現在發現是GCC中的一些優化開關是默認關閉的而ICC是默認打開的。把這些開關打開後GCC編譯出來的程序比ICC快不少。


ICC 對 C++ 特性跟進情況太差,我感覺 C++ 14 complete 是遙遙無期了。


優點:性能極高。

這得益於兩點:第一是Intel的編譯器團隊確實很強大。第二是知道CPU的所有細節,能針對每一代CPU的特點(細到流水線、微架構的設計細節)做優化。

第二點多說一點。ICC升級時,會找CPU的架構師團隊開很多天的會議。跑一堆測試軟體,搭配研發用的CPU Simulator (這個時候CPU還沒流片呢),仔細的分析哪個快了,哪個慢了,為什麼。每一代ICC做完後還會召集gcc和微軟編譯器的團隊開會,然後找一些能用的技術給他們。

缺點:收費!

這個完全不能理解:-) 另外,整個開源代碼體系的工具鏈都是用gcc。用ICC會有很多問題。比如,你可以試試把Linux的編譯器換為ICC…


優點:編譯速度和編譯出來的代碼的速度都比gcc好了兩個檔次,跟VC++有obj、lib的二進位兼容所以可以icc和cl混用,支持pdb調試巨方便(喜歡命令行的人喜歡windbg其他的人喜歡VC++)

缺點:不開源(所以喜歡gcc的人都會認為那是惡魔哪怕linux上的版本還是免費的)


推薦閱讀:

高通推出伺服器處理器會對英特爾的業務造成怎樣的影響?
如何評價intel的新一代處理器i7 7700k?
為什麼英特爾和 AMD 的 CPU 緩存只有三級,而不做四級或者更多?
Intel 第六代酷睿 帶來了哪些技術革新?
Intel C++ Compiler 編譯出的程序在 AMD CPU 上性能會很差嗎?

TAG:英特爾Intel | 編程 | CC | 編譯器 | IntelCCompiler |