我在ubuntu linux系統上遇到SSE問題。在msdn(sse4) 使用SSE4.1操作如何使用SSE指令?
示例源代碼的Linux
gcc -o test test.c -msse4.1
那麼錯誤信息:
error: request for member 'm128i_u16' in something not a structure or union
我如何使用這個例子的代碼? 或者任何示例代碼都可以使用?
我在ubuntu linux系統上遇到SSE問題。在msdn(sse4) 使用SSE4.1操作如何使用SSE指令?
示例源代碼的Linux
gcc -o test test.c -msse4.1
那麼錯誤信息:
error: request for member 'm128i_u16' in something not a structure or union
我如何使用這個例子的代碼? 或者任何示例代碼都可以使用?
代碼示例的標題是「Microsoft Specific」。這意味着這些函數特定於C++的微軟實現,並且不是跨平臺的。 Here are some Intel-specific guides to SSE instructions.Here is gcc documentation concerning command-line flags for specific assembly optimizations, including SSE.祝你好運,上證所可能會有點毛。
這不是微軟特有的內在函數,而是關於數據類型。實際的內在函數在兩種編譯器中都是100%相同的,並且是事實上的標準(源於英特爾)。
您面臨的問題是,__m128i
類型作爲便利功能在MSVC下爲union
,其中包括m128i_u16
等字段。您鏈接的代碼示例假定了這一點。
根據海灣合作委員會,__m128i
是不是一個聯盟,因此,毫不奇怪,沒有這些領域。這並不是一個壞處,因爲像這樣訪問一個聯合中的字段可以消除你在使用SSE時可能帶來的任何收益,所以除了像上面這樣的演示片段之外,你將(幾乎)永遠不想使用這樣的一個事情。
因此,您在GCC上使用* Microsoft編譯器*內部函數時遇到問題。這會讓你感到驚訝嗎? – 2012-02-20 04:45:38