MMX 指令集MMX(Multi Media eXtension,多媒体扩展指令集)指令集是Intel公司于1996年推出的一项多媒体指令增强技术。MMX指令集中包括有57条多媒体指令,
通过这些指令可以一次处理多个数据,在处理结果超过实际处理能力的时候也能进行正常处理,这样在软件的配合下,就可以得到更高的性能。MMX的益处在于,
当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序。但是,问题也比较明显,那就是MMX指令集与x87浮点运算指令不能够同时执行,
必须做密集式的交错切换才可以正常执行,这种情况就势必造成整个系统运行质量的下降。SSE指令集SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集是Intel在Pentium III处理器中率先推出的。其实,早在PIII正式推出之前,
Intel公司就曾经通过各种渠道公布过所谓的KNI(Katmai New Instruction)指令集,这个指令集也就是SSE指令集的前身,
并一度被很多传媒称之为MMX指令集的下一个版本,即MMX2指令集。究其背景,原来"KNI"指令集是Intel公司最早为其下一代芯片命名的指令集名称,
而所谓的"MMX2"则完全是硬件评论家们和媒体凭感觉和印象对"KNI"的 评价,Intel公司从未正式发布过关于MMX2的消息。而最终推出的SSE指令集也就是所谓胜出的"互联网SSE"指令集。SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)
浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、
音频处理等诸多多媒体应用起到全面强化的作用。S SE指令与3DNow!指令彼此互不兼容,但SSE包含了3DNow!技术的绝大部分功能,只是实现的方法不同。
SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。SSE2指令集SSE2(Streaming SIMD Extensions 2,Intel官方称为SIMD 流技术扩展 2或数据流单指令多数据扩展指令集 2)
指令集是Intel公司在SSE指令集的基础上发展起来的。相比于SSE,SSE2使用了144个新增指令,扩展了MMX技术和SSE技术,
这些指令提高了广大应用程序的运行性能。随MMX技术引进的SIMD整数指令从64位扩展到了128 位,使SIMD整数类型操作的有效执行率成倍提高。
双倍精度浮点SIMD指令允许以 SIMD格式同时执行两个浮点操作,提供双倍精度操作支持有助于加速内容创建、财务、工程和科学应用。
除SSE2指令之外,最初的SSE指令也得到增强,通过支持多种数据类型(例如,双字和四字)的算术运算,支持灵活并且动态范围更广的计算功能。
SSE2指令可让软件开发员极其灵活的实施算法,并在运行诸如MPEG-2、MP3、3D图形等之类的软件时增强性能。
Intel是从Willamette核心的Pentium 4开始支持SSE2指令集的,而AMD则是从K8架构的SledgeHammer核心的Opteron开始才支持SSE2指令集的。

首先普及一下基础,指令分整点和浮点两类,处理不同类型的数据,两类之间基本上没有关联,用在不同的场合。多媒体只用整点,比如高清编解码。3d游戏基本上只要用浮点就可以了。

多媒体指令加速的原理就是SIMD(单条指令处理多个数据)。比如要处理8-bit像素组成的图像,我用64位加速指令,一条指令同时可以处理8个像素,不就加速了8倍吗!确实是这样的,但是实际也加速不了八倍。SIMD指令比普通指令运行周期要长。一般运气好一点综合性能加速3倍,就很不错了。

mmx/sse是一对兄弟,他们都是64位加速。intel最早在奔腾166mmx上加入mmx指令集,他们是单纯的整点加速,专用于多媒体加速。后来的sse出来,又加入了浮点指令,同时也新增了几条整点,作为旧的mmx的补充。从此SIMD的架构就基本定型了。

sse2是128位加速。后来intel看到mmx/sse组合很强悍,就琢磨着,既然64位能加速很快,我干嘛不把位宽再增加1倍呢?于是就把所有的mmx/sse指令名字前面加个x,表示扩展了,这样就推出了sse2。几乎每一条sse2指令都有相应mmx/sse指令与之对应。所以对于程序员来说,会用mmx/sse了,sse2就不用学了,无非是同时处理个数翻倍而已,原来写好的程序照葫芦画瓢就行了。

下面举个例子:
psubb mm0,mm1     --> 这是一条64-bit mmx指令,mm0,mm1里面是8个8位整数,同时做减法
psubb xmm0,xmm1    --> 这是一条128位sse2指令,xmm0,xmm1里面是16个8位整数,同时做减法

