混洗数据的方法和装置的制作方法

文档序号:6487334阅读:279来源:国知局
专利名称:混洗数据的方法和装置的制作方法
技术领域
本发明一般涉及微处理器和计算机系统领域。本发明尤其涉及用于混洗数据的方法和装置。
背景技术
计算机系统已在当今社会中变得日益普遍。在许多职业中,计算机的处理能力提升了工人的效率和产量。随着购买和拥有计算机的成本持续下降,越来越多的消费者能利用更新、更快的机器。此外,许多人因为很自由而乐于使用笔记本计算机。移动计算机允许用户在离开办公室或旅行时方便地随他们一起携带数据和工作。这种情况是营销人员、公司职员以及甚至学生们所熟悉的。
随着处理器技术的进步,还产生了更新的软件代码以便在具有这些处理器的机器上运行。用户通常期望和需要他们计算机的更高的性能,而不管使用的软件类型。一个这种问题会由于处理器内实际执行的指令和操作的种类而产生。基于所需的操作复杂性和/或电路类型,某些类型的操作需要更长的时间来完成。这提供了优化某些复杂操作在处理器内部执行的方式的机会。
在超过10年的时间里,媒体应用驱动着微处理器的发展。事实上,近些年的多数计算升级都是由媒体应用驱动的。这些升级主要出现于消费者方面,尽管在用于娱乐增强教育和通信用途的企业方面也看到了显著的进步。然而,未来的媒体应用将需要更高的计算要求。结果,明天的个人计算体验在视听效果方面将更加丰富且更易于使用,更重要地是计算将与通信合并在一起。
因此,图像显示以及统称为内容的音频和视频数据的回放已变成当前计算装置的日益流行的应用。过滤和卷积操作是对诸如图像音频和视频数据的内容数据执行的最普通操作中的一些。这些操作是计算密集的,但用诸如单指令多数据(SIMD)寄存器的各种数据存储装置提供可通过有效实现加以利用的高水平的数据并行。许多当前架构还需要不必要的数据类型变化,他们最小化指令处理量并显著增加排序用于算术操作的数据所需的时钟周期数。


