如何使用 SSE 指令?

Posted

技术标签:

【中文标题】如何使用 SSE 指令?【英文标题】:How can I use SSE instruction? 【发布时间】:2012-02-20 04:43:04 【问题描述】:

我在 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

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

【问题讨论】:

所以您在 GCC 上使用 Microsoft 编译器 内部函数时遇到了问题。这让你感到惊讶吗? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

您面临的问题是__m128i 类型——作为一种便利功能——是MSVC 下的union,其中包括m128i_u16 等字段。您链接到的代码示例假定了这一点。

在 gcc 下,__m128i 不是联合,因此不出所料,没有这些字段。这并不是一个真正的缺点,因为像这样访问联合中的字段会消除您首先使用 SSE 可能获得的任何收益,所以除了在像上面这样的演示 sn-ps 中,您将(几乎)永远不想使用这样的事。

【讨论】:

以上是关于如何使用 SSE 指令?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SSE 指令集绝对 2 个双精度或 4 个浮点数? (最高 SSE4)

如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?

如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?

如何使用 SSE4.2 和 AVX 指令编译 Tensorflow?

如何在Windows上使用SSE和AVX指令编译Tensor Flow?

如何生成sse4.2 popcnt机器指令