上面一条指令,就分别做了8次、16次减法,是不是加速了很多?

不过实际应用中sse2却并不比sse加速很多,一般也就5%~10%,几乎可以忽略不计。这是为什么呢?原因一方面就是sse2位数太宽了!你必须找到总共128bit的几个连续的数据并排傻站着等你做完全相同的处理,一般这个条件并不容易满足。另外一个就是sse2本身的处理效率比sse低,别看嘴巴张开大了1倍,吞咽速度却没跟上,最后吃进肚里的速度还是差不多。

MMX,SSE,SSE2扫盲相关推荐

  1. MMX, SSE, SSE2

    指令集基本概念 CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统.指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一.指令集是存储在C ...

  2. MMX, SSE(XMM,MXCSR,FXSAVE),SSE2,SSE3,AVX,AVX-512

    摘自<Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes1, 2A, 2B, 2C, 2 ...

  3. SIMD(MMX/SSE/AVX)变量命名规范心得

    [转载]:SIMD(MMX/SSE/AVX)变量命名规范心得 当使用Intrinsics函数来操作SIMD指令集(MMX/SSE/AVX等)时,会面对不同长度的SIMD数据类型,其中又分为多种紧缩格式 ...

  4. [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...

    作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX.SSE2指令集.支持vc.gcc编译器,在Windows.Linux.Mac ...

  5. 使用MMX/SSE汇编指令集优化视频开发

    1.汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年 ...

  6. Warning: The TensorFlow library wasn't compiled to use SSE,SSE2,SSE3,SSE4.1 instructions

    Tensorflow Warning: The TensorFlow library wasn't compiled to use SSE,SSE2,SSE3,SSE4.1 instructions, ...

  7. SSE/SSE2版ceilf

    最近实现一套纯软件的Power PC speicified intrinsics,包括AltiVec的一些东东,后来发现在x86下执行很慢.于是开始使用SSE/SSE2加速,不过介于PPC和x86指令 ...

  8. 如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512

    链接:https://stackoverflow.com/questions/28939652/how-to-detect-sse-sse2-avx-avx2-avx-512-avx-128-fma- ...

  9. 深入探讨用位掩码代替分支(8):SSE指令集速度测试

    在上一篇测试了MMX指令集,这次我们来测试SSE指令集.说的更精确一点,是测试SSE2指令集. 本篇致力于解决以下问题-- 1.SSE/SSE2指令集是什么? 2.如何阅读Intel/AMD的手册? ...

最新文章

  1. Linux学习笔记之文件管理和目录管理类命令
  2. 基于Web日志挖掘的个性化推荐系统(附源码)
  3. 项目经理怎么在两周内熟悉一个项目的业务?
  4. 用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包讨论
  5. python 操作数据库的常用SQL命令
  6. Maximum upload size exceede上传文件大小超出解决
  7. pygame为游戏添加背景_用 Python 制作飞机大战小游戏
  8. 官方版sublime Text3汉化和激活注册码
  9. 2019牛客多校第四场B xor(线性基求交)题解
  10. win10系统问题记录(一):解决D/E盘根目录出现的msdia80.dll文件
  11. html5 canvas实现桌面效果,基于html5 canvas实现漫天飞雪效果实例
  12. wamp介绍及crossbar.io服务搭建
  13. 新闻闲话:低龄儿童,如何快快乐乐学英语
  14. select函数详细用法解析
  15. 初识c语言—学习笔记
  16. 雷军在联想演讲:全场无言,除了掌声
  17. Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序
  18. OpenVpnCentos8部署
  19. 100元 50元 20元 10元 5元 1元 标准尺寸
  20. C# MD5加密 解密

热门文章

  1. 推荐10个AI学习、工作用的有趣网站
  2. 逆向分析入门实战(一)
  3. 一文掌握 Go 文件的读取操作
  4. 【象群算法】基于象群算法求解单目标问题附matlab代码(Elephant Herding Optimization,EHO)
  5. IDEA打jar包,如何跳过Test测试
  6. 重装MySQL前,需彻底删除之前MySQL的数据,记录分享过程。
  7. 宁德时代麒麟电池有着更大的野心
  8. pe工程师是做什么的
  9. 一张图让你了解PMP项目管理全部的49个过程组
  10. 颈椎前路caspar撑开器_间盘切除前椎间隙撑开在颈椎前路手术中的应用