MMX及SSE优化--MMX篇

转载 2006年06月25日 20:34:00
MMX和SSE都是INTEL开发的基于SIMD(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系统已经推出,但是我们大部分都是使用32位系统,所以如果要完成两个128位的相加运算,用普通32位指令很明显要执行4条相加指令,而基于64位的MMX指令只需要执行两次即可完成,更强大的SSE能一次处理128位,故一次就可以完成操作,所以采用MMX及SSE优化能够大幅度提升程序性能。
    MMX采用处理器的80位的浮点寄存器的低64位作为MMX寄存器,一共有8个,从mm0到mm7,因为是“借用”浮点寄存器的低64位所以每次在用完MMX指令后一定要用EMMS指令将寄存器清空,MMX主要是针对整数运算进行优化,一个64位的MMX寄存器可以同时存入8个8位或者4个16位的整数,估计一次性就可以完成8次8位运算或者4次16位运算,要注意的MMX指令不能直接对32位数进行2次运算,但可以把32位拆分成两个16位再进行运算。MMX技术还有一个非常有用的特性是饱和运算,比如两个8位数相加:128+129相加后很明显超过了8位的最大值256,但是进行饱和运算相加的结果将是最大值256,饱和运算将运算结果控制在相应位数的范围内。

下面举一个例子:
在VC 6 SP6中可以直接在内联汇编中使用mmx指令,而且调试时也能查看MMX寄存器
__int16 a[]={1,2,3,4}
__int16 b[]={5,6,7,8}
_asm{
movq mm0,a                                         //将数组a中的4个数一次存入mm0
movq mm1,b                                        //将数组b中的4个数一次存入mm0
paddsw mm0,mm1                               //16位带符号的饱和相加,结果存在mm0中
movq a,mm0                                        //再把mm0中的结果存放在数组a中 
emms                                                   //千万别忘了,擦干净
}

也可以不用内联汇编直接用函数,MS的最新的SDK和INTEL的编译器都支持这种方式
#include <xmmintrin.h>                            //使用所必须包含的头文件
__m64 a=_mm_set_pi16(1, 2, 3, 4);       //向a中写入4个16位的整数
__m64 b=_mm_set_pi16(5, 6, 7, 8);      //最后一位写入最低位,即8写入最低位
a=_m_paddsw(a,b);                               //完成16位加法运算
_m_empty;                                             //一样不要忘记擦PP,嘿嘿

以上只是最基本最简单的介绍,MMX一共有57条指令,包括基本算术运算指令,比较指令,转换指令,逻辑指令,位移和传输指令,此处就不一一列举,详细的指令介绍请参看INTEL的官方网站。但请记住MMX是针对整数运算的,千万不要用于浮点运算,浮点运算要用更为强大的SSE指令完成,预知SSE详解且待下回分解。

MMX和SSE

MMX MMX: 是MultiMedia eXtensions(多媒体扩展)的缩写,是第六代CPU芯片的重要特点。MMX技术是在CPU中加入了特地为视频信号(Video Signal),音频信号(A...
  • qingkong8832
  • qingkong8832
  • 2011年09月21日 15:29
  • 5735

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

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

MMX与SSE优化策略描述

上回讲到针对整数运算的MMX优化技术,然而真正大运算量的图形和声音处理大都用的是浮点运算,而且现在对浮点运算的要求也是越来越高,在这样一个条件下INTEL终于在Pentium III处理中增加针对浮点...
  • mydear_11000
  • mydear_11000
  • 2016年03月11日 15:47
  • 1042

MMX, SSE, SSE2

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

FPU , MMX SSE

为什么要需要FPU和MMX/SSE? 提供了SIMD环境(single instruction multi data),即单指令多数据。 内嵌浮点运算单元,64及128位寄存器等。甚至sin/co...
  • shybrian
  • shybrian
  • 2012年07月03日 15:56
  • 973

MMX及SSE优化--MMX篇

  MMX和SSE都是INTEL开发的基于SIMD(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系统已经推出,但是我们大部分都是使用32位系统,所以如...
  • dbgnu
  • dbgnu
  • 2006年04月06日 13:36
  • 704

MMX,SSE,SSE2扫盲

MMX 指令集 MMX(Multi Media eXtension,多媒体扩展指令集)指令集是Intel公司于1996年推出的一项多媒体指令增强技术。MMX指令集中包括有57条多媒体指令, ...
  • taolinke
  • taolinke
  • 2012年01月05日 11:10
  • 1664

MMX及SSE优化--MMX篇

MMX和SSE都是INTEL开发的基于SIMD(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系统已经推出,但是我们大部分都是使用32位系统,所以如果要...
  • feixiaku
  • feixiaku
  • 2013年03月31日 19:06
  • 626

fpu,mmx以及sse寄存器的少量简介

FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。      使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶,  ...
  • analogous_love
  • analogous_love
  • 2013年06月15日 23:31
  • 1734

MMX汇编指令优化

MMX汇编指令优化
  • jacke121
  • jacke121
  • 2017年01月22日 14:45
  • 404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MMX及SSE优化--MMX篇
举报原因:
原因补充:

(最多只允许输入30个字)