【问题标题】:How can I use SSE instruction?如何使用 SSE 指令?
【发布时间】: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 编译器 内部函数时遇到了问题。这让你感到惊讶吗?

标签: c++ c linux gcc ubuntu


【解决方案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 中,您将(几乎)永远不想使用这样的事。

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2012-02-27
      • 2016-04-15
      • 2019-05-29
      相关资源
      最近更新 更多