MMX,SSE,SSE2扫盲
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扫盲相关推荐
- MMX, SSE, SSE2
指令集基本概念 CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统.指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一.指令集是存储在C ...
- 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 ...
- SIMD(MMX/SSE/AVX)变量命名规范心得
[转载]:SIMD(MMX/SSE/AVX)变量命名规范心得 当使用Intrinsics函数来操作SIMD指令集(MMX/SSE/AVX等)时,会面对不同长度的SIMD数据类型,其中又分为多种紧缩格式 ...
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...
作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX.SSE2指令集.支持vc.gcc编译器,在Windows.Linux.Mac ...
- 使用MMX/SSE汇编指令集优化视频开发
1.汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年 ...
- 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, ...
- SSE/SSE2版ceilf
最近实现一套纯软件的Power PC speicified intrinsics,包括AltiVec的一些东东,后来发现在x86下执行很慢.于是开始使用SSE/SSE2加速,不过介于PPC和x86指令 ...
- 如何在编译时判断是否支持SSE/SSE2/AVX/AVX2/AVX-512
链接:https://stackoverflow.com/questions/28939652/how-to-detect-sse-sse2-avx-avx2-avx-512-avx-128-fma- ...
- 深入探讨用位掩码代替分支(8):SSE指令集速度测试
在上一篇测试了MMX指令集,这次我们来测试SSE指令集.说的更精确一点,是测试SSE2指令集. 本篇致力于解决以下问题-- 1.SSE/SSE2指令集是什么? 2.如何阅读Intel/AMD的手册? ...
最新文章
- Linux学习笔记之文件管理和目录管理类命令
- 基于Web日志挖掘的个性化推荐系统(附源码)
- 项目经理怎么在两周内熟悉一个项目的业务?
- 用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包讨论
- python 操作数据库的常用SQL命令
- Maximum upload size exceede上传文件大小超出解决
- pygame为游戏添加背景_用 Python 制作飞机大战小游戏
- 官方版sublime Text3汉化和激活注册码
- 2019牛客多校第四场B xor(线性基求交)题解
- win10系统问题记录(一):解决D/E盘根目录出现的msdia80.dll文件
- html5 canvas实现桌面效果,基于html5 canvas实现漫天飞雪效果实例
- wamp介绍及crossbar.io服务搭建
- 新闻闲话:低龄儿童,如何快快乐乐学英语
- select函数详细用法解析
- 初识c语言—学习笔记
- 雷军在联想演讲:全场无言,除了掌声
- Mysql学习总结十二:系统变量、用户变量、定义条件和处理程序
- OpenVpnCentos8部署
- 100元 50元 20元 10元 5元 1元 标准尺寸
- C# MD5加密 解密