图1是一组根据现有技术的MMXTM寄存器的示意图;
图2是存储图像数据的8象素乘8象素块的该组MMXTM寄存器的示
意图;
图3是存储图像数据转置的8象素乘8象素块的该组MMXTM寄存器
的示意图;
图4是根据本发明的一个实施例连接到MMXTM寄存器组的一个虚拟
MMXTM寄存器组的示意图;
图5是存储图像数据转置的8象素乘8象素块的虚拟MMXTM寄存器
组的示意图;
图6是一个系统的示意图,该系统具有一个处理器,它具有按照
本发明的一个MMXTM寄存器组和一个虚拟MMXTM寄存器组的示意图。
发明详述
本发明的一个实施例包括一种为扩展MMXTM寄存器为用于2维
(2-D)数组运算更加有效的方法和装置。
说明书中对本发明的“一个实施例”的参考意味着结合该实施例
说明的一种特定的特征、结构或特性至少被包含在本发明的一个实施
例中。这样,在本说明书中不同地方出现的短语“在一个实施例中”
不一定所有都指同一个实施例。
当执行一个指令时,一个处理器通常引用一个或多个寄存器操作
数。对于MMXTM指令,寄存器操作数可以是称为MMXTM寄存器的一组或
多组特殊的寄存器。图1是一组根据现有技术的MMXTM寄存器的示意图。
在图1所示的寄存器组10中,有8个MMXTM寄存器,标以mm012到mm7
14。在其它实施例中,寄存器的数目可以多于或少于8个。每一寄存
器包括多个数据单元,从所示低单元16到高单元18排序。在一个实
施例中,一个单元包括一个字节。在其它实施例中,一个单元可以包
括一个字、一个双字、或其它存储单元。在至少一个已知系统中,每
个MMXTM寄存器的单元数目(例如字节)是8,虽然在其它系统中可以
使用其它单元数目。为使用MMXTM寄存器有效实现SIMD多媒体处理,
要被处理的数据应该这样排列,使得多个相关的数据项排列在单一
MMXTM寄存器中。例如,假定一个8象素乘8象素的图像数据块在MMXTM
寄存器中如图2所示排列,每一象素值P(i,j)表示一个单元,总寄
存器组表示一个数组。8象素乘8象素块可以是一个较大图像的一部
分。在该例中,该图像数据块的第一行存储在第一MMXTM寄存器mm0 12
中,第一行的第一列存储在mm0的低单元中,第一行的最后一列存储
在mm0的高单元中,图像数据的第二行存储在第二MMXTM寄存器mm1 20
中,该第二行的第一列存储在mm1的低单元中,第二行的最后一列存
储在mm1的高单元中,等等。
一旦数据如所示存储在MMXTM寄存器中,则处理器可以执行指令,
每次一行有效操作该8×8数组。这一类型处理通常例如用于基于块
的图像应用和其它应用中。例如,行0的所有数据可以使用单一MMXTM
指令加到行3的数据上,如下所示。
PADDB MM0,MM3;把行0加到行3上并把结果存储到行0中。
然而,为一次一列操作8×8数组会出现问题,因为每一列的数
据分布在8个MMXTM寄存器中间。例如,第一列的数据分别分布在mm0 12
到mm7 14的低单元中间,最后一列数据分布在mm0到mm7的高单元
中间。为继续增加使用MMXTM SIMD处理的好处,必须如图3所示转置
8×8数组。数组转置在数学中公知。在转置后,第一MMXTM寄存器mm0
12存储数据原来的第一列,原来第一列的第一行存储在低单元16中,
原来第一列的最后一列存储在高单元18中,如图所示。相似地,其它
MMXTM寄存器如所示存储8×8数组的列。
虽然8×8数组的转置可以使用公知的打包和解包指令执行,但
是这一处理效率很低并且引起相当高的处理开销。一般,对于一个8×
8数组的转置处理通过执行4×4数组的转置实现,每一转置对
PentiumIII处理器需要至少12个处理周期。这样,仅为转置该数
据至少使用64个周期,以便可以使用一个MMXTM指令来操作一个给定
列的8个元素。
本发明的实施例通过在处理器中提供另一组寄存器帮助多媒体处
理通过一系列打包和解包指令克服了转置MMXTM寄存器中数据的需要。
在本发明的实施例中,在处理器结构中设计一个等价的“镜像”MMXTM
寄存器组。该寄存器组可以叫作虚拟MMXTM寄存器组,或VMX组。图4
是根据本发明的一个实施例连接到MMXTM寄存器的虚拟MMXTM寄存器组
的示意图。在一个实施例中,在MMXTM寄存器组10中的MMXTM寄存器的
数目和在VMX寄存器组22中提供的VMX寄存器的数目相同。另外,在
一个实施例中,VMX寄存器的数目大于或等于在每一寄存器中的单元
数目(取决于实现,单元是字节,字,双字,或其它存储单元)。VMX
寄存器组22存储来自MMXTM寄存器组中的转置的数组数据并当MMXTM寄
存器组中的任何寄存器的任何单元被更新时通过寄存器更新逻辑23可
以自动地更新。因此,MMXTM寄存器组10的一行的加载自动导致VMX
寄存器组22的一列加载。例如,来自第一MMXTM寄存器mm0 12的数据
可以自动地存储在VMX寄存器VM0到VM7的低单元中,来自第二MMXTM
寄存器mm1 20的数据可以自动地存储在VMX寄存器的次最低单元中,
等等。
回过来看图2,如果MMXTM寄存器用一个用图示P0,0到P7,7指
示的8×8数组加载的话,则VMX寄存器可以由寄存器更新逻辑用转
置的数组自动加载,如图5所示。为操作该数组的行元素,一个程序
可以简单地引用一个或多个MMXTM寄存器nm0 12到nm7 14。然而,为
操作该数组的列元素,一个程序可以代之以引用VMX寄存器vm0 24到
vm7 26。因为MMXTM寄存器在处理器硬件中用VMX寄存器镜像,因此没
有一致性问题。所有MMXTM指令都可以用任何一个寄存器组通过使用对
所需要的适合的寄存器的引用来操作。不需对处理器的指令集进行改
变,只有操作数引用可能在程序中改变。
本发明的实施例对现有处理器结构的一个优点是本发明为数组操
作提供更大的平行性。这通过执行多个打包和解包指令避免了为列操
作进行的费用大的转置而实现。
怎样使用本发明的一个例子是在许多视频处理方案中为处理8象
素乘8象素块使用的离散余弦变换(DCT)。当前,为执行8×8 DCT
时,处理包括首先执行一个1×8的列变换,转置8×8数组,执行
另一个1×8列变换,然后再次转置该结果以得到DCT系数。当前在
Pentium类处理器上运行的最优化的DCT需要大约300个周期的处
理。在这一数量中,大约100个周期用于执行为8×8数组的转置操
作。这样,本发明的实现为DCT处理产生大约30%的改善。对逆DCT
可以实现相似的性能增益。虽然这里讨论的是DCT的例子,但是本发
明的实施例可以对任何数组操作都有用,包括在各种图像和视频压缩
算法中使用的那些。
虽然上面在2维(2-D)数组的意义上讨论本发明,但是该概念可
以适用于3维或更多维。例如,可以在处理器的设计中包括一个第三
寄存器组来存储数组数据的其它转置。
图6是包括具有按照本发明的实施例的MMXTM寄存器组和虚拟MMXTM
寄存器组的处理器的系统的示意图。系统50可以包括连接到存储器54
的处理器52。处理器52包括在该技术中公知的各种部件,为清楚起
见其中许多在图6中省略。指令存储器56存储可以引用一个或者多个
MMXTM寄存器10或一个或多个VMX寄存器22的指令。当MMXTM寄存器
改变时寄存器更新逻辑23协调自动更新VMX寄存器22。多路转接器
(MUX)58从MMXTM寄存器或VMX寄存器中的一个为给算术逻辑单元
(ALU)60的输入选择数据。ALU产生为数据存储器52的数据。
本发明允许以更直觉的方式操作MMXTM寄存器。通过增加镜像寄
存器组,可以简化任何基于块的算法的实现,并且它们的性能增加。
可以从本发明得到好处的一些应用例子包括用于视频压缩算法的离散
余弦变换(DCT),3维(3-D)图形算法中的数组变换,及其它。
虽然本发明参考图示实施例说明,但是该说明并不打算被解释为
限制的意义。对熟悉本发明所属技术领域的人明显的对图示实施例以
及本发明的其它实施例的各种修改都被视为在本发明的精神和范围之
内。