2011-11-17 23 views
2

我有一個C++程序,它是用-O3標誌在gcc(gcc版本4.5.1)下編譯的。我正在考慮製作一個SSE2版本的程序是否值得(或者至少是最繁忙的)。不過,我擔心編譯器已經通過自動矢量化來完成這個任務。如何確定我的程序是否使用SSE2(通過gcc優化)?

問題:如何確定(一)我的程序是否被使用SSE/SSE2和(b)使用SSE/SSE2(即分析)是花費了多少時間?

回答

1

告訴如果你是從獲得矢量編譯任何好處,最簡單的方法是運行與不-ftree-vectorize標誌代碼,並比較結果。

-O3將自動啓用該選項。所以你可能想試試-O2

要查看哪些循環是矢量化的,哪些不是,以及爲什麼,可以添加-ftree-vectorizer-verbose選項。

最後一個選項當然是看組件。在裝配中識別矢量化代碼非常容易。

+0

謝謝,這工作。原來沒有什麼是矢量化的。 –

+0

請注意,由於gcc傾向於使用SSE指令來優化各種標量浮點運算(例如,float <-> int轉換),所以即使沒有任何矢量化,您仍可以看到一些SSE代碼。 –