2012-10-25 91 views
3

我試圖讓GCC 4.7自動向我的代碼的某些部分提供一個速度增加的向量,但是,這似乎很難這樣做。自動矢量化GCC

這裏是一些代碼,我想向量化:

void VideoLine::WriteOut(unsigned short * __restrict__ start_of_line, const int number_of_sub_pixels_to_write) 
{ 
    unsigned short * __restrict__ write_pointer = (unsigned short *)__builtin_assume_aligned (start_of_line, 16); 
    unsigned short * __restrict__ line = (unsigned short *)__builtin_assume_aligned (_line, 16); 
    for (int i = 0; i < number_of_sub_pixels_to_write; i++) 
    { 
    write_pointer[i] = line[i]; 
    } 
} 

我使用以下GCC開關:

-std=c++0x \ 
-o3 \ 
-msse \ 
-msse2 \ 
-msse3 \ 
-msse4.1 \ 
-msse4.2 \ 
-ftree-vectorizer-verbose=5\ 
-funsafe-loop-optimizations\ 
-march=corei7-avx \ 
-mavx \ 
-fdump-tree-vect-details \ 
-fdump-tree-optimized \ 

我知道,有些人超越。

我根本沒有從矢量化器獲得任何輸出,但是,在查看.optomized文件時,我可以看到它沒有使用矢量化。任何人都可以用正確的方式指出我想要做的矢量化嗎?

編輯:原來的問題是使用-o3而不是-O3。

+1

這就是爲什麼我從不依靠自動矢量化。如果真的很重要,我會手動完成。 – Mysticial

+0

你只是在複製數據。爲什麼要矢量化? –

+0

我只是在這個功能複製,但我有其他人需要更多的工作。我認爲首先讓它起作用會更容易。 – robby987

回答

0

編譯器是自由地做它爲所欲爲。因此,如果您真的想使用SIMD功能(而不依賴於編譯器),則應使用這些功能(請參閱manual)。