从浮点运算部件FPU到多媒体处理技术MMX
作者:卢怀山 石建斌
单位:卢怀山 广西中医学院教育技术中心(南宁 530001);石建斌 广西直属机关干部业余大学(南宁 530012)
关键词:浮点运算部件;多媒体处理技术;计算机应用
广西中医学院学报990216 摘 要 简要的介绍了源于浮点运算部件(Floating Point Unit,FPU)的多媒体处理技术(Microprocessor Media Extension,mmx),提出用FPU的指令来部分的模拟实现MMX技术的设想。
中图分类号 TP37
1 FPU简介
Intel体系结构的中央处理器CPU是8x86系列,而8x87是浮点数值运算协处理器。早期的8x86与8x87是分开封装的,从486开始,87与86封装在一起,87成为了86中的浮点运算部件FPU。CPU和FPU具有各自专门的功能部件和寄存器组。CPU控制整个程序的执行,而FPU作为协处理器,识别和执行浮点数值操作。
, 百拇医药
1.1 FPU的内部结构
主要由8个80位的专用数据寄存器组成一个可寻址的闭环型堆栈。各种类型的数据进入FPU后都被自动转换成80位的暂存实数的格式存放并用于计算。
1.2 FPU的数据类型
有8位字节、16位字、32位双字、64位四字长等定点整数,32位短实数、64位长实数、80位的暂存实数等浮点数,18位的装配十进制数等8种数据类型。
我们注意到就是在早期的Intel体系结构中,当8088/8086仅能处理8位和16位数据时,8087就能够处理直到64位的复杂得多的数据类型,以及在8087寄存器与内存之间传送直到80位的数据类型。这些特点对多媒体处理技术MMX的引入很重要。
1.3 FPU的指令
, 百拇医药
①数据传送指令,这些指令在FPU和存储器之间,以及FPU内部寄存器之间传送数据。②算术运算指令,包括加减乘除,平方根,绝对值等。③超越函数指令,具有计算指数,对数,三角函数等功能。④常数指令、比较指令、处理器控制指令等。
为了控制程序的流程,其中一些指令还把FPU的比较指令和CPU的跳转指令连接在一起。
1.4 FPU与CPU的同步工作。
FPU的指令与CPU的指令共存于同一指令流中。CPU从存储器取得所有指令。FPU的总线跟踪和控制逻辑部件通过监视CPU发出的总线周期状态信号及队列状态信号,确定CPU是否取指,当CPU执行取指周期时,FPU同时取入指令操作码,存放在指令队列缓冲器中。
FPU的16位指令操作码中的高5位总是11011,这也是CPU的ESC(交权)指令。当FPU检测到CPU取指时,查看队列字节的高位是否为11011,若是,FPU就把指令操作码的低11位送入指令指示器,接过控制,同时译码执行指令规定的操作。
, http://www.100md.com
FPU在执行指令时,输出高电平的BUSY忙信号,指令执行结束后恢复低电平,交出控制。同时CPU执行WAIT等待指令,每隔5个时钟周期测试一次FPU。在FPU工作期间,CPU继续执行WAIT指令。FPU指令执行结束后,CPU脱离等待状态,转为运行CPU指令。由此可见。CPU和FPU并行且同步地工作。CPU管理系统的运行,FPU执行浮点运算指令。
2 MMX技术简介
2.1 多媒体应用软件运算的共性
Intel通过大量的分析,发现许多多媒体应用软件(包括图形,图象处理,视频压缩,音乐合成,语音识别,游戏等)的运算过程存在着一些共同的基本特征:小整型数据(例如8位图象像素,16位音频样本);短小而高度重复的循环(例如DCT和FFT);频繁的乘和累加(例如FIR滤波和矩阵运算);高度并行的操作(例如图象处理);计算密集型的算法,即代码量不大而占用的运行时间较多(例如三维图形和视频压缩)。
, 百拇医药
2.2 MMX技术的组成
针对这些共同的基本特征,Intel提出一套与原浮点硬件体系结构兼容的新的整数指令,可简便地应用于各种多媒体和通信软件中,这就是MMX技术。
2.2.1 单指令多数据流技术(SIMD)
SIMD技术是MMX的基础,它让一条指令同时并行地处理多个数据,从而加速软件的运行速度。
2.2.2 4种新的紧缩型数据类型
MMX指令集中引入新的主要数据类型为紧缩型定点整数,将多个小整型数据合并成一个64位长的数。这样处理一个64位的数就相当于并行的处理多个小整型数,即SIMD的具体实现。四种MMX数据类型为:1)紧缩型字节—8个8位的字节被紧缩成一个64位的数,其中各字节相互独立;2)紧缩型字—4个16位的字被紧缩成一个64位的数,其中各字相互独立;3)紧缩型双字—2个32位的双字被紧缩成一个64位的数,其中各双字相互独立;4)4字—1个64位的非紧缩型的数。这64位长的紧缩型数据,是由若干个相互独立的小整数型数据合并而成,不能看成为一个完整的连续的64位数。这四种类型的数据长都为64位,在运算时被移入64位的MMX寄存器中处理。
, 百拇医药
在目前的多媒体,通信等应用程序中均含有能够对短数据类型实现循环操作的复杂算法,而MMX指令可并行地对多个紧缩在64位MMX寄存器中的不同类型短整型数据进行算术运算或逻辑运算。例如,图象像素通常以8位字节表示,在MMX中,8个像素被紧缩成一个64位数,并移进64位的MMX寄存器中。MMX指令执行时,一次就可对MMX寄存器中紧缩的8个像素字节进行算术或逻辑的并行操作。这些MMX指令通过采用密集计算算法,对一段数据进行并行的局部化的循环操作,从而简化算法,增强应用程序的性能。几乎所有依靠重复和循环方式对小整数数据进行的应用都能从MMX技术中获益。
2.2.3 8个64位MMX寄存器
而8个MMX寄存器利用的就是FPU浮点运算部件中的8个数据寄存器中的低64位,这真是创造性的利用。没有另外的增加硬件寄存器,保持了与Intel体系中的FPU浮点运算部件向下兼容,使得MMX技术在现有的Intel体系结构中就能够实现。这是MMX技术中最可取之处。MMX技术和Intel体系结构的处理器结合在一起,保持了和现有许多操作系统的完全兼容,如MS—DOS,Windows,OS/2,UNIX等。Intel体系结构下的软件都可以运行在带有MMX技术的系统中。
, http://www.100md.com
2.2.4 57个新的高效MMX指令
由于MMX技术处理的是由几个并行紧缩型数据组合成的一个64位数,因此在MMX运算中,例如算术运算,比较运算,逻辑运算和移位运算等,都是对应的紧缩型数据独立于其他的数据并行进行运算,互相不能影响,也不能简单的当成一个整体的连续的64位数来对待。所以在运算过程中就要注意解决紧缩型数据之间的边界越界问题,因此产生了绕转及饱和这新的MMX运算原则。
绕转运算:例如带绕转的无符号紧缩型字相加,虽然是64位的紧缩数相加,但是每个紧缩数是由4个独立的16位小整型紧缩型字组成,所以其中每个对应的16位紧缩型字的加法都要独立于其他的加法并行进行。紧缩型字的边界之间不能产生进位或借位,其中每个字边界之间的进位或借位被丢掉,称之为绕转。这样就保证了64位数内4个独立的16位字数据之间的正常并行运算。
饱和运算:例如带饱和的无符号紧缩型字相加减,当产生一个越界的结果时,边界之间的进位或借位被丢掉,且上溢时本紧缩型字取最大的可表示值为FFFFH,下溢时本紧缩型字取最小的可表示值为0000H,即其值被饱和了。饱和运算对像素运算来说很重要,避免了绕转运算带来的使一个黑(白)像素突然变成白(黑)像素的可能。而对带符号的16位字而言,最大和最小的饱和值为7FFFH和8000H。
, http://www.100md.com
MMX指令中还特别增加了脱胎于DSP的关键的乘和累加指令,能够一次处理4个16位字的4次乘法和2次加法(A3B3+A2B2+A1B1+A0B0)。对许多信号处理算法来说,如向量点积,矩阵相乘,FIR和IIR滤波,FFT,DCT等,该指令十分重要而有效。
可见,利用MMX技术进行多媒体应用的并行计算比不用MMX技术要节省不少指令和运行时间。
3 小结
目前,实时连续地处理声音和影象等媒体信息可有三条途径:一是用专用的数字信号处理器(DigitalSignalProcessor,DSP)处理;二是利用超大规模现场可编程门阵列(FPGA)逻辑集成电路半定制专用处理器件个别对待;三是用通用的CPU编程处理。MMX技术的运用,虽然没有对8x86系列的CPU的硬件结构作根本性的改变,但却使得用CPU处理多媒体的能力大大加强,提高了通用CPU对DSP,FPGA的竞争能力和垄断地位。
, http://www.100md.com
通过FPU和MMX的对比分析,提示我们能不能在没有MMX指令的FPU中用FPU的指令来部分的模拟实现MMX技术呢?答案应该是肯定的:数据传送有现成的FPU传送指令可以代替;只是要注意用尽可能少的FPU指令解决将多个小整型数据紧缩成一个FPU数据,和算术运算时的FPU数据寄存器中小整型紧缩数据的边界越界问题。
参考文献
1 张福炎.微型计算机IBMPC的原理与应用(续篇).南京:南京大学出版社,1985.9
2 吴乐南.PC平台新技术MMX—开发编程指南.南京:东南大学出版社,1997.10
收稿日期:1999-01-13, http://www.100md.com
单位:卢怀山 广西中医学院教育技术中心(南宁 530001);石建斌 广西直属机关干部业余大学(南宁 530012)
关键词:浮点运算部件;多媒体处理技术;计算机应用
广西中医学院学报990216 摘 要 简要的介绍了源于浮点运算部件(Floating Point Unit,FPU)的多媒体处理技术(Microprocessor Media Extension,mmx),提出用FPU的指令来部分的模拟实现MMX技术的设想。
中图分类号 TP37
1 FPU简介
Intel体系结构的中央处理器CPU是8x86系列,而8x87是浮点数值运算协处理器。早期的8x86与8x87是分开封装的,从486开始,87与86封装在一起,87成为了86中的浮点运算部件FPU。CPU和FPU具有各自专门的功能部件和寄存器组。CPU控制整个程序的执行,而FPU作为协处理器,识别和执行浮点数值操作。
, 百拇医药
1.1 FPU的内部结构
主要由8个80位的专用数据寄存器组成一个可寻址的闭环型堆栈。各种类型的数据进入FPU后都被自动转换成80位的暂存实数的格式存放并用于计算。
1.2 FPU的数据类型
有8位字节、16位字、32位双字、64位四字长等定点整数,32位短实数、64位长实数、80位的暂存实数等浮点数,18位的装配十进制数等8种数据类型。
我们注意到就是在早期的Intel体系结构中,当8088/8086仅能处理8位和16位数据时,8087就能够处理直到64位的复杂得多的数据类型,以及在8087寄存器与内存之间传送直到80位的数据类型。这些特点对多媒体处理技术MMX的引入很重要。
1.3 FPU的指令
, 百拇医药
①数据传送指令,这些指令在FPU和存储器之间,以及FPU内部寄存器之间传送数据。②算术运算指令,包括加减乘除,平方根,绝对值等。③超越函数指令,具有计算指数,对数,三角函数等功能。④常数指令、比较指令、处理器控制指令等。
为了控制程序的流程,其中一些指令还把FPU的比较指令和CPU的跳转指令连接在一起。
1.4 FPU与CPU的同步工作。
FPU的指令与CPU的指令共存于同一指令流中。CPU从存储器取得所有指令。FPU的总线跟踪和控制逻辑部件通过监视CPU发出的总线周期状态信号及队列状态信号,确定CPU是否取指,当CPU执行取指周期时,FPU同时取入指令操作码,存放在指令队列缓冲器中。
FPU的16位指令操作码中的高5位总是11011,这也是CPU的ESC(交权)指令。当FPU检测到CPU取指时,查看队列字节的高位是否为11011,若是,FPU就把指令操作码的低11位送入指令指示器,接过控制,同时译码执行指令规定的操作。
, http://www.100md.com
FPU在执行指令时,输出高电平的BUSY忙信号,指令执行结束后恢复低电平,交出控制。同时CPU执行WAIT等待指令,每隔5个时钟周期测试一次FPU。在FPU工作期间,CPU继续执行WAIT指令。FPU指令执行结束后,CPU脱离等待状态,转为运行CPU指令。由此可见。CPU和FPU并行且同步地工作。CPU管理系统的运行,FPU执行浮点运算指令。
2 MMX技术简介
2.1 多媒体应用软件运算的共性
Intel通过大量的分析,发现许多多媒体应用软件(包括图形,图象处理,视频压缩,音乐合成,语音识别,游戏等)的运算过程存在着一些共同的基本特征:小整型数据(例如8位图象像素,16位音频样本);短小而高度重复的循环(例如DCT和FFT);频繁的乘和累加(例如FIR滤波和矩阵运算);高度并行的操作(例如图象处理);计算密集型的算法,即代码量不大而占用的运行时间较多(例如三维图形和视频压缩)。
, 百拇医药
2.2 MMX技术的组成
针对这些共同的基本特征,Intel提出一套与原浮点硬件体系结构兼容的新的整数指令,可简便地应用于各种多媒体和通信软件中,这就是MMX技术。
2.2.1 单指令多数据流技术(SIMD)
SIMD技术是MMX的基础,它让一条指令同时并行地处理多个数据,从而加速软件的运行速度。
2.2.2 4种新的紧缩型数据类型
MMX指令集中引入新的主要数据类型为紧缩型定点整数,将多个小整型数据合并成一个64位长的数。这样处理一个64位的数就相当于并行的处理多个小整型数,即SIMD的具体实现。四种MMX数据类型为:1)紧缩型字节—8个8位的字节被紧缩成一个64位的数,其中各字节相互独立;2)紧缩型字—4个16位的字被紧缩成一个64位的数,其中各字相互独立;3)紧缩型双字—2个32位的双字被紧缩成一个64位的数,其中各双字相互独立;4)4字—1个64位的非紧缩型的数。这64位长的紧缩型数据,是由若干个相互独立的小整数型数据合并而成,不能看成为一个完整的连续的64位数。这四种类型的数据长都为64位,在运算时被移入64位的MMX寄存器中处理。
, 百拇医药
在目前的多媒体,通信等应用程序中均含有能够对短数据类型实现循环操作的复杂算法,而MMX指令可并行地对多个紧缩在64位MMX寄存器中的不同类型短整型数据进行算术运算或逻辑运算。例如,图象像素通常以8位字节表示,在MMX中,8个像素被紧缩成一个64位数,并移进64位的MMX寄存器中。MMX指令执行时,一次就可对MMX寄存器中紧缩的8个像素字节进行算术或逻辑的并行操作。这些MMX指令通过采用密集计算算法,对一段数据进行并行的局部化的循环操作,从而简化算法,增强应用程序的性能。几乎所有依靠重复和循环方式对小整数数据进行的应用都能从MMX技术中获益。
2.2.3 8个64位MMX寄存器
而8个MMX寄存器利用的就是FPU浮点运算部件中的8个数据寄存器中的低64位,这真是创造性的利用。没有另外的增加硬件寄存器,保持了与Intel体系中的FPU浮点运算部件向下兼容,使得MMX技术在现有的Intel体系结构中就能够实现。这是MMX技术中最可取之处。MMX技术和Intel体系结构的处理器结合在一起,保持了和现有许多操作系统的完全兼容,如MS—DOS,Windows,OS/2,UNIX等。Intel体系结构下的软件都可以运行在带有MMX技术的系统中。
, http://www.100md.com
2.2.4 57个新的高效MMX指令
由于MMX技术处理的是由几个并行紧缩型数据组合成的一个64位数,因此在MMX运算中,例如算术运算,比较运算,逻辑运算和移位运算等,都是对应的紧缩型数据独立于其他的数据并行进行运算,互相不能影响,也不能简单的当成一个整体的连续的64位数来对待。所以在运算过程中就要注意解决紧缩型数据之间的边界越界问题,因此产生了绕转及饱和这新的MMX运算原则。
绕转运算:例如带绕转的无符号紧缩型字相加,虽然是64位的紧缩数相加,但是每个紧缩数是由4个独立的16位小整型紧缩型字组成,所以其中每个对应的16位紧缩型字的加法都要独立于其他的加法并行进行。紧缩型字的边界之间不能产生进位或借位,其中每个字边界之间的进位或借位被丢掉,称之为绕转。这样就保证了64位数内4个独立的16位字数据之间的正常并行运算。
饱和运算:例如带饱和的无符号紧缩型字相加减,当产生一个越界的结果时,边界之间的进位或借位被丢掉,且上溢时本紧缩型字取最大的可表示值为FFFFH,下溢时本紧缩型字取最小的可表示值为0000H,即其值被饱和了。饱和运算对像素运算来说很重要,避免了绕转运算带来的使一个黑(白)像素突然变成白(黑)像素的可能。而对带符号的16位字而言,最大和最小的饱和值为7FFFH和8000H。
, http://www.100md.com
MMX指令中还特别增加了脱胎于DSP的关键的乘和累加指令,能够一次处理4个16位字的4次乘法和2次加法(A3B3+A2B2+A1B1+A0B0)。对许多信号处理算法来说,如向量点积,矩阵相乘,FIR和IIR滤波,FFT,DCT等,该指令十分重要而有效。
可见,利用MMX技术进行多媒体应用的并行计算比不用MMX技术要节省不少指令和运行时间。
3 小结
目前,实时连续地处理声音和影象等媒体信息可有三条途径:一是用专用的数字信号处理器(DigitalSignalProcessor,DSP)处理;二是利用超大规模现场可编程门阵列(FPGA)逻辑集成电路半定制专用处理器件个别对待;三是用通用的CPU编程处理。MMX技术的运用,虽然没有对8x86系列的CPU的硬件结构作根本性的改变,但却使得用CPU处理多媒体的能力大大加强,提高了通用CPU对DSP,FPGA的竞争能力和垄断地位。
, http://www.100md.com
通过FPU和MMX的对比分析,提示我们能不能在没有MMX指令的FPU中用FPU的指令来部分的模拟实现MMX技术呢?答案应该是肯定的:数据传送有现成的FPU传送指令可以代替;只是要注意用尽可能少的FPU指令解决将多个小整型数据紧缩成一个FPU数据,和算术运算时的FPU数据寄存器中小整型紧缩数据的边界越界问题。
参考文献
1 张福炎.微型计算机IBMPC的原理与应用(续篇).南京:南京大学出版社,1985.9
2 吴乐南.PC平台新技术MMX—开发编程指南.南京:东南大学出版社,1997.10
收稿日期:1999-01-13, http://www.100md.com