附图中作为示例而非限制地说明本发明,其中相同标号表示相似的元件,其中图1A是根据本发明一实施例的由包含执行用于混洗数据的指令的执行单元的处理器形成的计算机系统的框图;图1B是根据本发明可选实施例的另一示例性计算机系统的框图;图1C是根据本发明另一可选实施例的又一示例性计算机系统的框图;图2是根据本发明的包括执行数据混洗操作的逻辑电路的一实施例的处理器的微架构的框图;图3A-C示出了根据本发明各实施例的混洗掩码;图4A示出了根据本发明一实施例的多媒体寄存器中的各种紧缩数据类型表示;图4B示出了根据一可选实施例的紧缩数据类型;图4C示出了用于混洗指令的操作编码(操作码)格式的一实施例;图4D示出了可选的操作编码格式;图4E示出了另一可选的操作编码格式;图5是根据本发明的基于混洗掩码对数据操作数进行混洗操作的逻辑的一实施例的框图;图6是根据本发明的用于进行数据混洗操作的电路的一实施例的框图;
图7示出了根据本发明一实施例的对字节宽数据元素的数据混洗操作;图8示出了根据本发明另一实施例的对字宽数据元素的数据混洗操作的操作;图9是示出混洗数据的方法的一实施例的流程图;图10A-H示出了使用SIMD指令的并行表查找算法的操作;图11是示出了使用SIMD指令进行表查找的方法的一实施例的流程图;图12是示出执行表查找的方法的另一实施例的流程图;图13A-C示出了多个寄存器之间重新排列数据的算法;图14是示出多个寄存器之间重新排列数据的方法的一实施例的流程图;图15A-K示出了用于在多个寄存器之间混洗数据以生成交错数据的算法;以及图16是示出用于在多个寄存器之间混洗数据以生成交错数据的方法的一实施例的流程图。
具体实施例方式
揭示了混洗数据的方法和装置。还描述了用于使用SIMD指令进行并行表查找的方法和装置。还揭示了用于在多个寄存器之间重新排列数据的方法和装置。这里所述的实施例在微处理器的环境中进行描述,但不限于此。虽然参考处理器描述了以下实施例,但其它实施例也可应用于其它类型的集成电路和逻辑装置。本发明的相同技术和教导可方便地应用于其它类型的电路或半导体装置,它们也可从较高的管道处理量和改进性能中受益。本发明的教导可应用于执行数据处理的任何处理器或机器。但,本发明不限于执行256比特、128比特、64比特、32比特或16比特数据操作的处理器或机器,而是可以应用于需要数据混洗的任何处理器和机器。
在以下描述中,为了说明目的阐述了许多特定细节,以便提供本发明的透彻理解。但,本领域的普通技术人员将理解,这些特定细节是实施本发明所非必要的。另一方面,对公知的电气结构和电路则不进行具体的细节说明,以使本发明更加清楚。此外,出于说明目的,以下描述提供了一些示例且附图示出了各种示例。但,这些示例不应被理解为是限制性的,因为它们仅旨在于提供本发明的示例而非提供本发明的所有可能实现的详尽列表。
在一实施例中,本发明的方法体现于机器可执行指令中。这些指令可用于使用这些指令编程的通用或专用处理器执行本发明的步骤。或者,本发明的步骤可由包含用于上述执行步骤的硬连线逻辑的专门的硬件组件或者编程的计算机组件和定制硬件组件的任何组合执行。
虽然以下示例描述了执行单元和逻辑电路环境下的指令处理和分发,但本发明的其它实施例可借助软件完成。本发明可作为包括存储了指令的机器或计算机可读媒介的计算机程序产品或软件提供,所述指令用于编程计算机(或其它电子装置)以执行根据本发明的过程。这种软件可存储在系统中的存储器内。类似地,代码可经由网络或借助其它计算机可读媒体分发。因此,机器可读媒介可包括用于以机器(例如,计算机)可读形式存储或发送信息的任何机制,但不限于,软盘、光盘、紧致盘、只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁或光卡、闪存、因特网上传输、电、光、声或其它形式的传播信号(例如,载波、红外线信号、数字信号等)等等。
因此,计算机可读媒介包括适于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的媒体/机器可读媒介。此外,本发明还可作为计算机程序产品下载。这样,程序可从远程计算机(例如,服务器)被传送到请求计算机(例如,客户机)。程序的传送可作为经由通信链接(例如,调制解调器、网络连接等)的载波或其它传播媒介中的电、光、声或其它形式的数据信号。
此外,根据本发明的集成电路设计的实施例可按电子形式作为磁带或其它机器可读媒体上的数据库进行通信或传送。例如,一实施例中处理器的集成电路设计的电子形式可经由工厂处理或制造以获得计算机组件。在另一实例中,电子形式的集成电路设计可由机器处理以模拟计算机组件。因此,一些实施例中的电路布局设计和/或处理器设计可经由机器可读媒体分配或包含于其上用于制成电路或用于集成电路的模拟,在由机器处理时模拟处理器。在其它实施例中,机器可读媒体还能存储表示根据本发明的预定功能的数据。
在现代处理器中,许多不同的执行单元被用于处理和执行各种代码和指令。不是所有的指令都被同等地创建,因为某些较快完成而另一些花费较多的时钟周期数。指令的处理越快,处理器的总体性能越好。因此,使许多指令尽可能快地执行是有利的。但是,存在某些较复杂且需要更多执行时间和处理器资源的指令。例如,有浮点指令、加载/存储操作、数据移动等。
由于越来越多的计算机系统用于因特网和多媒体应用中,随时间的流逝已引入附加的处理器支持。例如,单指令多数据(SIMD)整数/浮点指令和流SIMD扩展(SSE)是减少执行特殊程序任务所需的总指令数的指令。通过并行地对多个数据元素进行操作,这些指令能使软件执行加速。结果,可在较宽范围的应用中实现性能增益,包括视频、语音和图像/照片处理。微处理器和相似类型的逻辑电路中SIMD指令的实现通常涉及几个问题。此外,SIMD操作的复杂性常导致对附加电路的需要,以便正确地处理和操作数据。
本发明的一些实施例提供了一种方式来将具有排空到零能力的紧缩字节混洗指令作为利用SIMD相关硬件的算法实现。对于一个实施例,该算法基于根据每个数据元素位置的控制掩码值将数据从特殊寄存器或存储器位置混洗的概念。紧缩字节混洗的实施例可用于减少重排数据的许多不同应用中所需的指令数量。紧缩字节混洗指令还可用于具有非对准加载的任何应用。本混洗指令的实施例可用于过滤,以为有效的乘法-累积操作排列数据。类似地,紧缩混洗指令可用于视频和加密应用,用于排序数据和小查找表。该指令可用于混合来自两个或更多寄存器的数据。因此,根据本发明的具有排空到零能力算法的紧缩混洗的实施例可在处理器中实现以有效支持SIMD操作,而不会严重危害整体性能。
本发明的实施例提供了具有排空到零能力的紧缩数据混洗指令(PSHUFB),用于有效地排序和排列任何大小的数据。在一个实施例中,以字节间隔大小在寄存器中混洗或重排数据。在混洗操作期间通过维持较大数据内的字节的相对位置,字节混洗操作排序大于字节的数据大小。此外,字节混洗操作可改变SIMD寄存器中数据的相对位置并也可复制数据。该PSHUFB指令根据第二源寄存器中的混洗控制字节的内容混洗来自第一源寄存器的字节。虽然该指令置换数据,但在本实施例的该混洗操作期间保持混洗掩码不受影响并不受改变。用于该实现的记忆存储器是“PSHUFB寄存器1、寄存器2/存储器”,其中第一和第二操作数是SIMD寄存器。但,第二操作数的寄存器也可用存储器位置替换。第一操作数包括用于混洗的源数据。对于该实施例,用于第一操作数的寄存器也是目的地寄存器。除了改变它们的位置,根据本发明的实施例还包括将选定字节设定到零的能力。
第二操作数包括一组混洗控制掩码字节以指定混洗模式。用于选择源数据元素的比特数是源操作数中数据元素数量的log2。例如,在一个128比特寄存器实施例中的字节数是16。16的log2是4。因此,需要四个比特或四位字节。以下代码中的[3:0]指数表示4个比特。如果置位了混洗控制字节的最高有效比特(MSB),本实施例中的比特7,则将常数零写入结果字节。如果第二操作数的字节I的最低有效四位字节(掩码设置)包含整数J,则混洗指令使得第一源寄存器的第J个字节被复制到目的地寄存器的第I字节位置。以下是用于128比特操作数的紧缩字节混洗操作的一个实施例的示例性伪码For i=0 to 15{if(SRC2[(i*8)+7]==1)DEST[(i*8)+7…(i*8)+0]←0elseindex[3:0]←SRC2[(i*8)+3…SRC2(i*8)+0]DEST[(i*8)+7…(i*8)+0]←SRC1/DEST[(index*8+7)…(index*8+0)]}类似地,这是用于64比特操作数的紧缩字节混洗操作另一个实施例的示例性伪码For i=0 to 7{if(SRC2[(i*8)+7]==1)DEST[(i*8)+7…(i*8)+0]←0elseindex[2:0]←SRC2[(i*8)+2…SRC2(i*8)+0]DEST[(i*8)+7…(i*8)+0]←SRC1/DEST[(index*8+7)…(index*8+0)]}注意,该64比特寄存器实施例中,当64比特寄存器中存在8个字节时使用掩码的较低3比特。8的log2是3。以上代码中的[2:0]指数表示3个比特。在可选实施例中,掩码中的比特数可改变以符合源数据中可用的数据元素的数量。例如,需要具有较低5个比特的掩码来选择256比特寄存器中的数据元素。
当前,在SIMD寄存器中重排数据稍许困难和冗长。某些算法需要的用于排列用于算术操作的数据的指令超过了用于执行这些操作的指令的实际数量。通过实现根据本发明的紧缩字节混洗指令的实施例,实现数据重排所需的指令数量会急剧减少。例如,紧缩字节混洗指令的一个实施例可将一字节数据广播到128比特寄存器的所有位置。在寄存器中广播数据常在过滤应用中使用,其中单个数据项被乘以许多系数。在没有该指令的情况下,数据字节必须从其源中过滤并被移位到最低字节位置。随后,该单个字节必须首先作为字节被复制,随后这两个字节被再次复制以形成双字,且该双字被复制以最终形成四字。所有这些操作都可用单个紧缩混洗指令来替代。
类似地,诸如大endian和小endian格式之间变化的128比特寄存器中的所有字节的反转可用单个紧缩混洗指令方便地进行。然而如果不使用紧缩混洗指令,即使这些相当简单的模式也需要许多指令,复杂或随机模式需要甚至更低效的指令例程。对于SIMD寄存器中重排随机字节的最直接的正向解法是将它们写入缓冲器,随后使用整数字节读取/写入以便将它们重排并将它们读回SIMD寄存器。所有这些数据处理都需要冗长的代码序列,而单个紧缩混洗指令则足够了。通过减少所需的指令数量,大大地减少了生成相同结果所需的时钟周期数。本发明的实施例还使用混洗指令来用SIMD指令访问表中的多个值。甚至在表是寄存器大小的两倍的情况下,根据本发明的算法也允许以比如同整数操作的每个指令一数据元素更快的速率访问数据元素。
图1A是根据本发明一实施例的由处理器形成的示例性计算机系统的框图,该处理器包括执行单元以便执行用于混洗数据的指令。根据本发明,诸如这里所述的实施例中,系统100包括诸如处理器102的组件,用于利用包含逻辑的执行单元执行混洗数据的算法。系统100表示基于可从Intel Corporation of Santa Clara,California获得的PENTIUMIII,PENTIUM4,Celeron,XeonTM,Itanium,XScaleTM和/或StrongARMTM的微处理器的处理系统,尽管其它系统(包括具有其它微处理器的PC、工程工作站、置顶盒等)也可使用。在一个实施例中,样品系统100可执行可从Redmond,Washington的Microsoft Corporation获得的WINDOWTM操作系统的版本,尽管其它操作系统(例如,UNIX和Linux)、嵌入软件和/或图形用户界面也是可以使用的。因此,本发明不限于任何特殊的硬件电路和软件的组合。
本改进不限于计算机系统。本发明的可选实施例可用于其它装置中,诸如手持设备和嵌入应用。手持设备的某些示例包括蜂窝电话、因特网协议装置、数字照相机、个人数字助理(PDA)和手持PC。嵌入应用可包括微控制器、数字信号处理器(DSP)、单片系统、网络计算机(NetPC)、置顶盒、网络集线器、广域网(WAN)开关或对操作数进行整数混洗操作的任何其它系统。此外,实现某些架构以使指令能对数个数据同时进行操作,从而提升多媒体应用的效率。随着数据的类型和量的增加,计算机及其处理器必须得到提升以按更有效的方法操作数据。
图1A是用根据本发明的处理器102形成的计算机系统100的框图,处理器102包括用于执行数据混洗算法的一个或多个执行单元108。在单个处理器的台式或服务器系统的环境中描述本实施例,但可选实施例也可包含在多处理器系统中。系统100是集线器架构的示例。计算机系统100包括处理数据信号的处理器102。处理器102可以是复杂指令集计算机(CISC)微处理器,精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或诸如数字信号处理器的任何其它处理器装置。处理器102耦合到处理器总线110,它能在处理器102和系统100的其它组件之间传送数据信号。系统100的元件执行它们为本领域技术人员所熟知的常规功能。
在一个实施例中,处理器102包括一级(L1)内部高速缓存存储器104。根据该架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。或者,在另一实施例中,高速缓存存储器可位于处理器102外部。根据特殊实现和需要,其它实施例还可包括内部和外部高速缓存的组合。寄存器堆106可在各种寄存器中存储不同类型的数据,这些寄存器包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。
包括执行整数和浮点运算的逻辑的执行单元108也在处理器102中。处理器102还包括存储特定宏指令的微码的微码(ucode)ROM。对于这种实施例,执行单元108包括处理紧缩指令集109的逻辑。在一个实施例中,紧缩指令集109包括用于组织数据的紧缩混洗指令。通过在通用处理器102的指令集中包含紧缩指令集109连同执行这些指令的相关电路,可利用通用处理器102中的紧缩数据执行许多多媒体应用所使用的操作。因此,可通过将处理器数据总线的总宽度用于对紧缩数据进行操作而加速和更有效地执行许多多媒体应用。这能消除对在处理器的数据总线上传递较小单元数据以便每次对一个数据单元执行一个或多个操作的需要。
执行单元108的可选实施例也可用于微控制器、嵌入处理器、图形装置、DSP和其它类型的逻辑电路中。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)装置,静态随机存取存储器(SRAM)装置、闪存装置或其它存储器装置。存储器120可存储由可通过处理器102执行的数据信号表示的指令和/或数据。
系统逻辑芯片116耦合到处理器总线110和存储器120。所示实施例中的系统逻辑芯片116是存储器控制器集线器(MCH)。处理器102可经由处理器总线110与MCH116通信。MCH116将较高的带宽存储器路径118提供给存储器120,用于指令和数据存储并用于图形命令、数据和纹理的存储。MCH116在处理器102、存储器120和系统100中的其它组件之间引导数据信号并在处理器总线110、存储器120和系统I/O122之间桥接数据信号。在某些实施例中,系统逻辑芯片116可提供图形端口,用于耦合到图形控制器112。MCH116通过存储器接口118与存储器120耦合。图形卡112通过加速图形端口(AGP)互连114与MCH116耦合。
系统100使用专有集线器接口总线122将MCH116耦合到I/O控制器集线器(ICH)130。ICH130经由本地I/O总线提供到某些I/O装置的直接连接。本地I/O总线是用于将外围设备连接到存储器120、芯片组和处理器102的高速I/O总线。某些示例是音频控制器、固件集线器(快闪BIOS)128、无线收发器126、数据存储装置124、包含用户输入和键盘接口的传统I/O控制器、诸如通用串行总线(USB)的串行扩展端口以及网络控制器134。数据存储装置124可以包括硬盘驱动器、软盘驱动器、CD-ROM装置、闪存装置或其它海量存储装置。
对于系统的另一实施例,用混洗指令执行算法的执行单元可与单片系统一同使用。单片系统的一个实施例由处理器和存储器构成。一个这种系统的存储器是闪存。闪存可与处理器和其它系统组件位于同一管芯上。此外,诸如存储器控制器或图形控制器的其它逻辑块也可位于单片系统上、图1B示出了实现本发明原理的数据处理系统140的可选实施例。数据处理系统140的一个实施例是具有Intel XScaleTM技术的IntelPersonal Internet ClientArchitecture(IntelPCA)应用处理器(如developer.intel.com处所描述的)。本领域的熟练技术人员易于理解,这里所述的实施例可与可选处理系统一起使用而不背离本发明的范围。
计算机系统140包括能执行包括混洗的SIMD操作的处理核心159。对于一个实施例,处理核心159表示任何类型的架构的处理单元,包括但不限于CISC、RISC或VLIW型架构。处理核心159还适合于以一种或多种处理技术制造,并通过在及其可读媒体上充分详细地表示,适合于促进所述制造。
处理核心159包括执行单元142、一组寄存器堆145和解码器144。处理核心159还包括附加电路(未示出),这对于本发明的理解是非必要的。执行单元142用于执行处理核心159接收的指令。除了识别典型的处理器指令,执行单元142可识别用于执行对紧缩数据格式的操作的紧缩指令集143中的指令。紧缩指令集143包括用于支持混洗操作的指令,还可包括其它紧缩指令。执行单元142通过内部总线耦合到寄存器堆145。寄存器堆145表示用于存储信息(包括数据)的处理核心159上的存储区域。如前所述,可以理解,用于存储紧缩数据的存储区域是非关键的。执行单元142与解码器144耦合。解码器144用于将处理核心159接收的指令解码成控制信号和/或微码入口点。响应于这些控制信号和/或微码入口点,执行单元142执行合适的操作。
处理核心159与总线141耦合,以便与各种其它系统装置通信,包括但不限于同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、猝发闪存接口148、个人计算机存储器卡国际协会(PCMCIA)/紧致闪存(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器存取(DMA)控制器151和可选总线主接口152。在一个实施例中,数据处理系统140还可包括I/O桥路154,用于经由I/O总线153与各种I/O装置通信。这种I/O装置可包括但不限于,通用异步接收器/发送器(UART)155、通用串行总线(USB)156、蓝牙无线UART157和I/O扩展接口158。
数据处理系统140的一个实施例提供用于移动、网络和/或无线通信以及能执行包含混洗操作的SIMD操作的处理核心159。处理核心159可用包含离散变换、压缩/解压缩技术以及调制/解调(MODEM)函数的各种音频、视频、成像和通信算法编程,所述离散变换诸如Walsh-Hadamard变换、快速傅里叶变换(FFT)、离散余弦变换(DCT)和它们各自的逆变换;所述压缩/解压缩技术诸如色空间变换、视频编码运动估计或视频解码运动补偿;所述调制/解调函数诸如脉冲编码调制(PCM)。
图1C示出了能执行SIMD混洗操作的数据处理系统的又一个可选实施例。根据一个可选实施例,数据处理系统160可包括主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出系统168。输入/输出系统168可任选地耦合到无线接口169。SIMD协处理器161能执行包含数据混洗的SIMD操作。处理核心170能适合于以一种或多种处理技术制造,并通过在机器可读媒体上的充分详细的表示,适合于促进包含处理核心170的全部或部分数据处理系统160的制造。
对于一个实施例,SIMD协处理器161包括执行单元162和一组寄存器堆164。主处理器165的一个实施例包括用于识别包含由执行单元162执行的SIMD混洗指令的指令集163的指令的解码器165。对于可选实施例,SIMD协处理器161还包括解码指令集163的指令的至少部分解码器165B。处理核心170还包括对于本发明的理解非必要的附加电路(未示出)。
操作中,主处理器166执行数据处理指令流,它控制包括与高速缓存存储器167和输入/输出系统168的交互作用的普通型数据处理操作。SIMD协处理器指令被嵌入数据处理指令流内。主处理器166的解码器165识别作为应由附加的SIMD协处理器161执行的类型的这些SIMD协处理器指令。因此,主处理器166在协处理器总线166上发出这些SIMD协处理器指令(或者表示SIMD协处理器指令的控制信号),且它们由任何附加的SIMD协处理器接收。在这种情况中,SIMD协处理器161将接受和执行打算送给它的任何接收到的SIMD协处理器指令。
经由无线接口169接收用于由SIMD协处理器指令处理的数据。对于一个示例,语音通信可按数字信号形式接收,它可通过SIMD协处理器指令处理以再生表示语音通信的数字音频采样。对于另一示例,压缩的音频和/或视频可按数字比特流形式接收,它们通过SIMD协处理器指令处理以再生数字音频采样和/或运动视频帧。对于处理核心170的一个实施例,主处理器166和SIMD协处理器161被集成入包含执行单元162、一组寄存器堆164和用于识别包含SIMD混洗指令的指令集163的指令的解码器165的单个处理核心170。
图2是根据本发明的包含用于执行混洗操作的逻辑电路的一个实施例的处理器200微架构的框图。如同在以上的讨论中,混洗操作也可称作紧缩数据混洗操作和紧缩混洗指令。对于混洗指令的一个实施例,该指令可用字节颗粒度混洗紧缩数据。该指令还可称作PSHUFB或紧缩混洗字节。在其它实施例中,混洗指令也可被执行以对具有字、双字、四倍字等大小的数据元素进行操作。按次序的前端201是处理器200的一部分,它取出要执行的宏指令并在处理器管道中预备以后使用。该实施例的前端201包括数个单元。指令预取器226从存储器中取出宏指令并将它们馈送给指令解码器228,该指令解码器将宏指令解码成机器知道如何执行的称作微指令或微操作(也称作micro op或uops)的基元(primitives)。跟踪高速缓存230获得被解码的微操作并将它们组合成微操作队列234中的程序有序的序列或踪迹,用于执行。当跟踪高速缓存230遇到复杂的宏指令时,微码ROM232提供完成操作所需的微操作。
许多宏指令被转换成单个微操作,而其它宏指令需要数个微操作来完成全部操作。在该实施例中,如果需要超过4个微操作来完成一个宏指令,则解码器228访问微码ROM232来实施该宏指令。对于一个实施例,一个紧缩混洗指令可被解码成用于在指令解码器228处处理的较少数量的微操作。在另一实施例中,若需要一定数量的微操作来完成操作,则用于紧缩数据混洗算法的指令可存储在微码ROM232内。跟踪高速缓存230引用入口点可编程逻辑阵列(PLA)来确定正确的微指令指针,用于读取微码ROM232中用于混洗算法的微码序列。在微码ROM232为当前宏指令完成排序微操作后,机器的前端201继续从跟踪高速缓存230取出微操作。
某些SIMD和其它多媒体类型的指令被认为是复杂指令。多数浮点相关的指令也是复杂指令。这样,当指令解码器228遇到复杂宏指令时,在合适位置存取微码ROM232以检索用于该宏指令的微码序列。执行宏指令所需的各种微操作被传递给无序执行引擎203,用于在合适的整数和浮点执行单元处执行。
在无序执行引擎203处准备微指令用于执行。无序执行逻辑具有一些缓冲器,用于平滑和重排微指令流以便在它们沿管道下降和被调度用于执行时优化性能。分配器逻辑分配每个微操作执行所需的机器缓冲器和资源。寄存器重命名逻辑将逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器,快速调度器202,慢速/普通浮点调度器204,和简单浮点调度器206)前,分配器还为两个微操作队列(一个用于存储器操作,一个用于非存储器操作)之一中的每个微操作分配条目。微操作调度器202、204和206基于它们依赖的输入寄存器操作数源的预备状态以及微操作完成操作所需的执行资源的可用性来确定微操作何时准备执行。本实施例的快速调度器202可在每半个主时钟周期上进行调度,而其它调度器只能每个主处理器时钟周期调度一次。调度器对分派端口进行裁决,以调度用于执行的微操作。
寄存器堆208和210位于调度器202、204、206和执行块211中的执行单元212、214、216、218、220、222、224之间。存在分别用于整数和浮点运算的分开的寄存器堆208、210。本实施例中的每个寄存器堆208、210还包括旁路网络,它将未被写入寄存器堆的刚完成的结果旁路或传递到新依赖微操作。整数寄存器堆208和浮点寄存器堆210还能彼此通信数据。对于一个实施例,整数寄存器堆208被分成两个分开的寄存器堆,其中一个用于数据的低位32比特而另一个用于数据的高位32比特。由于浮点指令通常具有宽度从64到128比特的操作数,一个实施例的浮点寄存器堆210具有128比特宽的条目。
执行块211包含实际执行指令的执行单元212、214、216、218、220、222、224。该部分包括寄存器堆208、210,它们存储微指令执行所需的整数和浮点数据操作数值。本实施例的处理器200由一些执行单元构成地址生成单元(AGU)212、AGU214、快速ALU216、快速ALU218、慢速ALU220、浮点ALU222、浮点移动单元224。对于该实施例,浮点执行块222、224执行浮点、MMX、SIMD和SSE操作。本实施例的浮点ALU222包括浮点除法器,以执行除法、平方根和余数微操作。对于本发明的实施例,涉及浮点值的任何动作都随浮点硬件出现。例如,整数格式和浮点格式之间的转换涉及浮点寄存器堆。类似地,浮点除法运算发生于浮点除法器处。另一方面,用整数硬件资源处理非浮点数和整数类型。简单的非常频繁的ALU操作转到高速ALU执行单元216、218。该实施例的快速ALU216、218能以半个时钟周期的有效等待时间执行快速操作。对于一个实施例,多数复杂的整数操作转到慢速ALU220,因为慢速ALU220包括用于长等待时间类型操作的整数执行硬件,诸如乘法器、移位、标记逻辑和分支处理。存储器加载/存储操作由AGU212、214执行。对于该实施例,整数ALU216、218、220在对64比特数据操作数执行整数操作的环境下描述。在可选实施例中,可实现ALU216、218、220以支持包括16、32、128、256等的各种数据比特。类似地,可实现浮点单元222、224以支持具有各种宽度的比特的操作数范围。对于一个实施例,浮点单元222、224可联系SIMD和多媒体指令对128比特宽的紧缩数据操作数进行操作。
在该实施例中,在父加载完成执行前,微操作调度器202、204、206分派依赖性操作。在处理器200中推测性调度和执行微操作时,处理器200还包括处理存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则管道中可能有依赖性操作在飞行中(in flight),它们将暂时错误的数据留给调度器。重放机制跟踪并重新执行使用错误数据的指令。仅依赖性操作需要被重放并允许一些非依赖性的操作完成。处理器的一个实施例的调度器和重放机制还被设计成获取用于混洗操作的指令序列。
术语“寄存器”这里用于表示用作标识操作数的宏指令的一部分的板载处理器存储位置。换句话说,这里引用的寄存器是可从处理器外部看见的(从程序员的观点)。但,实施例的寄存器不应在意思上限制于特殊类型电路。相反,实施例的寄存器只需要能存储和提供数据,并执行这里所述的功能。这里描述的寄存器可利用任何数量的不同技术由处理器内的电路实现,诸如专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等等。在一个实施例中,整数寄存器存储32比特的整数数据。一个实施例的寄存器堆还包括用于紧缩数据的8个多媒体SIMD寄存器。对于以下的讨论,寄存器被理解为被设计保持紧缩数据的数据寄存器,诸如来自Santa Clara,California的Intel Corporation的具有MMX技术的微处理器中的64比特宽MMXTM寄存器(某些情况下也称作‘mm’寄存器)。在整数和浮点形式中可用的这些MMX寄存器可与附随SIMD和SSE指令的紧缩数据元件一起操作。类似地,与SSE2技术有关的128比特宽XMM寄存器也可用于保持这种紧缩数据操作数。在该实施例中,在存储紧缩数据和整数数据过程中,寄存器不需要在两种数据类型之间区分。
在以下附图的示例中,描述了许多数据操作数。为简单起见,从字母A起按字母顺序标注初始源数据段,其中A位于最低地址处且Z将位于最高地址处。因此,A初始地在地址0处,B在地址1处,C在地址3处,等等。概念上,如对于一个实施例在紧缩字节混洗中,混洗操作需要从第一操作数混洗数据段并将一个或多个源数据元素重排入由第二操作数中的一组掩码指定的模式(pattern)中。因此,混洗可旋转或将数据元素的一部分或全部完全重排成任何期望的顺序。此外,任何特殊数据元素或一些数据元素可在结果中被复制或广播。根据本发明的混洗指令的实施例包括排空到零功能,其中用于每个特殊数据元素的掩码能使得该数据元素位置在结果中被清零。
图3A-C示出了根据本发明各种实施例的混洗掩码。本例中示出了由多个个别数据元素311、312、313、314构成的紧缩数据操作数310。在包含一组掩码以指示用于另一操作数的相应紧缩数据元素的混洗模式的紧缩数据操作数环境中描述本例的紧缩操作数310。因此,紧缩操作数310的数据元素311、312、313、314中的每一个中的掩码都指定结果的相应数据元素位置中的内容。例如,数据元素311在最左面的数据元素位置中。数据元素311中的掩码将指定哪个数据应被混洗或设置于混洗操作结果的最左面的数据元素位置中。类似地,数据元素312是次最左面的数据元素位置。数据元素312中的掩码将指定哪个数据应被设置于结果的次最左面的数据元素位置。对于该实施例,包含混洗掩码的紧缩操作数中的每个数据元素都具有与紧缩结果中的数据元素位置的一对一对应。
图3A中,数据元素312被用于描述一个实施例的示例混洗掩码的内容。用于一实施例的混洗掩码318由三部分构成‘设定到零标记’字段315、‘保留’字段316和‘选择比特’字段317。‘设定到零标记’字段315指示本掩码指定的结果数据元素位置是否应被清零,或换句话说,是否应用零(0)值替换。在一个实施例中,‘设定到零标记’字段是支配的,其中如果‘设定到零标记’字段315被设定,则忽略掩码318中的其余字段且结果数据元素位置用‘0’填充。‘保留’字段316包括一个或多个比特,可以或不可以在可选实施例中使用或者可以保留用于将来或特殊的使用。该混洗掩码318的‘选择比特’字段317为紧缩结果中的相应数据元素位置指定数据源。
对于紧缩数据混洗指令的一个实施例,一个操作数由一组掩码构成且另一操作数由一组紧缩数据元素构成。这两种操作数的大小是相同的。根据操作数中数据元素的数量,需要变动数量的选择比特从用于紧缩结果中的设置的第二紧缩数据操作数中选择个别数据元素。例如,在具有紧缩字节的128个比特的源操作数的情况下,由于16个字节的数据元素可用于选择,所以需要至少4个选择比特。基于掩码的选择比特所指示的值,来自源数据操作数的合适数据元素被置于该掩码的相应数据元素位置。例如,数据元素312的掩码318对应于次最左面数据元素位置。如果该掩码318的选择比特317包含值‘X’,则来自源数据操作数中数据元素位置’X’的数据元素被混洗入结果中的次最左面数据元素位置。但如果‘设定到零标记’字段315被设定,则结果中的次最左面数据元素位置用‘0’代替且忽略选择比特317的指定。
图3B示出了用字节尺寸的数据元素和128比特宽的紧缩操作数操作的一个实施例的掩码328的结构。对于该实施例,因为存在16个可能的数据元素选择,‘设定到零’字段325由比特7构成且‘选择’字段327由比特3到0构成。在该实施例中不使用比特6到4且它们留在‘保留’字段326中。在另一实施例中,‘选择’字段327中使用的比特数量可以按需要增加或减少,以适应源数据操作数中可用的可能数据元素选择的数量。
图3C示出了用于与字节大小数据元素和128比特宽的紧缩操作数一起操作但具有多个数据元素源的另一实施例的掩码338的结构。在该实施例中,掩码338由‘设定到零’字段335、‘源(src)选择’字段336和‘选择’字段337构成。‘设定到零’字段335和‘选择’字段337类似于以上描述运作。本实施例的‘源选择’字段336指示应从哪个数据源获得由选择比特指定的数据操作数。例如,相同一组掩码可与诸如多个多媒体寄存器的多个数据源一起使用。每个源多媒体寄存器都被分配一数值且‘源选择’字段336中的值指向这些源寄存器之一。根据‘源选择’字段336的内容,从合适的数据源中选择所选数据元素,用于置于紧缩结果中的相应数据元素位置。
图4A示出了根据本发明实施例的多媒体寄存器中的各种紧缩数据类型表示。图4A示出了用于128比特宽的操作数的紧缩字节410、紧缩字420和紧缩双字(dword)430的数据类型。该示例的紧缩字节格式410是128比特长并包含十六个紧缩字节数据元素。这里字节被定义为8比特数据。每个字节数据元素的信息被存入用于字节0的比特7到比特0、用于字节1的比特15到比特8、用于字节2的比特23到比特16并最后用于字节15的比特120到比特127。因此,寄存器中使用所有可用的比特。该存储结构增加了处理器的存储效率。此外,在16个数据元素被访问的情况下,现在可以并行地对十六各数据元素进行一个操作。
通常,数据元素是与其它相同长度的数据元素一起被存入操作数(单个寄存器或存储器位置)的单件数据。在关于SSE2技术的紧缩数据序列中,操作数(XMM寄存器或存储器位置)中存储的数据元素数量是128比特除以各数据元素的比特长度。类似地,关于MMX和SSE技术的紧缩数据序列中,操作数(MMX寄存器或存储器位置)中存储的数据元素数量是64比特除以各数据元素的比特长度。该示例的紧缩字格式420是128比特长并包含8个紧缩字数据元素。每个紧缩字包含16比特的信息。图4A的紧缩双字格式430是128比特长并包含4个紧缩双字数据元素。每个紧缩双字数据元素都包含32比特的信息。紧缩四倍字是128比特长并包含两个紧缩四倍字数据元素。
图4B示出了可选的寄存器中数据存储格式。每个紧缩数据可包括超过一个独立的数据元素。示出了三种紧缩数据格式;紧缩半441、紧缩单442和紧缩双443。紧缩半441、紧缩单442和紧缩双443的一个实施例包含定点数据元素。对于可选实施例,紧缩半441、紧缩单442和紧缩双443中的一个或多个可包含浮点数据元素。紧缩半441的一个可选实施例是128比特长,包含8个16比特数据元素。紧缩单442的一个实施例是128比特长并包含4个32比特数据元素。紧缩双443的一个实施例是128比特长并包含2个64比特数据元素。可以理解,这种紧缩数据格式可进一步扩展到其它寄存器长度,例如扩展到96比特、160比特、192比特、224比特、256比特或以上。
图4C示出了操作编码(操作码)格式460的一实施例,它具有32个或更多比特,且寄存器/存储器操作数寻址模式与万维网(www)intel.com/design/litcentr处的可从Intel Corporation,Santa Clara,CA获得的“IA-32 Intel Architecture SoftwareDeveloper’s Manual Volume 2Instruction Set Reference”中所描述的操作码格式类型一致。混洗操作的类型可通过一个或多个字段461和462被编码。可标识直至每个指令两个操作数位置,包括直至两个源操作数标识符464和465。对于混洗指令的一个实施例,目的地操作数标识符466与源操作数标识符464相同。对于可选实施例,目的地操作数标识符466与源操作数标识符465相同。因此,对于混洗操作的实施例,由源操作数标识符464和465标识的源操作数之一被混洗操作的结果重写。对于混洗操作的一个实施例,操作数标识符464和465可用于标识64比特的源和目的地操作数。
图4D示出了具有40个以上比特的另一可选操作编码(操作码)格式470。操作码格式470与操作码格式460一致并包括任选前缀字节478。混洗操作类型可由字段478、471和472中的一个或多个编码。高达每个指令两个操作数位置可由源操作数标识符474和475以及通过前缀字节478标识。对于混洗指令的一个实施例,前缀字节478可用于标识128比特的源和目的地操作数。对于混洗操作的一个实施例,目的地操作数标识符476与源操作数标识符474相同。对于可选实施例,目的地操作数标识符476和源操作数标识符475相同。因此,对于混洗操作的实施例,由源操作数标识符474和475标识的源操作数之一由混洗操作的结果重写。操作码格式460和470允许部分由MOD字段463和473以及由任选的比例指标基和位移字节指定的寄存器到寄存器、存储器到寄存器、寄存器接存储器、寄存器接寄存器、寄存器接邻接(immediate)、寄存器到存储器寻址。
接着转到图4E,在一些可选实施例中,通过协处理器数据处理(CDP)指令进行64比特的单指令多数据(SIMD)算术操作。操作编码(操作码)格式480描述了具有CDP操作码字段482和489的一个这种CDP指令。对于混洗操作的可选实施例,CDP指令的类型可由字段483、484、487和488中的一个或多个编码。可标识达每个指令三个操作数位置,包括达两个源操作数标识符485和490以及一个目的地操作数标识符486。协处理器的一个实施例可在8、16、32和64比特值上操作。对于一个实施例,混洗操作在定点或整数数据元素上操作。在一些实施例中,利用条件字段481,可有条件地执行混洗指令。对于某些混洗指令,源数据大小可由字段483编码。在混洗指令的一些实施例中,可对SIMD字段进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可通过字段484编码饱和类型。
图5是根据本发明基于混洗掩码对数据操作数进行混洗操作的逻辑的一个实施例的框图。具有本实施例的设定到零能力的用于混洗操作的指令(PSHUFB)以两段信息第一(掩码)操作数510和第二(数据)操作数520开始。对于以下讨论,掩码(MASK)、数据(DATA)和结果(RESULTANT)一般称作操作数或数据块,但非限制于此,并还包括寄存器、寄存器文件和存储器位置。在一个实施例中,混洗PSHUFB指令被解码为一个微操作。在可选实施例中,该指令可解码为各种数量的微操作,以便对数据操作数进行混洗操作。对于该示例,操作数510、520是具有字节宽数据元素的源寄存器/存储器中存储的128比特宽的信息段。在一个实施例中,操作数510和520保存于128比特长的SIMD寄存器中,诸如128比特的SSE2XMM寄存器。但是,操作数510和520中的一个或两者也可从存储器位置处加载。对于一个实施例,结果(RESULTANT)540也是MMX或XMM数据寄存器。此外,RESULTANT540也可以是与源操作数之一相同的寄存器或存储器位置。根据特殊实现,操作数和寄存器可以是其它宽度,诸如32、64和256比特,并具有字、双字或四字大小的数据元素。该示例中的第一操作数510由一组16个掩码构成(按十六进制格式)0x0E、0x0A、0x09、0x8F、0x02、0x0E、0x06、0x06、0x06、0xF0、0x04、0x08、0x08、0x06、0x0D和0x00。每个个别掩码将指定结果540中其相应数据元素位置的内容。
第二操作数520由十六个数据区段构成P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A。第二操作数520中的每个数据区段也用十六进制的数据元素位置值标记。这里的数据区段是等长的且各自由单个字节(8比特)数据构成。如果每个数据元素是字(16比特)、双字(32比特)或四字(64比特),则128比特的操作数将分别具有8个字宽、4个双字宽或2各四字宽的数据元素。但是,本发明的其它实施例可以其它大小的操作数和数据区段运作。本发明的实施例不限于特殊长度的数据操作数、数据区段或移位计数,并可针对每个实现适当调整尺寸。
操作数510和520可驻留在寄存器或存储器位置或者寄存器文件或混合中。将数据操作数510和520与混洗指令一起发送到处理器中的执行单元的混洗逻辑530。在混洗指令达到执行单元时,该指令应在处理器管道中较早地被解码。因此,混洗指令可以是微操作(uop)或某些其它解码格式的形式。对于该实施例,在混洗逻辑530处接收两个数据操作数510和520。混洗逻辑530基于掩码操作数510中的值从源数据操作数520中选择数据元素并将所选数据元素排列/混洗到结果540中的合适位置。混洗逻辑530还将所指定的结果540中的给定数据元素位置清零。这里,结果540由十六个数据区段构成O,K,J,’0’,C,O,G,G,F,’0’,E,I,I,G,N和A。
这里用一些数据元素描述混洗逻辑530的操作。对于掩码操作数510中最左边的数据元素位置的混洗掩码是0x0E。混洗逻辑530翻译以上图3A-C中描述的掩码的各字段。在这种情况中,不设置“设定到零“字段。包括较低4个比特或四位字节的选择字段具有‘E’的十六进制值。混洗逻辑530将数据操作数520的数据元素位置‘0xE’中的数据O混洗到结果540的最左边的数据元素位置。类似地,掩码操作数510中的次最左边的数据元素位置处的掩码是0x0A。混洗逻辑530翻译用于该位置的掩码。该选择字段具有‘A’的十六进制值。混洗逻辑530将数据操作数520的数据元素位置‘0xA’中的数据K复制到结果540的次最左边的数据元素位置。
本实施例的混洗逻辑530也支持混洗指令的排空到零功能。从掩码操作数510的左边起第四个数据元素位置处的混洗掩码是0x8F。混洗逻辑510识别出设置了‘设定到零’字段,如掩码的比特8处的‘1’所指示的。作为响应,排空到零的指令胜过选择字段,且混洗逻辑510忽略该掩码的选择字段中的十六进制值‘F’。将‘0’置入从结果540中的左面起相应的第四数据元素位置。对于该实施例,混洗逻辑530为每个掩码评估‘设定到零’和选择字段并不在意掩码中那些字段之外存在的其它比特,诸如保留比特或源选择字段。对掩码操作数510中的整组掩码重复混洗掩码的该处理和数据混洗。对于一个实施例,掩码都被并行处理。在另一实施例中,每次可一起处理掩码组和数据元素的某些部分。
采用本混洗指令的实施例,操作数中的数据元素可按各种方式被重排。此外,来自特殊数据元素的某些数据可在多个数据元素位置处被重复或甚至传播到每个位置。例如,第四和第五掩码两者都具有0x08的十六进制值。结果,数据操作数520的数据元素位置0x8处的数据1被混洗入从结果540的右侧起的第四和第五个数据元素位置。采用设定到零功能,混洗指令的实施例可迫使结果540中的任何数据元素位置为‘0’。
根据特殊实现,每个混洗掩码都可用于指明结果中单个数据元素位置的内容。如在本示例中,每个单个字节宽的混洗掩码对应于结果540中字节宽的数据元素位置。在另一实施例中,多个掩码的组合可一同被用于指示数据元素块。例如,两个字节宽的掩码可一起用于指明字宽的数据元素。混洗掩码不限于为字节宽,而是可以是具体实现所需的任何其它尺寸。类似地,数据元素和数据元素位置可拥有字节之外的其它间隔尺寸。
图6是根据本发明的用于执行数据混洗操作的电路600的一个实施例的框图。该实施例的电路包括多路复用结构,以便基于第二操作数的解码混洗掩码从第一源操作数中选择正确的结果字节。这里的源数据操作数由上紧缩数据元素和下紧缩数据元素构成。该实施例的多路复用结构与用于实现其它紧缩指令的其它多路复用结构相比相对较简单。结果,本实施例的多路复用结构不引入任何新的临界计时路径。本实施例的电路600包括混洗掩码块、用于保持来自源操作数的下/上紧缩数据元素的块、用于数据元素的初始选择的第一多个8至1(8:1)复用器、用于上和下数据元素的选择的其它多个3至1(3:1)复用器、复用器选择&零逻辑以及许多控制信号。为了简便,图6中示出了有限数量的8:1和3:1复用器并用点表示。但是,它们的功能类似于所示出的那些并可通过以下描述加以理解。
在本示例的混洗操作期间,该混洗处理电路600处接收两个操作数具有一组紧缩数据元素的第一操作数和具有一组混洗掩码的第二操作数。混洗掩码被传递到混洗掩码块602。这组混洗掩码在复用器选择和零逻辑块604处被解码以生成各种选择信号(选择A606,选择B608,选择C610)和设定到零信号(零)611。这些信号用于控制将结果632接合在一起过程中复用器的操作。
对于该示例,掩码操作数和数据操作数都是128比特长,并各自用16字节大小的数据区段紧缩。在这种情况下,各信号上示出的值N是16。在该实施例中,数据元素被分成一组下和上紧缩数据元素,每个都具有8个数据元素。这允许在数据元素选择期间使用较小的8:1复用器而非16:1复用器。这些下和上组的紧缩数据元素分别保存在下和上存储区域612和622处。从下数据组开始,八个数据元素中的每一个经由诸如路由线614的一组线路被发送到第一组16个单个的8:1复用器618A-D。用N个选择A信号606之一控制16个8:1复用器618A-D中的每一个。根据其选择A606的值,该复用器将输出8个下数据元素614之一用于进一步处理。由于可能将任何下数据元素混洗入十六个结果数据元素位置中的任一个,所以存在用于该组下紧缩数据元素的16个8:1复用器。十六个8:1复用器中的每一个都用于十六个结果数据元素位置之一。类似地,十六个8:1复用器提供用于上紧缩数据元素。8个上数据元素被发送给第二组16个8:1复用器624A-D中的每一个。用N个选择B信号608之一控制十六个8:1复用器624A-D中的每一个。基于其选择B608的值,该8:1复用器将输出8个上数据元素616之一用于进一步处理。
十六个3:1复用器628A-D中的每一个都对应于结果632中的数据元素位置。来自十六个下数据复用器618A-D的十六个输出620A-D被路由到一组十六个3:1上/下选择复用器628A-D,作为来自上数据复用器624A-D的输出626A-D。这些3:1选择复用器628D-D中的每一个都从复用器选择&零逻辑604接收其自己的选择C610和零611信号。对于该3:1复用器的选择C610上的值将指示复用器是否将输出来自下数据组或来自上数据组的选择数据操作数。到每个3:1复用器的控制信号零611将指示该复用器是否应迫使其输出到零(‘0’)。对于该实施例,控制信号零611代替选择C610上的选择并在结果632中迫使对数据元素位置的输出到‘0’。
例如,3:1复用器628A接收来自8:1复用器618A的选择的下数据元素620A以及来自8:1复用器624A的选择的上数据元素626A,用于该数据元素位置。选择C610控制其输出630A哪个数据元素将混洗入结果632中它管理的数据元素位置。但是,如果到复用器628A的信号零611是有效的,指示该数据元素位置的混洗掩码声明‘0’是期望的,则复用器输出630A是‘0’且不使用数据元素输入620A、626A。混洗操作的结果632由来自16个3:1复用器628A-D的输出630A-D构成,其中每个输出都对应于特殊的数据元素位置并且是数据元素或‘0’。在该示例中,每个3:1复用器输出都是字节宽且结果是由16个紧缩字节数据构成的数据块。
图7示出了根据本发明一个实施例的对字节宽数据元素的数据混洗操作。这是指令“PSHUFB数据,掩码“的示例。注意,设定用于掩码701的字节位置0x6和0xC的混洗掩码的最高有效位,以使用于这些位置的结果741中的结果为零。在该示例中,考虑到指定地址的一组掩码701其中来自源操作数721的各数据元素将存入目的地寄存器741,源数据被组织为目的地数据存储装置721,它在一个实施例中也是源数据存储装置721。该示例中,如结果741所作的,两个源操作数(掩码701和数据721)各自由十六个紧缩数据元素构成。在本实施例中,所涉及的每个数据元素是8比特或字节宽的。因此,掩码701、数据721和结果741数据块分别是128比特长。此外,这些数据块可驻留在存储器或寄存器中。对于一个实施例,掩码的排列基于期望的数据处理操作,例如可包括过滤操作或卷积操作。
如图7所示,掩码操作数701包括数据元素,它具有混洗掩码0x0E 702、0x0A703、0x09 704、0x8F 705、0x02 706、0x0E 707、0x06 708、0x06 709、0x05 710、0xF0 711、0x04 712、0x08 713、0x08 714、0x06 715、0x0D 716和0x00 717。类似地,数据操作数712包括源数据元素P722、O723、N724、M725、L726、K727、J728、1729、H730、G731、F732、E733、D734、C735、B736、A737。在图7的数据区段的表示中,数据元素位置也在数据下被标注为十六进制值。因此,用掩码701和数据721执行紧缩混洗操作。使用该组混洗掩码701,可并行执行数据721的处理。
在评估每个数据元素混洗掩码时,来自指定数据元素或‘0’的合适数据被混洗到该特殊混洗掩码的相应数据元素位置。例如,最右面的混洗掩码717具有值0x00,它被解码成指定来自源数据操作数的位置0x00的数据。作为响应,来自数据位置0x0的数据A被复制到结果741的最右面的位置。类似地,从右面起的第二个混洗掩码716具有值0x0D,它被解码为0xD。因此,来自数据位置0xD的数据N被复制到结果741中从右面起的第二个位置。
结果741中从左面起的第四个数据元素位置是‘0’。这属于该数据元素位置的混洗掩码中的0x8F值。在该实施例中,混洗掩码字节的比特7是‘设定到零’或‘排空到零’指示器。如果该字段被设定,则结果中的相应数据元素位置用‘0’值填充代替来自第二数据操作数721的数据。类似地,结果741中从右面起的第七个位置具有值‘0’。这是由于掩码701中用于该数据元素位置的0xF0的混洗掩码值。注意,在某些实施例中不是混洗掩码中的所有比特都被使用。在该实施例中,混洗掩码的下四位字节或4个比特足以选择源数据操作数721中的十六个可能的数据元素中的任一个。当比特7是‘设定到零’字段时,在某些实施例中3个其它比特保持不使用并可被保留或忽略。对于该实施例,‘设定到零’字段控制和超过数据元素选择,如混洗掩码的下四位字节中所指示的。在这两种实例中,从左面起的第四个数据元素位置和从右面起的第七个位置,其中在比特7处设置‘排空到零’标记的0x80的混洗掩码值也可使得相应结果数据元素位置用‘0’填充。
如图7所示,箭头示出了掩码701中每个混洗掩码的数据元素混洗。根据特殊一组混洗掩码,一个或多个源数据元素不会出现于结果741中。在某些实例中,一个或多个‘0’也出现于结果741中的各数据元素位置处。如果混洗掩码被配置成广播一个或特殊一组数据元素,则用于这些数据元素的数据会在结果中作为选择模式被重复。本发明的实施例不限于任何特殊的排列或混洗模式。
如上所述,在本实施例中源数据寄存器也用作目的地数据存储寄存器,从而减少了所需寄存器的数量。尽管因此将源数据721重写,但混洗掩码701的组不会被改变并可用于将来的参考。源数据存储装置内的被重写数据可从存储器或其它寄存器重新加载。在另一实施例中,多个寄存器可用作源数据存储装置,其中它们各自的数据在目的地数据存储装置中按期望组织。
图8示出了根据本发明另一实施例的对字宽数据元素的数据混洗操作。本实例的一般讨论一定程度上类似于图7的讨论。但在这种情况下,数据操作数821和结果831的数据元素是字长度。对于该实施例,数据元素字作为数据元素字节对处理,而掩码操作数801中的混洗掩码是字节大小。因此,一对混洗掩码字节被用于定义每个数据元素字位置。但对于另一实施例,混洗掩码也可具有字间隔尺寸并描述结果中字大小的数据元素位置。
本示例的掩码操作数801包括若干字节宽的数据元素,并具有混洗掩码0x03802、0x02803、0x0F 804、0x0E 805、0x83806、0x82807、0x0D 808、0x0C 809、0x05810、0x04811、0x0B 812、0x0A 813、0x0D 814、0x0C 815、0x01 816和0x00817。数据操作数821包括源数据元素H822、G823、F824、E835、D836、C827、B828、A829。在图8的数据区段的表示中,数据元素位置也标注于数据下作为十六进制值。如图8所示,数据操作数821中的每个字大小数据元素都具有数据位置地址,它占据两个字节大小位置。例如,数据H822占据字节大小数据元素位置0xF和0xE。
用掩码801和数据821进行紧缩混洗操作。图8的箭头示出了掩码801中每个混洗掩码的数据元素的混洗。在评估每个数据元素混洗掩码时,来自数据操作数821的指定数据元素位置的合适数据或者‘0’被混洗到用于该特殊混洗掩码的结果831中的相应数据元素位置。在该实施例中,字节大小混洗掩码成对操作,以指定字大小的数据元素。例如,掩码操作数801中的两个最左面的混洗掩码0x03802、0x02803一同对应于结果831的最左面的字宽数据元素位置832。在混洗操作期间,数据元素字节位置0x03和0x02的两个数据字节或单个数据字(在这种情况中是数据B828)被排列成结果831中的两个最左面的字节大小数据元素位置832。
此外,混洗掩码也可配置成迫使结果中的一字大小数据元件为‘0’,如用结果831中的第三个字大小数据元素位置834的混洗掩码0x83806和0x82807示出的。混洗掩码0x83 806和0x82 807设置它们的‘设定到零’字段。尽管这里使两个混洗掩码字节成对,但也可实现不同的成对以便例如将四个字节排列在一起作为四字或8个字节排列在一起以形成一双四字。类似地,成对不限于连续的混洗掩码或特殊字节。在另一实施例中,字大小混洗掩码可用于指定字大小数据元素。
图9是示出混洗数据方法的一个实施例的流程图。长度值L这里一般用于表示操作数和数据块的宽度。根据特殊实施例,L可用于按数据区段的数目指定宽度,比特、字节、字等。在框910处,第一长度L的紧缩数据操作数被接收用于供混洗操作使用。在框920处接收指定混洗模式的长度L的一组M长度混洗掩码。在该示例中,L是128比特而M是8比特或一字节。在另一实施例中,L和M也可是其它值,如分别为256和16。在框930处,执行混洗操作,其中来自数据操作数的数据元素根据混洗模式被混洗排入结果中。
将在对每个数据元素位置发生了什么方面进一步描述该实施例的框930处的混洗细节。对于一个实施例,对所有紧缩结果数据元素位置的混洗被并行处理。在另一实施例中,每次可一起处理某些部分的掩码。在框932处,进行检查以确定是否设定了零标记。该零标记表示每个混洗掩码的设定/排空到零字段。如果在框932处该零标记被确定为设置,则与该特殊混洗掩码相对应的结果数据元素位置处的项目被设定为‘0’。如果在框932处发现该零标记未被设定,则将来自混洗掩码指定的源数据元素的数据排入与该混洗掩码相对应的结果的目的地数据元素位置。
当前,使用整数指令的表查找需要大量指令。如果整数操作被用于访问用于用SIMD指令实现的算法的数据,则每次查找就需要更多数量的指令。但通过使用紧缩字节混洗指令的实施例,急剧减少指令计数和执行时间。例如,如果表大小是16个字节或更少,则在用单个指令的表查找期间,可访问十六个数据字节。如果表大小在17和32字节之间,可使用11个SIMD指令查找表数据。如果表大小在33到64字节之间,则需要23个SIMD指令。
存在某些使用数据并行的应用,由于它们查找表的使用而不用SIMD指令实现。视频压缩方法H.26L的量化和分块算法是使用可装入128比特寄存器的小查找表的算法示例。在某些情况下,这些算法使用的查找表较小。如果表能装入单个寄存器,则可用一个紧缩混洗指令完成表查找操作。但如果表的存储空间要求超过单个寄存器的大小,则紧缩混洗指令的实施例仍可通过不同算法工作。用于处理过大表的一个方法实施例将表划分成诸部分,每部分等于一个寄存器的容量,且用混洗指令访问这些表部分中的每一个。混洗指令使用相同的混洗控制序列来访问表的每个部分。结果,在这些情况下可用紧缩字节混洗指令实现并行表查找,因此允许SIMD指令的使用来改善算法性能。本发明的实施例可帮助改善性能并减少使用小查找表的算法所需的存储器访问数量。其它实施例还允许使用SIMD指令的多个查找表元素的访问。根据本发明的紧缩字节混洗指令允许有效的SIMD指令实现,代替使用小查找表的算法的较无效的整数植入。本发明的该实施例显示了如何从需要大于单个寄存器的存储器空间的一表访问数据。在该示例中,寄存器包含表的不同区段。
图10A-H示出了使用SIMD指令的并行表查找算法的操作。图10A-H所述的示例包括来自多个表的数据的查找,其中如一组掩码中指定的某些选择的数据元素从这多个表混洗入结果数据的合并块。在紧缩操作环境下说明以下的讨论,特别是以上揭示的紧缩混洗指令。该示例的混洗操作重写寄存器中的源表数据。如果该表将在查找操作后被重复使用,则表数据应在执行操作前被复制到另一寄存器,从而不需要另一次加载。在可选实施例中,混洗操作利用三个分开的寄存器或存储器位置两个源和一个目的地。可选实施例中的目的地是与任一源操作数不同的寄存器或存储器位置。因此,源表数据不被撤消并可被重复使用。在该示例中,表数据被处理为来自较大表的不同部分。例如,低表数据1021来自表的低地址区域而高表数据1051来自表的高地址区域。本发明的实施例不限制表数据能够源自哪里。数据块1021和1051可相邻、远离或甚至重叠。类似地,表数据也可来自不同的数据表或不同的存储器源。也可想象,这种表查找和数据合并可在来自多个表的数据上进行。例如,代替来自于相同表的不同部分,低表数据1021可来自于第一个表而高表数据1051可来自于第二个表。
图10A示出了基于一组混洗掩码的来自表的第一组数据元素的紧缩数据混洗。该第一组数据元素被组成为叫做低表数据1021的操作数。在该示例中,掩码1001和低表数据1021分别由16个元素构成。掩码1001和低表数据1021的混洗操作生成临时结果A1041。混洗控制掩码的较低部分选择寄存器中的数据元素。选择数据元素所需的比特数是寄存器数据元素数量的log2。例如,如果寄存器容量是128比特且数据类型是字节,则寄存器数据元素的数量是16。在这种情况中,需要四个比特来选择数据元素。图10B示出了基于图10A的相同一组混洗掩码的来自表的第二组数据元素的紧缩数据混洗。该第二组数据元素被组成为叫做高表数据1051的操作数。本示例中,高表数据1051也由16个元素构成。掩码1001和高表数据1051的混洗操作产生临时结果B1042。
因为相同的一组掩码1001与低表数据1021和高表数据1051一起使用,所以它们各自的结果1041和1042表现为具有类似设置的数据,但来自于不同的源数据。例如,结果1041和1042两者的最左面的数据位置具有来自其各自数据源1021、1051的数据元素0xE1023、1053的数据。图10C示出了涉及选择过滤器1043和一组混洗掩码MASK(掩码)1001的逻辑紧缩AND操作。这种情况中的选择过滤器是区分掩码1001中的哪个混洗掩码相关于第一表数据1021和哪个相关于第二表数据1051的过滤器。该实施例的混洗掩码使用源选择字段,SRC选择336,如图3C中之前所讨论的。混洗控制字节的较低比特用于选择寄存器中的数据元素位置,且排除最高有效比特之外的几个较高比特用于选择表的区段。对于该实施例,与用于选择数据的那些比特紧接上方和紧邻的比特用来选择表的部分。选择过滤器1043将0x10应用于掩码1001中的所有混洗掩码,分出来自混洗掩码的源选择字段。紧缩AND操作产生表选择掩码1044,它指示最终结果中的哪个数据元素位置应来自第一数据组1021或第二数据组1051。
选择表部分的比特数等于表部分数量的log2。例如,在具有16字节寄存器的从17到32字节的表大小的情况下,最低的4个比特选择数据且第五个比特选择表部分。这里,当存在两个数据源1021和1051时,源选择使用每个混洗掩码的第二四位字节的最低比特,即比特4,来指定数据源。具有0和15之间的指数的表部分用图10A中的紧缩混洗指令访问。具有16和31之间的指数的表部分用图10B中的紧缩混洗指令访问。选择表部分的字段与图10C中的混洗控制字节/指数分离。在使用较大数量的数据源的实现中,源选择字段会需要附加比特。在三十二字节的表的情况下,混洗控制字节0x00到0x0F将选择第一表部分中的表元素零到十五,且混洗控制字节0x10到0x1F将选择第二表部分中的表元素十六到三十一。例如,考虑一混洗控制字节指定0x19。0x19的比特表示是0001 1001。较低的四个比特1001选择第九个字节(从0计数)且被设定为1的第五个比特选择两个表中的第二个表。等于0的第五个比特将选择第一个表。
通过选择第五位是零的混洗控制字节,对于图10D中的本实施例,用紧缩比较相等操作计算用于选择从具有指数0到15的第一表部分访问到的数据值的掩码。图10D示出了低过滤器1045和表选择掩码1044的紧缩“比较相等操作”。用于第一表部分的图10D中产生的低表选择掩码通过另一紧缩混洗操作选择从第一表部分访问的数据元素。该实例中的低过滤器1045是用于抽出或突出来自第一数据组1021的由混洗掩码指示的数据元素位置的掩码。如果本实施例中源选择字段是‘0’,则数据源将是低表数据1021。比较相等操作产生低表选择掩码1046,其中0xFF值用于具有源选择值‘0’的数据元素位置。
通过选择第五位是1的混洗控制字节,用图10E中的紧缩比较相等操作计算用于选择从具有指数16到31的第二表部分访问到的数据值的掩码。图10E示出了作用于高过滤器407和表选择掩码1044的类似的比较相等操作。图10E中产生的用于第二表部分的高表选择掩码通过紧缩混洗操作选择从第二表部分访问到的数据元素。高过滤器1047是用于抽出来自第二数据组1051的由混洗掩码的源选择字段指示的数据元素位置的掩码。如果本实施例中源选择字段是‘1’,则数据源将是高表数据1051。比较相等操作产生高表选择掩码1048,其中0xFF值用于具有源选择值‘1’的数据元素位置。
选自两个表部分的数据元素在图10F处被合并。图10F处,示出了对低表选择掩码1046和临时结果A1041的紧缩AND操作。该紧缩AND操作从经由基于源选择字段的掩码1046的第一数据组1021中滤出选择的混洗数据元素。例如,用于最左面的数据元素位置的混洗掩码1002中的源选择字段具有值‘0’,如表选择掩码1044中示出的。因此,低表选择掩码1046在该位置中具有0xFF值。这里图10F中0xFF和最左面的数据元素位置中的数据的与操作使得数据O转移到选择的低表数据1049。另一方面,用于从左面起的第三数据元素位置的混洗掩码1004中的源选择字段具有值‘1’,指示该数据来自于第一数据组1021之外的源。因此,低表选择掩码1046在该位置中具有0x00值。这里的与操作不会将数据J传递到选择的低表数据1049且该位置保持为空,0x00。
对高表选择掩码1048和临时结果B1042的类似的紧缩AND操作在图10G中示出。该紧缩AND操作滤出从经掩码1048的第二数据组1051中选择的混洗数据元素。不同于图10F中所述的紧缩AND操作,掩码1048允许来自第二数据组的源选择字段所指定的数据传递到选择的高表数据1050同时保持其它数据元素位置为空。
图10H示出了来自第一数据组和第二数据组的选择数据的合并。对选择的低表数据1049和选择的高表数据1050执行紧缩逻辑OR操作,以获得合并的选择表数据1070,这是本示例中并行表查找算法的期望结果。在可选实施例中,将选择的低表数据1049和选择的高表数据1050加在一起的紧缩加法操作也可产生合并的选择表数据1070。如图10H所示,在该实施例中,选择的低表数据1049或选择的高表数据1050具有用于给定数据位置的0x00值。这是因为没有0x00值的其它操作数将包含从合适源选择的期望的表数据。这里,结果1070中最左面的数据元素位置是O,它是来自第一数据组1021的混洗数据1041。类似地,结果1070中从左面起的第三个数据元素位置是Z,它是来自第二数据组1051的混洗数据1042。
本实施例中用于在过大表中查找数据的方法一般可通过以下操作概括。首先,将表数据复制或加载入寄存器。通过紧缩混洗操作访问来自每个表部分的表值。标识表部分的源选择字段从混洗掩码中提取。用表部分数对源选择字段进行比较是否相等(compare-if-equal)操作以确定哪些表部分是用于混洗数据元素的合适源。比较是否相等操作提供掩码,以进一步滤出用于每个表部分的期望的混洗数据元素。来自合适表部分的期望的数据元素被合并在一起,形成最终的表查找结果。
图11是示出使用SIMD指令执行表查找的方法的一个实施例的流程图。这里描述的流程通常遵循图10A-H的方法,但不限于此。这些操作中的某些也可按不同顺序或使用各种类型的SIMD指令执行。在框1102处,接收指定混洗模式的一组混洗掩码。这些混洗掩码还包括源字段,以指示从哪个表或源混洗数据元素以获得期望的结果。在框1104处,加载表的第一部分的数据元素或第一数据组。第一部分数据元素在框1106处根据框1102的混洗模式被混洗。在框1108处加载用于第二部分表的数据元素或第二数据组。在框1110处根据框1102的混洗模式混洗第二部分数据元素。在框1112处,从混洗掩码中滤出表选择。本实施例的表选择包含指定假定数据元素源自哪里的源选择字段。在框1114处,为来自表的第一部分的混洗数据生成表选择掩码。在框1116处,为来自表的第二部分的混洗数据生成表选择掩码。这些表选择掩码将从合适的表数据源中滤出用于特定数据元素位置的期望的混洗数据元素。
框1118处,根据用于第一表部分的框1114的表选择掩码,从第一表部分的混洗数据中选择出数据元素。框1120处,根据用于第二表部分的框1116的表选择掩码,从第二表部分的混洗数据中选择数据元素。在框1118处从第一表部分和在框1120处从第二表部分选择的混洗数据元素在框1122处被合并在一起,以获得合并的表数据。一个实施例的合并的表数据包括从第一表数据和第二表数据混洗的数据元素。对于另一实施例,合并的表数据可包括从超过两个表源或存储器区域查找的数据。
图12是示出执行表查找的方法的另一实施例的流程图。在框1202处,加载具有多个数据元素的表。在框1204处,确定该表是否装入单个寄存器。如果该表装入单个寄存器,则在框1216处用混洗操作执行表查找。如果数据不装入单个寄存器,则在框1206处对于表的每个相关部分用混洗操作执行表查找。执行逻辑紧缩的AND操作,以获得选择表部分或数据源的比特或字段。框1210处的“比较是否相等”查找形成一掩码,以便从要查找的表的相关部分中选择表数据。在框1212处,逻辑AND操作用于从表部分中查找和选择数据项。逻辑OR操作在框1214处合并选择的数据,以获得期望的表查找数据。
紧缩混洗指令的一个实施例被实现为用于用排空到零能力在多个寄存器之间重排数据的算法。混合操作的目的是在单个SIMD寄存器中按选择的结构合并两个或多个SIMD寄存器的内容,在该选择的结构中结果中数据的位置与源操作数中它们的原始位置不同。选择的数据元素首先被移到期望的结果位置且未选择的数据元素被设定为零。一个寄存器的选择的数据元素要移到的位置在另一个寄存器中被设定为零。结果,单独一个结果寄存器会在给定的数据元素位置中包含非零数据项。以下的一般指令序列可用于混合来自两个操作数的数据紧缩字节混洗数据A,掩码A;紧缩字节混洗数据B,掩码B;紧缩逻辑OR结果A,结果B。
操作数数据A和数据B包含要被重排或设定零的元素。操作数掩码A和掩码B包含指定数据元素要移动到哪里以及哪些数据元素要设定为零的混洗控制字节。对于该实施例,未由掩码A设定为零的目的地位置中的数据元素由掩码B设定为零,且未由掩码B设定为零的目的地位置由掩码A设定为零。图13A-C示出了用于在多个寄存器之间重排数据的算法。在该示例中,来自两个数据源或寄存器1304、1310的数据元素被一同混洗入交错数据块1314。该示例的包含掩码1302、1308、源数据1304、1310以及结果1306、1312、1314的数据块分别是128比特长并由十六个字节大小的数据元素构成。但,可选实施例可包括具有各种大小的数据元素的其它长度的数据块。
图13A示出了第一掩码MASK(掩码)A1302的作用于第一源数据操作数DATA(数据)A 1304第一紧缩数据混洗操作。对于该示例,期望的交错结果1314将包括来自第一数据源1304的一个数据元素和来自第二数据源1310的另一数据元素的交错模式。在该示例中,数据A1304的第五个字节与数据B1310的第十二个字节交错。在该实施例中,掩码A1302包括“0x80”和“0x05”的重复模式。该实施例中的0x80值设置了设定到零字段,其中相关的数据元素位置用‘0’填充。0x05值阐明了用于该混洗掩码的有关数据元素位置用来自数据A1304的数据元素0x5的数据F1排列。本质上,掩码A1302中的混洗模式在每隔开一个结果数据元素的位置处排列和重复数据F1。这里,数据F1是要从数据A1304混洗的单块数据。在可选实施例中,可以混洗来自各种数量的源数据元素的数据。因此,实施例不限于包括单块数据的模式或任何特定模式。用于掩码模式的排列组合具有所有类型的可能性。图13A的箭头示出了经掩码A1302的混洗掩码的数据元素的混洗。因此,该混洗操作的结果A1306由经掩码模式1302的‘0’和F1的模式构成。
图13B示出了包含第二掩码MASK(掩码)B1308以及第二源数据操作数DATA(数据)B 1310的第二紧缩数据混洗操作。掩码B1308包括“0x0C”和“0x80”的重复模式。0x80值使得该混洗掩码的有关数据位置接收‘0’。0xC0值使得与该混洗掩码相对应的结果数据元素位置用来自数据B1310的数据元素0xC的数据M2排列。掩码B1308的混洗模式将数据M2排列到所有其它结果数据元素位置。图13B中的箭头示出了掩码B1308中经该组混洗掩码的数据元素的混洗。因此,该混洗操作的结果B1312由经掩码模式1308的‘0’和M2的模式构成。
图13C示出了混洗数据、结果A1306和结果B1312的合并,以实现交错结果1314。该合并用紧缩逻辑OR操作实现。结果A1306和结果B1312中的‘0’值模式允许M2和F1数据值1314的交错。例如,在最左面的数据元素位置处,‘0’和M2的逻辑OR导致结果1314的最左面数据元素位置中的M2。类似地,在最右面的数据元素位置处,F1和‘0’的逻辑OR导致结果1314的最右面数据元素位置中的F1。因此,来自多个寄存器或存储器位置的数据可被重排成期望模式。
图14是示出在多个寄存器之间重排数据的方法的一个实施例的流程图。在框1402处从第一寄存器或存储器位置加载数据。在框1404处,基于第一组混洗掩码混洗该第一寄存器数据。在框1406处,从第二寄存器或存储器位置加载数据。该第二寄存器数据在框1408处根据第二组混洗掩码被混洗。来自第一和第二寄存器混洗的混洗数据在框1410处以逻辑OR合并,以便用来自第一和第二寄存器的数据得出交错数据块。
图15A-K示出了用于在多个寄存器之间混洗数据以生成交错数据的算法。这是交错平面色数据的应用示例。常在分开的色平面中处理图像数据,随后这些平面稍后被交错用于进行显示。下述算法显示红平面、绿平面和蓝平面数据的交错,如诸如位图的图像格式所使用的。大量色空间和交错模式都是可能的。这样,该方法能方便地扩展到其它色空间和格式。该示例实现了常用的图像处理数据格式过程,其中红(R)平面、绿(G)平面和蓝(B)平面数据被交错成RGB格式。该示例显示了根据本发明的排空到零能力如何显著地减少存储器访问。
来自三个源的数据按交错方式组合在一起。更具体地,数据与象素颜色数据相关。例如,每个象素的颜色数据可包括来自红(R)、绿(G)和蓝(B)源的信息。通过组合颜色信息,可以评估红/绿/蓝(RGB)数据以提供特定象素期望的颜色。这里,红数据保存于操作数数据A1512中,绿数据于数据操作数数据B1514中,且蓝数据于数据C1516中。该结构可存在于图形或存储器系统中,其中用于每个分开颜色的数据被存储在一起或者在流数据中分别采集。为了在再造或显示期望图像时使用该信息,象素数据必须被排列成RGB模式,其中用于特定象素的所有数据被组合在一起。
对于该实施例,具有预定模式的一组掩码用于将RGB数据交错在一起。图15A示出了一组掩码具有第一模式的掩码A1502,具有第二模式的掩码B1504,以及具有第三模式的掩码C1506。来自每个寄存器的数据将隔开三个字节,以使它可与来自两个其它寄存器的数据相交错。具有十六进制值0x80的控制字节设定了最高有效比特,以使相应的字节通过紧缩字节混洗指令被排空到零。在这些掩码的每一个中,每个第三混洗掩码被启用以选择用于混洗的数据元素,同时两个插入混洗掩码具有值0x80。该0x80值指示用于那些相应数据元素位置的掩码中的设定到零字段被置1。因此,‘0’将被置于与该掩码相关的数据元素位置中。在该示例中,掩码模式将基本分出每个颜色的数据元素,以实现交错。例如,在将掩码A1502应用于混洗操作中的数据操作数时,掩码A1502使得六个数据元素(0x0、0x1、0x2、0x3、0x4、0x5)以每个数据元素之间隔开两个数据元素空间进行混洗。类似地,掩码B1504将在0x0、0x1、0x2、0x3、0x4处隔开数据元素进行混洗。掩码C1506将在0x0、0x1、0x2、0x3、0x4处隔开数据元素进行混洗。
注意,在该实现中,每个特定重叠数据元素位置的混洗掩码具有两个设定到零字段和指定数据元素的一个混洗掩码。例如,参考三组掩码1502、1504、1506的最右面的数据元素位置,混洗掩码值为0x00、0x80和0x80,分别用于掩码A1502、掩码B1504和掩码C1506。因此,只有用于掩码A1502的混洗掩码0x00指明用于该位置的数据。本实施例中的掩码被形成模式,以使混洗数据能被方便地合并以形成交错RGB数据块。
图15B示出了要交错的数据块数据A1512、数据B1514和数据C1516。对于该实施例,每组数据都具有数据条目,它具有用于十六个象素位置的颜色信息。这里,附随数据元素中的每个颜色字母的下标概念表示该象素号。例如,R0是用于象素0的红数据而G15是用于象素15的绿数据。所示的每个数据元素处的十六进制值是该数据元素位置的号码。颜色数据(数据A1512、数据B1514、数据C1516)可被复制入其它寄存器,以使数据不会由混洗操作重写并可被重复使用而不用其它加载操作。在该实施例的示例中,需要使用掩码1502、1504和1506的三次传递(pass)来完成象素数据交错。对于可选实现和其它数据量,传递和混洗操作的次数可按需要变化。
图15C示出了结果数据块,MASKED DATA(掩码数据)A1522,用于使用第一混洗模式MASK(掩码)A1502的对红象素数据DATA(数据)A1512的紧缩混洗操作。响应于掩码A1502,红象素数据被排入所有第三数据元素位置。类似地,图15D示出了结果数据块,MASKED DATA(掩码数据)B1524,用于使用第二混洗模式MASK(掩码)B1504的对绿象素数据DATA(数据)B1514的紧缩混洗操作。图15E示出了结果数据块,MASKED DATA(掩码数据)C1526,用于使用第三混洗模式MASK(掩码)C1506的对蓝象素数据DATA(数据)C1516的混洗操作。对于该实施例的掩码模式,来自这些混洗操作的结果数据块提供交错的数据元素以使数据元素中的一个具有数据而两个具有‘0’。例如,这些结果1522、1524、1526的最左面的数据元素位置分别包含R5、‘0’和‘0’。在下一个数据元素位置处,呈现了用于另一RGB颜色的象素数据。因此,当一起合并时,达到组合的RGB类型。
在该实施例中,用于红数据和绿数据的以上混洗数据以紧缩逻辑OR操作被首先合并在一起。图15F示出了用于掩码数据A1522和掩码数据B1524的紧缩逻辑OR的结果数据,即交错的A&B数据1530。混洗的蓝数据现在以另一紧缩逻辑OR操作与交错的红和绿数据合并在一起。图15G示出了来自于掩码数据C1526和掩码数据A&B1530的紧缩逻辑OR的新结果,即交错的A,B&C数据1532。因此,图15G的结果数据块包含了头五个象素和第六个象素的一部分的交错RGB数据。本实施例的算法的后续迭代将为十六个象素的其余部分产生交错RGB数据。
在这点上,数据A1512、数据B1514和数据C1516中的数据的三分之一已被交错。两种方法可用于处理这些寄存器中的其余数据。另一组混洗控制字节可用于安排要交错的数据或者数据A1512、数据B1514和数据C1516中的数据可被右移,以便可再次使用混洗掩码1502、1504和1506。在这里示出的实现中,将数据移位以避免需要加载附加混洗控制字节的存储器访问。在没有这些移位操作的情况下,在该实施例中需要九组控制字节代替三组(掩码A1502、掩码B1504、掩码C1506)。该实施例也可在有限数量的寄存器可用且存储器访问较长的架构中应用。
在其中有较多寄存器可用的可选实施例中,保持寄存器中的所有或大量掩码组以使移位操作是不必要的会是更加有效的。此外,在具有许多寄存器和执行单元的架构中,所有混洗操作可并行执行而不必等待移位产生。例如,具有九个混洗单元和九个掩码组的乱序处理器可并行执行九个混洗操作。在以上实施例中,在再应用掩码前必须将数据移位。
根据已为该特定颜色处理的数据元素的数目,数据A1512、数据B1514和数据C1516的原始颜色数据中的数据元素被移位。在该示例中,以上已为红色处理了用于六个象素的数据,从而用于红数据操作数数据A1512的数据元素被向右移6个数据元素位置。类似地,已为绿和蓝两者处理了用于5个象素的数据,从而用于绿数据操作数数据B1514和用于蓝数据操作数数据C1516的数据元素被分别右移5个数据元素位置。被移位的源数据在图15H中分别示作为用于颜色红、绿、蓝的数据A’1546、数据B’1542和数据C’1544。
用该移位数据重复以上用图15A-G讨论的混洗和逻辑OR操作。分别与掩码A1502、掩码B1504和掩码C1506一起作用于数据B’1542、数据C’1544和数据A’1546的后续紧缩混洗操作结合对三个紧缩混洗结果的紧缩逻辑OR操作提供用于另四个象素的交错RGB数据和另两个的一部分。该结果数据,即交错A’、B’和C’数据1548在图15I中示出。注意,最右面的两个数据元素涉及第六个象素,它已将其红数据R5用第一交错数据组1532排列。按第二传递的处理结果,再次使原始象素颜色数据移位合适数量的位置。这里,已为红和蓝处理了用于五个附加象素的数据,从而用于红数据操作数数据A’1546和用于蓝数据操作数数据C’1544的数据元素被右移5个数据元素位置。已为绿处理了用于六个象素的数据,从而用于绿数据操作数数据B’1542的数据元素被右移六个位置。图15J示出了用于该第三次传递的移位数据。将以上紧缩混洗和逻辑OR的重复应用于DATA C”1552、DATA A”1554和DATA B”1556。图15K将用于最后的16个象素的最终交错RGB数据示作为交错的A”,B”DATA1558。具有B10的最右面的数据元素相关于第十一个象素,它已使其绿数据G10和红数据R10与第二交错数据组1548一起排列。因此,经由具有一组掩码模式的一系列紧缩混洗和紧缩逻辑OR操作,来自多个源1512、1514和1516的数据按期望的方式一起合并和重排,以便进一步使用或处理这些结果1532、1548、1558。
图16是示出在多个寄存器之间混洗数据以生成交错数据的一个实施例的流程图。例如,本方法的实施例可应用于交错象素数据的生成,如图15A-K中所讨论的。虽然在三个数据源或数据平面的环境下描述本实施例,但其它实施例可用两个或更多个数据平面进行操作。这些数据平面可包括用于一个或多个图像帧的颜色数据。在框1602处,加载用于第一、第二和第三平面的帧数据。在该示例中,用于多个象素的RGB颜色数据可作为来自三个不同平面的单独颜色获得。第一平面中的数据用于颜色红,第二平面中的数据用于绿色,且第三平面中的数据用于蓝色。在框1604中,加载具有混洗控制模式(M1、M2和M3)的一组掩码。这些混洗控制模式确定混洗模式和数据排列,以便一起交错颜色。根据该实现,可采用任何数量的混洗模式来生成期望的数据排列。
在框1606处,为每个数据平面选择合适的控制模式。在该实施例中,基于期望模式数据是什么顺序以及当前执行哪个迭代来选择混洗模式。框1608处,来自第一数据组(红)的帧数据用第一混洗控制模式进行混洗,以获得混洗的红数据。在框1610处,用第二混洗控制模式混洗第二数据组(绿),以获得混洗的绿数据。在框1612处,用第三混洗控制模式混洗第三数据组(蓝),以实现混洗的蓝数据。虽然本实施例中三个掩码和它们的混洗控制模式彼此不同,但在每次迭代期间可在超过一个单独数据组上使用一掩码及其混洗模式。此外,某些掩码会比其它的更常使用。
框1614处,用于三个数据组的框1608、1610、1612的混洗数据被合并在一起,形成该传递的交错结果。例如,第一传递的结果会看起来像图15G的交错数据1532,其中每个象素的RGB数据被一起组成为一组。框1616处,进行检查以确定寄存器中是否加载了更多帧数据用于进行混洗。如果否,则在框1620处进行检查以确定是否存在更多的来自三个数据平面用于被交错的数据。如果否,则进行所述方法。如果在框1620中存在更多的平面数据,则该过程返回到框1602,加载用于混洗的更多帧数据。
如果框1616处的确定是真,则颜色数据的每个平面中的帧数据被移位预定计数,该计数对应于在最后传递期间哪个掩码模式被应用于该特殊颜色的数据组。例如,与来自图15G的第一传递示例相一致,第一、第二、第三平面中的红、绿、蓝数据分别被移位6、5和5个位置。根据该实现,每次传递时为每个颜色数据选择的混洗模式可以是不同的或者重新使用相同的一个。对于一个实施例在第二次传递期间,来自第一迭代的三个掩码被旋转,以使第一平面数据现在与第三掩码配对,第二平面数据与第一掩码配对,且第三平面数据与第三掩码配对。该掩码旋转允许从一次传递到下一次的交错RGB数据的合适的连续性,如图15G和15I所示出的。如同在第一次传递中,混洗和合并继续。如果期望第三分个或更多的迭代,本实施例的混洗掩码模式在不同数据平面之间继续旋转以生成更多交错RGB数据。
根据本发明使用紧缩混洗指令的算法实施例也可改善具有当前硬件资源的处理器和系统性能。但随着技术继续进步,本发明的实施例在与更大量的硬件资源和更快、更有效的逻辑电路组合时可对改善性能具有更深的影响。因此,具有字节间隔尺寸和排空到零选项的紧缩混洗指令的一个有效实施例可具有跨九代处理器的不同和更大的影响。在现代处理器架构中简单添加更多资源不会确保更好的性能改善。通过维持类似于并行表查找和紧缩字节混洗指令(PSHUFB)的一个实施例的应用的效率,更大的性能改善是可能的。
虽然以上示例在128比特宽的硬件/寄存器/操作数环境中作出一般性描述以简化讨论,但其它实施例采用64或128比特宽的硬件/寄存器/操作数来执行紧缩混洗操作、并行表查找和多寄存器数据重排。此外,本发明的实施例不限于特定硬件或技术类型,诸如MMX/SSE/SSE2技术,并可与其它SIMD实现和其它图形数据处理技术一同使用。
在以上说明书中,参考其示例性实施例描述了本发明。但显然,可对其进行各种修改和变化而不背离本发明的较宽精神和范围,如所附权利要求书中所阐述的。因此,说明书和附图被认为是说明性而非限制性的。
权利要求
1.一种方法,包括接收具有一组L个数据元素的第一操作数和具有一组L个控制元素的第二操作数;以及对于每个控制元素,如果未设置其排空到零字段,将由所述控制元素指定的来自第一操作数数据元素的数据混洗到相关的结果数据元素位置,而如果其排空到零字段未设置,则将零置入所述的相关结果数据元素位置。
2.如权利要求1所述的方法,其特征在于,所述L个控制元素中的每一个都占据所述第二操作数中的特殊位置并与结果中类似定位的数据元素位置相关联。
3.如权利要求2所述的方法,其特征在于,所述L个数据元素中的每一个都占据所述第一操作数中的特殊位置。
4.如权利要求3所述的方法,其特征在于,所述控制元素将通过数据元素位置编号指定第一操作数数据元素。
5.如权利要求4所述的方法,其特征在于,所述控制元素中的每一个都包括排空到零字段,所述排空到零字段用于指示与该控制元素相关联的数据元素位置是否用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
6.如权利要求5所述的方法,其特征在于,所述控制元素中的每一个都进一步包含源选择字段。
7.如权利要求2所述的方法,其特征在于,还包括输出结果数据块,该数据块包括响应于所述第二操作数的所述控制元素从所述第一操作数混洗的数据。
8.如权利要求1所述的方法,其特征在于,所述数据元素中的每一个都包括一字节的数据。
9.如权利要求8所述的方法,其特征在于,所述控制元素中的每一个都是一字节宽。
10.如权利要求9所述的方法,其特征在于,L是8且其中所述第一操作数、所述第二操作数和所述结果分别由64比特宽的紧缩数据构成。
11.如权利要求9所述的方法,其特征在于,L是16且其中所述第一操作数、所述第二操作数和所述结果分别由128比特宽的紧缩数据构成。
12.一种装置,包括执行单元,用于执行包括含一组L个数据元素的第一操作数和含一组L个控制元素的第二操作数的混洗指令,所述混洗指令用于使得所述执行单元对于每个单独的控制元素,确定其排空到零字段是否被设置,且如果是真则将零置入相关的结果数据元素位置,否则将来自由所述单个控制元素指定的第一操作数数据元素的数据混洗到所述相关联的结果数据元素位置。
13.如权利要求12所述的装置,其特征在于,所述L个控制元素中的每一个都占据所述第二操作数中的一位置并与结果中类似定位的数据元素位置相关联。
14.如权利要求13所述的装置,其特征在于,每个单个控制元素将通过数据元素位置编号指定一第一操作数数据元素。
15.如权利要求14所述的装置,其特征在于,所述控制元素中的每一个都包括排空到零字段,所述排空到零字段用于指示与该控制元素相关联的数据元素位置是否用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
16.如权利要求15所述的装置,其特征在于,所述控制元素中的每一个都进一步包括源选择字段。
17.如权利要求16所述的装置,其特征在于,所述混洗指令将进一步使得所述执行单元生成具有L个数据元素位置的结果,这L个数据元素位置已基于所述一组L个控制元素被填充。
18.如权利要求12所述的装置,其特征在于,所述数据元素中的每一个都包括一字节数据且每个所述控制元素都是字节宽。
19.如权利要求18所述的装置,其特征在于,L是8且其中所述第一操作数、所述第二操作数和所述结果分别由64比特宽的紧缩数据构成。
20.如权利要求18所述的装置,其特征在于,L是16且其中所述第一操作数、所述第二操作数和所述结果分别由128比特宽的紧缩数据构成。
21.一种包含存储表示预定功能的数据的机器可读媒介的制品,包括接收具有一组L个数据元素的第一操作数和具有一组L个控制元素的第二操作数;以及对于每个控制元素,如果未设置其排空到零字段,则将来自由所述控制元素指定的第一操作数数据元素的数据混洗到相关联的结果数据元素位置,如果其排空到零字段未设置,则将零置入所述相关联的结果数据元素位置。
22.如权利要求21所述的制品,其特征在于,所述机器可读媒介存储的所述数据表示集成电路设计,在制造时响应于单个指令执行所述预定功能。
23.如权利要求22所述的制品,其特征在于,所述预定功能还包括生成具有L个数据元素位置的结果,这L个数据元素位置已根据所述一组L个控制元素被填充。
24.如权利要求23所述的制品,其特征在于,所述L个控制元素中的每一个都与结果中的类似定位的数据元素位置相关联。
25.如权利要求24所述的制品,其特征在于,每个单个控制元素将通过一数据元素位置编号指定第一操作数数据元素。
26.如权利要求25所述的制品,其特征在于,所述数据元素中的每一个都包括一字节数据。
27.如权利要求26所述的制品,其特征在于,每个所述控制元素都包括排空到零字段,所述排空到零字段用于指示与该控制元素相关联的数据元素位置是否用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
28.如权利要求27所述的制品,其特征在于,所述控制元素中的每一个都进一步包括源选择字段。
29.如权利要求21所述的制品,其特征在于,由所述机器可读媒介存储的所述数据表示计算机指令,在由机器执行时使得所述机器执行所述预定功能。
30.一种方法,包括接收具有一组L个数据元素的第一操作数;接收具有一组L个掩码的第二操作数,其中所述L个掩码中的每一个都占据所述第二操作数中的一特殊位置并与结果中的类似定位的数据元素位置相关联,所述L个掩码中的每一个包括一排空到零字段;对于每个掩码,确定是否设置了其排空到零字段,且如果是真,则将零置入相关联的结果数据元素位置;以及如果其排空到零字段未设置,则将来自由所述掩码指定的第一操作数数据元素的数据混洗到所述相关联的结果数据元素位置。
31.如权利要求30所述的方法,其特征在于,所述L个掩码中的每一个都占据所述第二操作数中的一特殊位置并与所述结果中的类似定位的数据元素位置相关联。
32.如权利要求31所述的方法,其特征在于,所述L个掩码中的每一个都包括排空到零字段,所述排空到零字段用于指示与该控制元素相关联的数据元素位置是否用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
33.如权利要求32所述的方法,其特征在于,所述掩码中的每一个都进一步包括源选择字段。
34.如权利要求33所述的方法,其特征在于,所述第一操作数、所述第二操作数和所述结果分别由64比特宽的紧缩数据构成。
35.如权利要求33所述的方法,其特征在于,所述第一操作数、所述第二操作数和所述结果分别由128比特宽的紧缩数据构成。
36.一种方法,包括接收具有一组L个数据元素的第一操作数;接收具有一组L个混洗掩码的第二操作数,所述L个混洗掩码中的每一个都与结果中的类似定位的数据元素位置相关联;对于每个单个混洗掩码,确定其排空到零字段是否被设置,且如果是真,则将零置入相关联的结果数据元素,否则将来自由所述单个混洗掩码指定的第一操作数数据元素的数据混洗到所述相关联的结果数据元素位置。
37.如权利要求36所述的方法,其特征在于,所述L个混洗掩码的每一个包括排空到零字段,所述排空到零字段用于指示与该控制元素相关联的数据元素位置是否用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
38.如权利要求37所述的方法,其特征在于,所述掩码中的每一个还包括源选择字段。
39.一种装置,包括第一存储器位置,用于存储多个源数据元素;第二存储器位置,用于存储多个控制元素,所述控制元素中的每一个对应于一结果数据元素位置,且所述控制元素中的每一个都包括排空到零字段和选择字段;控制逻辑,它耦合到所述第二存储器位置,所述控制逻辑响应于所述控制元素的值生成多个选择信号和多个排空到零信号;第一多个多路复用器,它耦合到所述第一存储器位置和所述多个选择信号,所述第一多个多路复用器中的每一个响应于与一特定结果数据元素位置相对应的选择信号混洗用于所述特定结果数据元素位置的数据元素;以及第二多个多路复用器,它耦合到所述第一多个多路复用器和所述多个排空到零信号,所述第二多个多路复用器中的每一个与一特定结果数据元素位置相关联,如果其排空到零信号是有效的则所述第二多个多路复用器中的每一个输出零否则输出为该特定结果数据元素位置混洗的数据元素。
40.如权利要求39所述的装置,其特征在于,所述多个源数据元素是第一紧缩数据操作数。
41.如权利要求40所述的装置,其特征在于,所述多个控制元素是第二紧缩数据操作数。
42.如权利要求40所述的装置,其特征在于,所述第一和第二存储器位置是单指令多数据寄存器。
43.如权利要求42所述的装置,其特征在于,所述第一紧缩操作数是64比特长且所述源数据元素中的每一个都是一字节宽;以及所述第二紧缩操作数是64比特长且所述控制元素中的每一个是一字节宽。
44.如权利要求42所述的装置,其特征在于,所述第一紧缩操作数是128比特长且所述源数据元素中的每一个都是一字节宽;以及所述第二紧缩操作数是128比特长且所述控制元素中的每一个是一字节宽。
45.一种装置,包括控制逻辑,用于接收一组L个混洗掩码,其中每个混洗掩码与一唯一的结果数据元素位置相关联,所述控制逻辑用于为每个结果数据元素位置提供选择信号和排空到零信号;一组L个多路复用器,它们耦合到所述控制逻辑,其中每个多路复用器也与一唯一的结果数据元素位置相关联,如果其相关联的排空到零信号有效则每个多路复用器输出零,且如果其相关联的排空到零信号无效则输出基于其相关联的选择信号从一组M个数据元素混洗的数据。
46.如权利要求45所述的装置,其特征在于,还包括具有L个唯一数据元素位置的寄存器,每个数据元素位置保持来自其相关联的多路复用器的输出。
47.如权利要求46所述的装置,其特征在于,L是16,M是16。
48.一种系统,包括存储器,用于存储数据和指令;处理器,它耦合到总线上的所述存储器,所述处理器可操作用于执行混洗操作,所述处理器包括总线单元,用于接收来自所述存储器的指令,所述指令引起基于来自第二操作数的一组L个混洗控制元素的对来自第一操作数的L个数据元素中的至少一个的数据混洗;执行单元,它耦合到所述总线单元,所述执行单元执行所述指令,所述指令使得所述执行单元对每个混洗控制元素,如果其排空到零字段未设置,则将来自由所述混洗控制元素指定的第一操作数数据元素的数据混洗到相关联的结果数据元素位置,且如果其排空到零字段未设置,则将零置入所述相关联的结果数据元素位置。
49.如权利要求48所述的系统,其特征在于,每个混洗控制元素都包括排空到零字段,所述排空到零字段指示与该混洗控制元素相关联的数据元素位置是否将用零值填充;以及选择字段,所述选择字段用于指示混洗来自哪个第一操作数数据元素的数据。
50.如权利要求49所述的系统,其特征在于,每个混洗控制元素都进一步包括源选择字段。
51.如权利要求48所述的系统,其特征在于,所述指令是具有排空到零能力的紧缩字节混洗指令。
52.如权利要求48所述的系统,其特征在于,每个数据元素都是字节宽,每个混洗命令元素是字节宽,且L是8。
53.如权利要求48所述的系统,其特征在于,所述第一操作数是64比特长且所述第二操作数是64比特长。
全文摘要
用于混洗数据的方法、装置和程序。一个实施例的方法包括接收具有一组L个数据元素的第一操作数和具有一组L个控制元素的第二操作数。对于每个控制元素,如果其排空到零字段未设置,则来自由个别控制元素指定的第一操作数数据元素的数据被混洗到相关联的结果数据元素位置,而如果其排空到零字段未设置,则将零置入相关联的结果数据元素位置。
文档编号G06F17/14GK1813241SQ200480018443
公开日2006年8月2日 申请日期2004年6月24日 优先权日2003年6月30日
发明者小W·梅西, E·德贝斯, P·鲁塞尔, H·恩古彦 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1