2011-11-12 32 views
0

我已將GCC 4.2編譯爲XCode 4.2中的LLVM GCC 4.2,並且在OpenMP下運行了_mm_shuffle_ps本身的奇怪鏈接器錯誤。此功能將工作別的地方,但一旦我把它放在一個OMP塊內它開始產生下面的鏈接器錯誤:在Xcode 4(LLVM GCC)中使用_mm_shuffle_ps時可能出現的OpenMP + SSE錯誤

"___builtin_ia32_shufps", referenced from: 
__ZN7Annulus12traceFactorsEP9PrimitiveP8VFMatrix.omp_fn.0 in Annulus.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

我的代碼的基本結構如下:

#pragma omp parallel { 
    //Some stuff 
    #pragma omp for { 
     //Do more stuff including _mm_shuffle_ps 
    } 
} 

代碼工作在GCC 4.2中很好,所以這是OpenMP的LLVM GCC實現中的一個錯誤還是我需要一個異常的編譯器標誌?

+0

也許你應該告訴使用平臺(CPU arch?)和使用的編譯器標誌。它看起來像缺少一個ia32特定函數,但是您正在鏈接x86_64版本。也許編譯器的標誌/定義關閉 – sehe

+0

我正在編譯MacPro(OS X 10.7.2,2.8 GHz四核英特爾至強處理器),但我也試過MacPro(OS X 10.6.8,2 x 2.26四核核心Intel Xeon)。編譯器標誌是啓用了OpenMP和SSE的所有Xcode默認值。由於它在OpenMP塊之外工作,我認爲它不是我現有的設置。 – cubiclewar

回答

0

完全是一個bug。請把它歸檔。謝謝。

0

僅供參考:

我這裏有同樣的問題,但與shuf_pd指令。其他內部函數工作得很好。我剛把這個bug提交給蘋果公司。

可能有一種解決方法我還沒有嘗試過:將所有SSE代碼放入不同的函數中,並從OpenMP循環中調用它。

+0

我也提交了一個蘋果的錯誤。是的,我在考慮將它放在另一個函數中,但是要獲得相同的性能,它必須是內聯的,否則可能會導致錯誤。與此同時,我已經放棄使用GCC4.2 – cubiclewar