CPU SIMD介绍

转载请注明出处 何文西

概述

有幸能够接触到Unity引擎的源代码,在学习底层数学库的时候发现Unity为了跨平台对CPU做了多方支持,而且数学库底层使用的是SIMD技术。

SIMD(SingleInstruction Multiple Data)是单指令流多数据流技术,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX,SSE,AVX,FMA以及AMD的3D Now!技术和ARM的NEON技术。

目前使用SIMD指令有四种方法:分别是汇编语言,C++类,编译器Intrisincs和自动矢量化。

下面按照年代做了一些简单介绍:

MMX

MMX是由英特尔开发的一种SIMD多媒体指令集。它于1996年集成在英特尔奔腾 (Pentium) MMX处理器上,以提高其多媒体数据的处理能力。 MMX是Intel命名的矩阵数学扩展(Matrix Math eXtensions)。后来英特尔在此基础上发展出SSE指令集;AMD在此基础上发展出3DNow!指令集。

SSE

SSE(Streaming SIMD Extensions)是英特尔在AMD的3DNow!发布一年之后,在其计算机芯片PentiumIII中引入的指令集,是继MMX的扩充指令集。SSE指令集提供了70条新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。

SSE2

SSE2是Intel在Pentium4处理器的最初版本中引入的,但是AMD后来在Opteron和Athlon64处理器中也加入了SSE2的支持。SSE2指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。Intel后来在其Intel64架构中也增加了对x86-64的支持。

SSE3

SSE3是Intel在Pentium4处理器的Prescott核心中引入的第三代SIMD指令集,AMD在Athlon64的第五个版本,Venice核心中也加入了SSE3的支持。这个指令集扩展的指令包含寄存器的局部位之间的运算,例如高位和低位之间的加减运算;浮点数到整数的转换,以及对超线程技术的支持。

SSE4

SSE4是Intel在Penryn核心的Core 2 Duo与Core2 Solo处理器时,新增的47条新多媒体指令集,并且现在更新至SSE4.2。AMD也开发了属于自己的SSE4a多媒体指令集,并内建在Phenom与Opteron等K10架构处理器中,不过无法与Intel的SSE4系列指令集兼容。

AVX

AVX(Advanced Vector Extensions) 是Intel的SSE延伸架构。此架构支持了三运算指令(3-Operand Instructions),减少在编码上需要先复制才能运算的动作。目前Apple OS X 10.6.8(雪豹的更新版本)及更高,Linux2.6.30内核以后,以及Windows 7 SP1(Service Pack 1) KB976932,Windows Server 2008 RC2 SP1 与 Windows8支持AVX,Windows XP应该不支持。

FMA

FMA是Intel的AVX扩充指令集,如名称上熔合乘法累积(Fused Multiply Accumulate)的意思一样。

3DNow!

3DNow!(据称是“3D No Waiting!”的缩写)是由AMD开发的一套SIMD多媒体指令集,支持单精度浮点数的矢量运算,用于增强x86架构的计算机在三维图像处理上的性能。

Neon

ARM® NEON™ 通用 SIMD 引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。NEON 技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成),其性能至少为 ARMv5 性能的 3 倍,为 ARMv6 SIMD 性能的 2 倍。

引用:https://blog.csdn.net/conowen/article/details/7255920

猜你喜欢

转载自www.cnblogs.com/TravelingLight/p/9068442.html
cpu
今日推荐