SSE3指令有啥功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSE3指令有啥功能?相关的知识,希望对你有一定的参考价值。

SSE3是英特尔去年推出Prescott核心处理器时出现的,包含13条指令,是对处理器SIMD能力的补充。处理器有时候会重复处理大量数据和类似操作,大量数据流通过处理器,需要进行的操作则是同一个(特别在音频/视频处理过程)。目前很多显卡核心上都带有SIMD处理单元,用来处理尽快处理大量的顶点、象素数据;CPU中的X87浮点处理部分中也具有这样的专门单元。

SSE3指令集中包括10条针对SIMD的新指令和3条不设计SSE寄存器的指令:

x87浮点-整数转换指令--fisttp;
复杂算术指令--addsubps, addsubpd, movsldup, movshdup, movddup;
视频编码指令--lddqu;
图形指令--haddps, hsubps, haddpd, hsubpd;
线程同步指令--monitor, mwait
上面给出的13条指令中,浮点-整数转换指令的功能很好理解,但不是所有的指令都这么显而易见。复杂算术指令增加了虚数功能,hadd和hsub指令则是为水平加、减操作准备的。这些指令可以加快顶点阵列中水平存储数据的处理速度。目前SSE3也是最先进的指令集,英特尔Prescott处理器已经支持SSE3指令集,AMD会在未来双核心处理器当中加入对SSE3指令集的支持,全美达的处理器也将支持这一指令集
参考技术A SSE3指令集
SSE3(Streaming SIMD Extensions 3,Intel官方称为SIMD 流技术扩展 3或数据流单指令多数据扩展指令集 3)指令集是Intel公司在SSE2指令集的基础上发展起来的。相比于SSE2,SSE3在SSE2的基础上又增加了13个额外的SIMD指令。SSE3 中13个新指令的主要目的是改进线程同步和特定应用程序领域,例如媒体和游戏。这些新增指令强化了处理器在浮点转换至整数、复杂算法、视频编码、SIMD浮点寄存器操作以及线程同步等五个方面的表现,最终达到提升多媒体和游戏性能的目的。Intel是从Prescott核心的Pentium 4开始支持SSE3指令集的,而AMD则是从2005年下半年Troy核心的Opteron开始才支持SSE3的。但是需要注意的是,AMD所支持的SSE3与Intel的SSE3并不完全相同,主要是删除了针对Intel超线程技术优化的部分指令。

如何使用 SSE 指令?

【中文标题】如何使用 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 中,您将(几乎)永远不想使用这样的事。

【讨论】:

以上是关于SSE3指令有啥功能?的主要内容,如果未能解决你的问题,请参考以下文章

新P4有SSE3指令,是不是需要其他硬件支持。

MSVC /arch:[指令集] - SSE3、AVX、AVX2

SSE、SSE2、SSE3指令集的区别?

汇编的中断指令INT21H有啥用啊?

下面程序为啥不行??jmp指令不能越段转移吗??有啥方法越段呢??

arm指令中mov和ldr有啥区别?