我如何使用SSE指令?

时间:2012-02-20 04:43:04

标签: c++ c linux gcc ubuntu

我在ubuntu linux系统上遇到SSE问题。

msdn(sse4)上的示例源代码 在linux上使用sse4.1操作

gcc -o test test.c -msse4.1

然后出现错误信息:

error: request for member 'm128i_u16' in something not a structure or union

如何使用此示例代码? 或者任何示例代码都可以使用?

2 个答案:

答案 0 :(得分:3)

代码示例的标题是“Microsoft Specific”。这意味着这些函数特定于c ++的microsoft实现,而不是跨平台的。 Here are some Intel-specific guides to SSE instructions. Here is gcc documentation concerning command-line flags for specific assembly optimizations, including SSE.祝你好运,SSE可能会有点毛茸茸。

答案 1 :(得分:2)

这不是关于Microsoft特有的内部函数,而是关于数据类型。实际的内在函数在两个编译器中都是100%相同的,并且是事实上的标准(源自英特尔)。

您遇到的问题是,__m128i类型是 - 作为便利功能 - MSVC下的union,其中包含m128i_u16等字段。您链接的代码示例假定为此。

在gcc下,__m128i 不是一个联盟,因此,毫无疑问,它没有这些字段。这并不是一个真正的缺点,因为访问这样的联盟中的字段会消除您在使用SSE时可能获得的任何收益,所以除了上面的演示片段之外,您(几乎)永远不会想要使用这样的的事情。