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. 【Vue】新建一个Vue3项目
  2. 12-C语言排序算法
  3. 神策 FM | 数据驱动时代,你的岗位如何转变?
  4. 1360. 日期之间隔几天 golang
  5. 【以太坊源码】交易(一)
  6. 第 7 章 原型模式
  7. dump 大文件分析工具Jprofile
  8. 密码字典生成工具crunch的简单使用
  9. Docker之nginx集群
  10. Laravel快速创建统计图表
  11. Crypto_[QCTF2018]Xman-RSA
  12. 联想新计算机开机黑屏,联想笔记本电脑开机黑屏没反应的原因及解决办法攻略【维修总结】...
  13. 你是哪个级别?(工程师级别划分)
  14. 举例说明专用计算机和通用计算机的区别,计算机原理答案
  15. 布朗大学计算机专业怎么样,布朗大学的计算机专业如何?
  16. 第一个安卓app应用的开发--环境配置和第一项目创建
  17. ubuntu 18.04取消自动锁屏功能
  18. 不定积分公式 定积分公式
  19. 互斥事件的概念和公式_高中数学典型例题分析与解答:互斥事件
  20. 单片机串口通讯RXD与TXD如何对接详解

热门文章

  1. 如何在html中打开pptx文件,而不是下载
  2. 百度之星 题一 洞穴
  3. BSD学习(BSD系统的历史和目标)
  4. MAC如何快速查看软件安装路径
  5. vmospro启动黑屏_vmospro下载-VMOSPro 安卓版v1.1.28-PC6安卓网
  6. win10任务管理器快捷键_Win10全新任务管理器上线:专为PC游戏优化
  7. 多模态 —— Learnable pooling with Context Gating for video classification
  8. C语言更改控制台字体颜色
  9. 在西安培训JAVA四个月能就业吗
  10. 基于Java毕业设计大学生学科竞赛论文评审系统源码+系统+mysql+lw文档+部署软件