Algorithm 版 (精华区)
发信人: sino (茶水博士), 信区: Theory
标 题: mmx技术的核心
发信站: 哈工大紫丁香 (Sun Aug 27 13:29:33 2000), 转信
发信人: penguin (奈何企鹅), 信区: algorithm
发信站: NJU Lily BBS (Fri Jun 18 16:11:45 1999), 站内信件
MMX技术的关键是在奔腾处理器的基础上扩充了面向多媒体操作的数据类型 和57条指令,
因此人们常把MMX解释为多媒体扩充(multimedia eXtension) 。其实这些数据类型和指令
不仅适合于多媒体操作,而且也适合于通信及
信号处理等更宽的应用领域,所以也可以把它理解为多媒体与通信的扩充 (communicati
on eXtension或 modem eXtension)。
多媒体和网络通信是现代计算机行业中最为活跃的两个领域,然而80X86和 奔腾处理
器的计算能力不能满足这些领域的需求,因此由各种媒体加速器 为核心构成的多媒体加
速卡占据了很大的市场。将多媒体技术“集成到硅
片中,设计到主板上”是新一代多媒体计算机的设计目标。在通用CPU中增 加多媒体指令
,逐步取代媒体加速器,不仅可以缩小系统规模,提高集成 度和可靠性,而且降低了价
格,减少了用户投资,这正是设计者的出发点
。现代微电子技术的进展,为在原有CPU的基础上实现这些新的指令提供了 可能性。
扩充奔腾处理器的指令集是对X86系统一次很大的革新,这种革新思想主要 来自RIS
C体系结构的进步。众所周知,X86处理器是典型的CISC结构,从 80386以后,指令系统没
有很大的改变,设计者的主要精力是在处理器内部
引入RISC系统的超标量、超流水线结构以提高处理器的速度。多媒体数据 处理与传统的
信息处理相比有很突出的特点,主要反映在数据流量大,但 运算精度较低(例如,图形的
象素值为8位数据、语音的采样值为16位数据)
;运算量大,但基本上是对相邻的数据进行操作(例如,DCT的操作范围是 8*8邻域)等特
点。这种运算是与对少量数据反复进行迭代的运算(例如, 人工神经网络的迭代收敛算法
)完全不同的。前者可以用精度不很高的定点
运算,而后者必须考虑累积误差的影响,一定要采用高精度的浮点运算。 因此,这些低
精度的定点数据完全没有必要当作高精度数据处理,可以充 分利用那些64位的高精度运
算部件,并行处理多个短字长的多媒体数据。 基于上述分析,SUN公司在其RISC结构的U
ltraSparc
处理器中扩充了面向 多媒体操作的可视化指令集(VIS),从而大大加强了处理器的性能。
UltraSparc 是面向高档工作站的RISC结构CPU,这种指令系统的设计思想 同样在SGI、
DEC、惠普等其它高档工作站、服务器机型所采用的MIPS R10000、DEC Alpha、HP
PA8000等CPU中得到体现。高档工作站在多媒体 技术中的成功无疑会影响到PC级微处理器
的主流产品X86,因此在奔腾处 理器中引入面向多媒体操作的指令系统就是非常自然的了
。
由于MMX扩充的奔腾处理器要与低档CPU兼容,与现有的操作系统和软件兼 容,因此
它没有过多地更改原有结构,也没有增加新的寄存器,而是将扩 充的寄存器映射在80位
浮点寄存器的低64位。这样就使得P55C要么工作在? MMX方式,要么工作在浮点方式,两
者不可以冲突。
MMX的核心技术体现在下列几个方面:
1、增加了新的数据类型
语音采样数据的精度是16位,灰度图象中的每个象素和真彩色图形中RGB 分量的精度
是8位。如果在一个64位的数据通路中同时处理4个16位数据或 8个8位数据,那么运算速
度就是原来的4倍或8倍。基于这一思想在MMX技 术中扩充了4种数据类型:
紧缩的字节类型:64位中存储8个8位数据;
紧缩的字类型:64位中存储4个16位数据(这是MMX最核心的数据类型);
紧缩的双字类型:64位中存储2个32位数据;
四字类型:直接处理64位数据。
MMX技术被认为是一种单指令流多数据流(SIMD)的并行处理机构,就是因为 它在一条
指令中可以同时处理8个、4个或2个数据。
2、 扩充了饱和型运算方式
定点运算中经常遇到运算结果溢出的情况。有上溢和下溢两种:对有符号? 数运算,
上溢指的结果超过“正的最大数”,下溢指的是结果比“负的最 小数”还要小。当浮点
处理器遇到这种情况时,通常是作为异常情况处理
,设置溢出标志并产生中断,由系统软件或者干脆停机交程序员处理,因 为这时产生的
结果是完全错误的。举一个定点运算的例子:16位有符号数 的最大值是+32767(7FFFh),
如果再加1,得到的结果就是-32768(8000h)。
产生这一完全错误结果是由于最高位的进位破坏了符号位,因而彻底改变 了数值的性质
。这种运算方式称为“环绕式”(wraparound)运算,指一旦 计数超出范围,自动回到计
数零点,这是传统运算的处理方式。利用软件
可以检测这种异常,并给出正确的结果,但是要以降低程序的性能为代价。
在图象和图形处理中,用8位无符号数表示一个象素值或颜色分量值,最大 数255表
示亮度的最大值(最亮),如果运算结果超出这个范围,仍然表示为 “最亮”是符合实际
情况的。但是,如果溢出后变为全0或很小的数值,图
象显示就变成了黑色或灰色,与实际情况完全不符。因此,在这种情况下 采用“饱和式
”(saturation)运算方式,当达到最大值时不再增加,而是 保持在这个最大值。
饱和式运算方式反映的是图象/图形处理的实际情况,同时也减少了由于溢 出判断、
处理所进行的内部操作,加快了速度。在MMX技术中,饱和运算不 是一种特殊的操作模式
,也不用设置寄存器,它是某些指令操作码的一部
分,而且只是加、减指令才有饱和方式。例如,在饱和方式下,对于8位有 符号数,上溢
和下溢分别置成7Fh和80h;8位无符号数置成FFh和00h。
3、扩充了57条新指令
听起来有57条指令,似乎很难掌握。稍加分析,只是几种基本操作对不同 数据类型
和运算方式(饱和/环绕)的组合。分类以后是不难掌握的。
算术运算指令:加、减、乘、乘加,共4种17条;
逻辑运算指令:与、或、非、异或,共4种4条;
移位指令:逻辑左移、逻辑右移、算术右移,共3种16条;
比较指令:等于比较、大于比较,共2种6条;
数据类型转换指令:8位到16位、16位到32位、32位到64位等,共9条;
数据传送指令(MOV):4条;
状态控制指令(EMMS):1条。
其中加减指令各有7条,是最多的一种。包括8位、16位和32位的环绕式
加、减法;8位、16位有符号饱和式加、减法;8位、16位无符号饱和式
加、减法。
MMX指令的特点是只参与数据流的操作,而不参与程序控制的任何操作。 这样虽然是
简化了指令,但是也对程序设计带来很大的不便。
※ 修改:.coala 於 Oct 17 14:19:23 修改本文.[FROM: 166.111.5.1]
--
※ 修改:.fib 於 Aug 27 13:27:15 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.南京大学小百合 bbs.nju.edu.cn.[FROM: bbs.hit.edu.cn]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: fib.bbs@bbs.nju.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.286毫秒