CN104903850A - 用于滑动窗口编码算法的指令 - Google Patents

用于滑动窗口编码算法的指令 Download PDF

Info

Publication number
CN104903850A
CN104903850A CN201380062335.XA CN201380062335A CN104903850A CN 104903850 A CN104903850 A CN 104903850A CN 201380062335 A CN201380062335 A CN 201380062335A CN 104903850 A CN104903850 A CN 104903850A
Authority
CN
China
Prior art keywords
instruction
vector
field
data
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201380062335.XA
Other languages
English (en)
Other versions
CN104903850B (zh
Inventor
V·戈帕尔
J·吉尔福德
G·M·沃尔里克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN104903850A publication Critical patent/CN104903850A/zh
Application granted granted Critical
Publication of CN104903850B publication Critical patent/CN104903850B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/02Indexing scheme relating to groups G06F7/02 - G06F7/026
    • G06F2207/025String search, i.e. pattern matching, e.g. find identical word or best match in a string

Abstract

说明的处理器具有指令执行流水线,其具有功能单元来执行比较矢量元素与输入值的指令。每个矢量元素和输入值具有标识数据内的位置的第一相应的段和具有数据的字节序列的第二相应的段。功能单元具有比较电路,用于比较输入矢量元素的相应的字节序列与输入值的字节序列,来识别每个比较的匹配字节的数量。功能单元还具有差异电路,用于确定所述输入矢量的元素的字节序列与所述数据内所述输入值的字节序列之间的相应的距离。

Description

用于滑动窗口编码算法的指令
技术领域
发明的领域通常涉及计算系统,并且更具体而言,涉及用于滑动窗口编码算法的指令。
背景技术
矢量处理
图1示出在半导体芯片上用逻辑电路实现的处理核心100的高层图。处理核心包含流水线101。流水线包括多个阶段,每个设计为执行完全执行程序代码指令所需要的多步骤处理中的特定步骤。这些典型地至少包含:1)指令获取和解码;2)数据获取3)执行;4)写回。当数据由相同的指令标识并在之前阶段中获取(例如,在上述步骤2)中)时,执行特定操作的执行阶段由指令标识,该指令在另一个之前阶段中被获取并解码(例如,在上述步骤1)中)。被操作的数据典型地从(通用)寄存器存储空间102获取。在操作完成时创建的新数据也典型地“写回”到寄存器存储空间(例如,在上述4)阶段处)。关联于执行阶段的逻辑电路典型地由多个“执行单元”或者“功能单元”103_1至103_N组成,其每个设计为执行其自身的操作的唯一子集(例如,第一功能单元执行整数数学操作,第二功能单元执行浮点指令,第三功能单元执行从/向缓存/存储器的加载/存储操作等)。由所有功能单元执行的所有操作的集合对应于处理核心100支持的“指令集”。
在计算机科学领域广泛知晓2个类型的处理器架构:“标量”和“矢量”。标量处理器被设计为执行对单集合数据执行操作的指令,而矢量处理器被设计为执行对多集合数据执行操作的指令。图2A和2B呈现展示了标量处理器与矢量处理器之间的基本差异的比较例。
图2A示出标量AND指令的示例,其中,单个操作数集A和B被AND在一起来生成单数(singular)(或者“标量”)结果C(即,AB=C)。与此相反,图2B示出矢量AND指令的示例,其中,2个操作数集A/B和D/E分别被平行AND在一起,以同时生成矢量结果C,F(即,A.AND.B=C且D.AND.E=F)。关于术语,“矢量”是具有多个“元素”的数据元素。例如,矢量V=Q、R、S、T、U具有5个不同元素:Q、R、S、T和U。示例性矢量V的“尺寸”是5(因为其具有5个元素)。
图1还示出不同于通用寄存器空间102的矢量寄存器空间107的存在。具体而言,通用寄存器空间102在名义上被用于存储标量值。这样,当任何执行单元执行标量操作时,其在名义上使用从(并将结果写回)通用寄存器存储空间102调用的操作数。与此相反,当任何执行单元执行矢量操作时,其在名义上使用从(并将结果写回)矢量寄存器空间107调用的操作数。存储器的不同区域可以同样被分配用于存储标量值和矢量值。
还要注意的是,在向功能单元103_1至103_N的输入处和从功能单元103_1至103_N的输出处相应存在掩码操作(masking)逻辑104_1至104_N和105_1至105_N。在各种实施方式中,对于矢量操作,实际上仅实现这些层中的一个—尽管不是严格要求(尽管在图1中未绘出,但可想象地,仅执行标量而非矢量操作的执行单元不需要具有任何掩码操作层)。对于采用掩码操作的任何矢量指令,输入掩码操作逻辑104_1至104_N和/或输出掩码操作逻辑105_1至105_N可以被用于控制:针对矢量指令,哪些元素被有效地操作。此处,掩码矢量从掩码寄存器空间106读出(例如,连同从矢量寄存器存储空间107读出的输入操作数矢量),并且被呈现给掩码操作逻辑104、105层中的至少一个。
在执行矢量程序代码的过程中,每个矢量指令不需要要求全数据字。例如,用于一些指令的输入矢量可以仅是8个元素,用于其他指令的输入矢量可以是16个元素,用于其他指令的输入矢量可以是32个元素等。因此,掩码操作层104/105被用于标识适用于特定指令的全矢量数据字的元素的集合,以便跨指令影响不同的矢量尺寸。典型地,对于每个矢量指令而言,保持在掩码寄存器空间106中的特定掩码模式由指令调出、从掩码寄存器空间获取并被提供至掩码层104/105中的一个或者两个,来“启用”对于特定矢量操作的元素的正确集合。
LZ77压缩算法
压缩算法努力减小数据的量而不牺牲数据内的信息。一个类型的压缩算法被称为LZ77算法,通过参考输入(未压缩的)数据流中更早存在的数据的单个拷贝来替代数据的重复出现,以实现压缩。匹配由一对称作“长度距离对”的数字进行编码,其等同于以下陈述:“在未压缩的流中,每个接下来的“长度”字符等于恰好其后有“距离”个字符的字符”。(“距离”有时替代地称作“偏移”。)
为了认出匹配,编码器对一些量的最近数据(诸如最后2kB、4kB、或者32kB)保持追踪。其中保持了该数据的构造称作“滑动窗口”,因此LZ77有时称作滑动窗口压缩。编码器保持滑动窗口内最近的数据,来寻找匹配(并且解码器也将保持该数据来解释编码器参考的匹配)。
图3示出基本处理LZ77编码方案的简单示例。如图3所示,比特流300的之前(更早或者更晚)部分301的位模式与比特流的当前部分302的位模式进行比较。如果当前部分302中发现与之前部分301中的序列位匹配的序列位,那么参考更早部分301中相同序列的位来替代当前部分302中的位的序列。例如,参考更早部分301中的位序列303来替代当前部分302中的位序列。对位序列302插入的参考将标识出位序列302的长度(其也与位序列303的长度相同)以及位序列303的位置。因此,当对压缩的流解码时,当解码器到达该参考时,其仅“参考”回位序列303来再现用于解码的流的部分302的正确位序列。
编码处理的更复杂但更有效的版本将计算当前部分的引导字节(例如,3个引导字节)的散列(被称为“前缀”),并使用其作为向一些数据结构的索引,该数据结构保持被散列至相同值的更早部分的位串(或者这样的位串的位置)。
LZ77压缩算法被用作DEFLATE压缩算法的部分,其被用于压缩gzip、Zlib、PKZip和WinZip压缩方案。
附图说明
在附图的图中以示例的方式,而非以限制的方式示出本发明,其中相似的参考标记指代类似的元件,其中:
图1示出指令执行流水线;
图2A和2B涉及矢量处理;
图3示出滑动窗口编码处理的示例;
图4A示出指令的方法;
图4B示出指令的流的方法;
图5A和5B示出对图4的指令的电路设计;
图6A是示出根据本发明的实施例的通用矢量友好指令格式及其A级别指令模板的框图。
图6B是示出根据本发明的实施例的通用矢量友好指令格式及其B级别指令模板的框图。
图7A-C是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。
图8是根据本发明的一个实施例的寄存器架构的框图。
图9A是根据本发明的实施例的单个CPU核心的框图,连同其至管芯上互连网络的连接,及其2级(L2)缓存的本地子集。
图9B是根据本发明的实施例的图9A中的CPU核心的部分的分解图。
图10是示出根据本发明的实施例的示例性乱序架构的框图。
图11是依据本发明的一个实施例的系统的框图。
图12是依据本发明的实施例的第二系统的框图。
图13是依据本发明的实施例的第三系统的框图。
图14是依据本发明的实施例的SoC的框图。
图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器的框图。
图16是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换至目标指令集中的二进制指令的框图。
具体实施方式
图4a示出适于加速位匹配标识处理(诸如LZ77编码处理的位匹配标识处理)的矢量指令(VCOMPCPM)的实施例的操作。图4a示出512位第一输入操作数400。如图4所示,第一输入操作数400被分割为4个128位元素401_1至401_4。每个元素401_1至401_4对应于要根据比特流匹配处理进行编码的比特流的段。
128位元素401_1至401_4中的每个含有4字节的“位置头部”402_1至402_4以及12字节的连续段的数据403_1至403_4。4字节位置头部指明在被编码的数据中,在哪能够发现其12字节的连续数据。因此,512位数据结构含有4个12字节的数据的段以及在数据内的每个的位置。
第二(例如标量)输入操作数404还具有数据的不同段的位置头部405和12个连续字节406。
如图4a所示,指令将第二输入操作数404的数据406的12字节与第一输入操作数400的每个12字节数据元素403_1至403_4进行比较,并取出其相应的位置头部信息402_1至402_4与第二输入操作数404的位置头部405之间的差异。在比较2个12字节序列中,指令在两个序列的一端(例如,最右端)开始,并朝另一端移动(例如,移动到左侧)来逐字节比较。一旦观察到一对均等定位的不同字节,比较停止,均等定位的字节的数量导致:第一对不均等的字节被建立为对于2个12字节序列的比较结果的均等字节的数量。
因此,结果407是矢量,其元素对应于能够被直接或者间接使用(作为对每个比较的参考插入信息)的信息。即,结果407对第一操作数400中的每个元素指明:该元素的位置与用于第二输入操作数404的数据406的位置之间的距离;以及数据的2个12字节段之间的长度(以匹配字节的数量)。在图4的实施例中,结果的每个元素对于匹配字节的数量预留4位(但是仅能够指明12个匹配字节的最大值),并且预留16位来指明1的补码形式的位置差异。
理论上,第一输入操作数400能够被用于保持被压缩的数据的“更早的”段,并且第二输入操作数404能够用于被压缩的数据的当前段,或者第一输入操作数400能够用于被压缩的数据的当前段,并且第二输入操作数404能够用于被压缩的数据的更早的段。为了简洁起见,本说明书中将大多引用前一方法。
在图4a的指令的实施例中,立即操作数408_1的第一字段被用于基本指明压缩算法的滑动窗口的尺寸。换言之,立即操作数408的第一字段408_1指明允许在输入矢量400内发现输入操作数404的当前数据的匹配领先于先前的数据多少。如果任何位置差异计算超过由立即操作数408的第一字段408_1指明的距离,那么对应的元素是设置有表明比较无效的固定代码(例如,比较结果固定来示出没有字节匹配)的结果407。
例如,在实施例中,第一字段408_1是4位来指明比较的数据段之间的最大距离。这对应于16的最大距离,其中该最大距离的1/16对应于最小距离设定。例如,如果最小距离设定是2千字节(KB),那么4位的第一字段408_1位长度提供32KB的最大滑动窗口尺寸。
另外在图4的指令的实施例中,立即操作数的第二字段408_2指明结果矢量407中结果元素的位置。此处,每个结果元素能够被看作是长度为128位,然而,每个元素仅提供20位的信息(4位标识比较中有多少字节匹配,并且16位(2字节)指明1的补码形式的位置距离)。在实施例中,每个128位元素的32位被标识为双字词或者DWORD,并且立即操作数的第二字段408_2指明每个元素4个DWORD中的哪个DWORD含有结果信息。例如,在实施例中,立即操作数408_2中的第二字段是2位宽,并且“01”的值表明每个元素最右边的DWORD含有结果(即,512中的位415:484;387:256;159:128以及31:0,输出矢量407除外)。
指明每个矢量4个不同位置的能力允许结果矢量407由4个连续指令写入,每个连续指令指明不同DWORD结果位置,以便一个矢量含有16个不同比较的比较结果。
图4b更具体地来示出序列。如图4b所示,第一VCOMPCPM指令412_1将当前数据序列410与4个先前的数据序列的第一输入矢量411_1进行比较。第一指令的立即操作数(的第一字段)指明结果应该被写入第一指令的结果413_1中每个矢量元素的最右边的DWORD。
接下来执行第二VCOMPCPM指令412_2,其比较当前数据序列410与4个先前的数据序列的第二输入矢量411_2。然而,第二指令412_2的立即操作数指明结果应该被写入与第一指令412_1相同的目的地寄存器(即,相同的结果413_1)中每个矢量元素的第二最右边的DWORD。这样,即使相同的寄存器被写入以具有第一指令412_1的结果,第一指令412_1的结果也不被第二指令412_2的结果改写。
序列持续2个更多的VCOMPCPM指令412_3、412_4,具有4个之前的数据序列的2个更多的不同相应的输入矢量411_3、411_4,以及指明结果413_1的第三和第四DWORD的相应的立即操作数。在第四指令412_4的结束处,结果413_1含有与当前输入数据序列410的16个比较的结果。
在执行了第四VCOMPCPM指令412_4之后,执行另一个矢量指令VPHMAXPOSUD 414,其接受第四VCOMPCPM指令412_4的结果413_1作为输入矢量,并视其为16个元素矢量。VPHMAXPOSUD矢量指令414返回结果416,其识别16个比较中的哪个具有:对输入数据序列410的最高数量的匹配数据字节。
此处,VPHMAXPOSUD指令414被设计为仅比较其输入矢量元素的每个的匹配字节部分的数量(其从图4a的上述讨论想起,仅指明有20位比较结果的4位),而返回指明匹配字节的数量和距离信息的整个20位字段。来自VPHMAXPOSUD指令结果416的信息然后被用于(直接或者间接)在输入矢量410的数据序列所属的、正被编码的数据的地点插入参考。
在附加的或者替代的实施方式中,立即操作数字段中能够被增强来指明最小匹配长度。例如,如果最小匹配长度指明为3,并且2个12字节序列之间的比较仅产生2字节序列匹配,那么该比较的结果将固定为示出没有匹配。
在其他实施例中,立即操作数中能够进一步指明2或者3字节的最小匹配长度。此处,不同的编码实施方式可以对于有效编码插入具有不同的标准。增强指令功能单元逻辑电路来响应于指明不同“规则”或者“策略”的立即操作数,允许指令支持各种不同的滑动窗口编码实施方式。符合该观点,在另一个附加的或者替代的实施方式中,如果当前数据序列与先前的数据序列之间的距离超过一些距离,那么立即操作数中可以指明仅3字节序列匹配应该被固定来示出没有匹配(其例如可以进一步在立即操作数中指明或者硬编码到指令执行逻辑电路)。
图5A示出执行VCOMPCPM指令的功能单元的逻辑电路设计。如图5A所示,功能单元逻辑电路包含比较逻辑电路520的库,其比较第一输入矢量500的元素的字节(其可以源于矢量寄存器或者存储器)与标量输入504的字节。逻辑上从一端执行通过比较对齐的字节,并且比较结果被视为在每个字节位置处的相同字节的数量,直至观察到第一对非匹配字节。
差异逻辑电路530取出输入矢量500内标量输入504的位置信息与单独元素的位置信息502_1至502_4之间的差异。距离检查逻辑电路540确认由不同逻辑电路530确定的数据序列之间的任何距离不超过由立即操作数的第一段503_1指明的最大距离。如果任何特定距离超过最大距离,那么距离检查电路540通过复用器库560中其对应的复用器迫使0通过违规输入矢量元素的道(lane),从而迫使无效比较(或者没有匹配)。如果距离在最大内,那么对于特定输入矢量500元素的起因于比较库520的比较结果和起因于差异逻辑电路530的差异被允许:对于其对应的道,传递至解复用器电路库570的解复用器电路。解复用器电路将结果路由至由立即操作数的第二段确定的其道的适当的DWORD。
尽管图5A未示出,但掩码操作层电路可以接收掩码矢量来用在其相应的库520、530、560、570中启用/禁用的差异单元、比较单元、复用器和解复用器的对应数量,容纳1、2、3和4个元素的输入矢量500尺寸。
图5B示出被设计为执行VPHMAXPOSUD指令的功能单元的电路设计。如图5B所示,逻辑电路接受由高达16个元素583_1至583_16组成的输入矢量580,每个元素在输入矢量的对应的DWORD中向右取向。每个元素被理解为20位宽,由4位的第一字段(其识别匹配的数量)和识别距离的16位组成。比较电路581比较输入矢量580彼此的匹配数据值的数量,来确定其中最大的。确定为具有匹配的最大数的输入矢量元素然后由比较电路输出控制的复用器582选择,来作为指令的结果通过。如果输入矢量580字段少于16个输入元素,掩码矢量输入584可以被用于控制要比较的匹配值的数量。
分别由图5A和5B的功能单元接收的输入矢量500、580可以从矢量寄存器分别接收,在执行阶段耦合至具有这些功能单元的指令执行流水线。替代地,其可以源于存储器。指令格式可以指明矢量输入是否从矢量寄存器空间或者存储器取回。图5A的功能单元的标量输入可以是从耦合至流水线的标量(通用)寄存器空间接收的真正标量、或者可以呈现为从矢量寄存器空间接收的输入矢量的单个元素。输入掩码可以从掩码寄存器空间接收。
尽管上述具体实施例涉及特定矢量尺寸、矢量元素尺寸和结果尺寸(矢量元素或者其他),但普通技术人员将理解这些尺寸只是很多其他可能的尺寸中的方法。
上文详述的指令的实施例可以以“通用矢量友好指令格式”实施,其在下文中详述。在其他实施例中,不利用这样的格式,并且使用另一个指令格式,然而,下文说明的写入掩码寄存器、各种数据转换(拌合(swizzle)、广播等)、寻址等通常适用于说明上述指令的实施例。另外,示例性系统、架构、以及流水线在下文详述。上述指令的实施例可以执行在这样的系统、架构、以及流水线上,但是不限于详述的那些内容。
矢量友好指令格式是适合矢量指令(例如,存在对于矢量操作特定的某些领域)的指令格式。虽然说明的实施例是通过矢量友好指令格式来支持矢量和标量操作这两者,但替代实施例仅使用矢量操作矢量友好指令格式。
示例性通用矢量友好指令格式—图6A-B
图6A-B是示出根据本发明的实施例的通用矢量友好指令格式及其指令模板的框图。图6A是示出根据本发明的实施例的通用矢量友好指令格式及其A级别指令模板的框图;而图6B是示出根据本发明的实施例的通用矢量友好指令格式及其B级别指令模板的框图。具体而言,对其定义A级别和B级别指令模板的通用矢量友好指令格式600,这两者都包含没有存储器访问605指令模板和存储器访问620指令模板。矢量友好指令格式的上下文中通用的术语是指不绑定到任何特定指令集的指令格式。虽然将说明的实施例中,矢量友好指令格式的指令对矢量进行操作,该矢量来源于:要么寄存器(没有存储器访问605指令模板)要么寄存器/存储器(存储器访问620指令模板),但本发明的替代实施例可以仅支持这些中的一个。另外,虽然将说明的本发明的实施例中,有矢量指令格式的加载和存储指令,但替代实施例反而或者附加地具有不同指令格式的指令,其将矢量移动至/出寄存器(例如,从存储器到寄存器,从寄存器到存储器,在寄存器之间)。此外,虽然将说明的本发明的实施例支持2级别的指令模板,但替代实施例可以仅支持这些中的一个或者多于2个。
虽然将说明的本发明的实施例中,矢量友好指令格式支持如下:具有32位(4字节)或者64位(8字节)数据元素宽度(或者尺寸)的64字节矢量操作数长度(或者尺寸)(因此,包括16个双字长元素或者替代地8个四字长元素的64字节矢量);具有16位(2字节)或者8位(1字节)数据元素宽度(或者尺寸)的64字节矢量操作数长度(或者尺寸);具有32位(4字节)、64位(8字节)、16位(2字节)、或者8位(1字节)数据元素宽度(或者尺寸)的32字节矢量操作数长度(或者尺寸);和具有32位(4字节)、64位(8字节)、16位(2字节)、或者8位(1字节)数据元素宽度(或者尺寸)的16字节矢量操作数长度(或者尺寸);替代实施例可以支持具有更多、更少、或者不同数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同矢量操作数尺寸(例如,656字节矢量操作数)。
图6A中的A级别指令模板包含:1)在没有存储器访问605指令模板内,示出没有存储器访问,完全舍入(round)控制类型操作610指令模板和没有存储器访问,数据转换类型操作615指令模板;和2)在存储器访问620指令模板内,示出存储器访问,暂存625指令模板和存储器访问,非暂存630指令模板。图6B中的B级别指令模板包含:1)在没有存储器访问605指令模板内,示出没有存储器访问,写入掩码控制,部分舍入控制类型操作612指令模板和没有存储器访问,写入掩码控制,vsize类型操作617指令模板;和2)在存储器访问620指令模板内,示出存储器访问,写入掩码控制627指令模板。
格式
通用矢量友好指令格式600包含图6A-B示出的顺序的、下文列出的下面的字段。结合上述讨论,在实施例中,参考下文图6A-B和7提供的格式细节,可以利用非存储器访问指令类型605或者存储器访问指令类型620。用于读出掩码、输入矢量操作数和目的地的地址可以在下面说明的寄存器地址字段644中标识。在进一步的实施例中,在写入掩码字段670中指明写入掩码。
格式字段640—该字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,因此,在指令流中发生矢量友好指令格式的指令。因此,格式字段640的内容辨别:发生的第一指令格式的指令与发生的其他指令格式的指令,因而,允许矢量友好指令格式引入到具有其他指令格式的指令集。这样,在不需要指令集仅具有通用矢量友好指令格式的意义上,该字段是可选的。
基本操作字段642—其内容将不同基本操作辨别开。如本文之后说明的那样,基本操作字段642可以包含和/或是操作码字段的部分。
寄存器索引字段644—其内容(直接或者通过地址产生)指明源和目的地操作数的位置,无论其在寄存器或者在存储器中。这些包含充分的位数来从PxQ(例如,32x1012)寄存器文件选择N个寄存器。虽然在一个实施例中,N可以是高达3个源和一个目的地寄存器,但替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持高达2个源,其中这些源中的一个还作为目的地;可以支持高达3个源,其中这些源中的一个还作为目的地;可以支持高达2个源和一个目的地)。虽然在一个实施例中,P=32,但替代实施例可以支持更多或更少的寄存器(例如16个)。虽然在一个实施例中,Q=1012位,但替代实施例可以支持更多或更少的位(例如128、1024)。
修改器字段646—其内容辨别:指明存储器访问的通用矢量指令格式的指令的发生与不指明的那些;即,在没有存储器访问605指令模板和存储器访问620指令模板之间。存储器访问操作读出和/或写入到存储器层次(在一些情况下,使用寄存器中的值来指明源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段还在3个不同方式之间进行选择,来执行存储器地址计算,但替代实施例可以支持更多、更少、或者不同方式来执行存储器地址计算。
增强操作字段650—其内容辨别:除了基本操作外,要执行各种不同操作的哪一个。该字段是上下文特定的。在本发明的一个实施例中,该字段被分割为级别字段668、alpha字段652和beta字段654。增强操作字段允许公共组的操作在单个指令中执行,而非2、3或者4个指令。下文是使用增强字段650来减小要求的指令的数量的指令的一些示例(其命名法在本文稍后更详细说明)。
其中[rax]是用于地址产生的基本指针,并且{}表明由数据操作字段指明的转换操作(本文稍后更具体说明)。
按比例调整字段660—其内容允许按比例调整索引字段的内容,用于存储器地址产生(例如,用于使用2scale*index+base的地址产生)。
移位字段662A—其内容被用作存储器地址产生的部分(例如,用于使用2scale*index+base+displacement的地址产生)。
移位因子字段662B(要注意的是,直接在移位因子字段662B上的移位字段662A的并列表明使用一个或者另一个)—其内容被用作地址产生的部分;其指明移位因子要由存储器访问的尺寸(N)按比例调整—其中N是存储器访问中字节的数量(例如,对于使用2scale*index+base+scaleddisplacement的地址产生)。忽略了冗余的低阶位,因此,移位因子字段的内容乘以存储器操作数总尺寸(N),以产生最终移位来用于计算有效地址。N的值由处理器硬件在运行时基于全操作码字段674(本文稍后说明)和本文稍后说明的数据操纵字段654C确定。移位字段662A和移位因子字段662B是可选的(在其不用于没有存储器访问605指令模板和/或不同实施例可以仅实现2个中的1个或者0个的意义上)。
数据元素宽度字段664—其内容辨别要使用多个数据元素宽度的哪一个(在一些实施例中,对于所有指令;在其他实施例中,仅对于一些指令)。在如下的意义上,该字段是可选的:如果仅支持一个数据元素宽度和/或使用操作码的一些方面来支持数据元素宽度,那么其是不需要。
写入掩码字段670—以每数据元素位置的形式,其内容控制目的地矢量操作数中的数据元素位置是否反映基本操作和增强操作的结果。A级别指令模板支持合并写入掩码,而B级别指令模板支持合并和归零写入掩码这两者。当合并时,矢量掩蔽允许在执行任何操作(由基本操作和增强操作指明)期间保护目的地中的任何集合的元素不会更新;在其他一个实施例中,保留对应的掩码位具有0的目的地的每个元素的旧值。相比之下,当在任何操作的执行期间(由基本操作和增强操作指明)归零矢量掩码允许目的地中的任何集合的元素归零;在一个实施例中,当对应的掩码位具有0值时,目的地的元素被设定为0。该功能的子集是控制正被执行的操作的矢量长度的能力(即,正被修改的元素从第一到最后一个的跨度);然而,不一定修改的元素是连续的。因此,写入掩码字段670允许部分矢量操作,包含负载、存储、算术、逻辑等。另外,该掩码操作能够用于故障抑制(即,通过对目的地的数据元素位置进行掩码操作来防止收到可能/将导致故障的任何操作的结果—例如,假定存储器中的矢量跨页面边界,并且第一页面而非第二页面将导致页面故障,如果处于第一页面的矢量的所有数据元素被写入掩码进行掩码操作,那么能够忽略页面故障)。此外,写入掩码允许含有某些类型的条件陈述的“矢量化循环”。虽然说明的本发明的实施例中,写入掩码字段670的内容选择含有要使用的写入掩码的多个写入掩码寄存器中的一个,(并且因此,写入掩码字段670的内容间接标识出要执行的掩码操作),替代实施例反而或者额外允许掩码写入字段670的内容直接指明要执行的掩码操作。此外,归零允许性能改善,当:1)寄存器重命名用于其目的地操作数也不是源(还调用非三元指令)的指令,因为在寄存器重命名流水线阶段,目的地是不再是隐含源(没有来自当前目的地寄存器的数据元素需要被拷贝到重命名的目的地寄存器、或者以某种方式继续操作,因为不是操作的结果的任何数据元素(任何掩码操作的数据元素)将归零);和2)在写回阶段期间,因为零正被写入。
立即数字段672—其内容允许立即的规范。在如下的意义上,该字段是可选的:其不存在于不支持立即的通用矢量友好格式的实施方式,并且其不存在于不使用立即的指令。
指令模板级别选择
级别字段668—其内容在不同级别的指令之间进行辨别。参考图2A-B,该字段的内容在A级别与B级别指令之间选择。在图6A-B中,圆角正方形被用于表明特定值存在于字段(例如,图6A-B中对于级别字段668A分别为级别A 668A和级别B 668B)。
A级别的没有存储器访问指令模板
在A级别的非存储器访问605指令模板的情况下,alpha字段652被解释为RS字段652A,其内容辨别要执行不同增强操作类型中的哪一个(例如,舍入652A.1和数据转换652A.2分别对:没有存储器访问、舍入类型操作610和没有存储器访问、数据转换类型操作615指令模板被指明),而beta字段654辨别要执行指明类型的哪些操作。在图6中,圆角框被用于表明存在特定值(例如,修改器字段646中的没有存储器访问646A;对于alpha字段652/rs字段652A的舍入652A.1和数据转换652A.2)。在没有存储器访问605指令模板中,按比例调整字段660、移位字段662A、以及移位按比例调整字段662B不存在。
没有存储器访问指令模板—完全舍入控制类型操作
在没有存储器访问完全舍入控制类型操作610指令模板中,beta字段654被解释为舍入控制字段654A,其内容提供静态舍入。在本发明说明的实施例中,舍入控制字段654A包含抑制所有浮点异常(SAE)字段656和舍入操作控制字段658,但替代实施例可以支持可以将这两个概念编码至相同的字段或者仅具有这些概念/字段的一个或者另一个(例如,可以仅具有舍入操作控制字段658)。
SAE字段656—其内容辨别是否禁用异常事件报告;当SAE字段656的内容表明抑制被启用时,给定的指令不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程序(handler)。
舍入操作控制字段658—其内容辨别要执行一组舍入操作中的哪一个(例如向上舍入、向下舍入、向零舍入、和舍入到最近)。因此,舍入操作控制字段658允许以每指令方式来改变舍入模式,因此,当需要时特别有用。在处理器包含用于指明舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容覆盖了该寄存器值(能够选择舍入模式,而不需要对这样的控制寄存器执行节省-修改-恢复是有利的)。
没有存储器访问指令模板—数据转换类型操作
在没有存储器访问数据转换类型操作615指令模板中,beta字段654被解释为数据转换字段654B,其内容辨别要执行多个数据转换中的哪一个(例如没有数据转换、拌合、广播)。
A级别的存储器访问指令模板
在A级别的存储器访问620指令模板的情况下,alpha字段652被解释为驱逐(eviction)提示字段652B,其内容辨别要使用驱逐提示的哪一个(在图6A中,暂存652B.1和非暂存652B.2分别对:存储器访问、暂存625指令模板和存储器访问、非暂存630指令模板被指明),而beta字段654被解释为数据操纵字段654C,其内容辨别要执行多个数据操纵操作的哪一个(也称为基元(primitive))(例如,没有操纵、广播、源的上转换、以及目的地的下转换)。存储器访问620指令模板包含按比例调整字段660,并可选地包含移位字段662A或者移位按比例调整字段662B。
矢量存储器指令执行:从存储器的矢量加载和至存储器的矢量存储(带有转换支持)。正如常规矢量指令那样,矢量存储器指令以数据元素的方式将数据从/向存储器传输,带有(由被选择为写入掩码的矢量掩码的内容指示为实际传输的)元素。在图6A中,圆角正方形被用于表明特定值存在于字段(例如,修改器字段646的存储器访问646B;alpha字段652/驱逐提示字段652B的暂存652B.1和非暂存652B.2)。
存储器访问指令模板—暂存
暂存数据是可能很快被再使用而受益于缓存的数据。然而,这是提示,不同的处理器可以将其以不同方式实现,包含忽略整个提示。
存储器访问指令模板—非暂存
非暂存数据是不太可能很快被再使用而受益于1级缓存的缓存的数据,并应该被给予驱逐的优先权。然而,这是提示,不同的处理器可以将其以不同方式实现,包含忽略整个提示。
B级别的指令模板
在B级别的指令模板的情况下,alpha字段652被解释为写入掩码控制(Z)字段652C,其内容辨别由写入掩码字段670控制的写入掩码操作是否应该合并或者归零。
B级别的没有存储器访问指令模板
在B级别的非存储器访问605指令模板的情况下,beta字段654的部分被解释为RL字段657A,其内容辨别要执行不同增强操作类型的哪一个(例如,舍入657A.1和矢量长度(VSIZE)657A.2分别对于以下被指明:没有存储器访问、写入掩码控制、部分舍入控制类型操作612指令模板和没有存储器访问、写入掩码控制、VSIZE类型操作617指令模板),而beta字段654的其余部分辨别要执行指明的类型的哪些操作。在图6中,圆角框被用于表明存在特定值(例如,修改器字段646中的没有存储器访问646A;对于RL字段657A的舍入657A.1和VSIZE 657A.2)。在没有存储器访问605指令模板中,按比例调整字段660、移位字段662A、以及移位按比例调整字段662B不存在。
没有存储器访问指令模板—写入掩码控制、部分舍入控制类型操作
在没有存储器访问、写入掩码控制、部分舍入控制类型操作610指令模板中,beta字段654的其余部分被解释为舍入操作字段659A,并且异常事件报告被禁用(给定的指令不报告任何类型的浮点异常标志并且不提出任何浮点异常处理程序)。
舍入操作控制字段659A—如图舍入操作控制字段658那样,其内容辨别要执行一组舍入操作中的哪一个(例如向上舍入、向下舍入、向零舍入、和舍入到最近)。因此,舍入操作控制字段659A允许以每指令方式来改变舍入模式,因此,当需要时特别有用。在处理器包含用于指明舍入模式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容覆盖了该寄存器值(能够选择舍入模式,而不需要对这样的控制寄存器执行节省-修改-恢复是有利的)。
没有存储器访问指令模板—写入掩码控制、VSIZE类型操作
在没有存储器访问、写入掩码控制、VSIZE类型操作617指令模板中,beta字段654的其余部分被解释为矢量长度字段659B,其内容辨别要执行多个数据矢量长度中的哪一个(例如128、856、或者1012字节)。
B级别的存储器访问指令模板
在A级别的存储器访问620指令模板的情况下,beta字段654的部分被解释为广播字段657B,其内容辨别是否要执行广播类型数据操纵操作,而beta字段654的其余部分被解释为矢量长度字段659B。存储器访问620指令模板包含按比例调整字段660,并可选地包含移位字段662A或者移位按比例调整字段662B。
关于字段的额外评论
关于通用矢量友好指令格式600,全操作码字段674示出为包括格式字段640、基本操作字段642、以及数据元素宽度字段664。虽然示出了全操作码字段674包含所有的这些字段的一个实施例,但在不支持所有的这些字段的实施例中,全操作码字段674包含少于所有的这些字段。全操作码字段674提供操作代码。
增强操作字段650、数据元素宽度字段664、以及写入掩码字段670允许这些特征在通用矢量友好指令格式中以每指令方式被指明。
写入掩码字段和数据元素宽度字段的组合创建类型化的(typed)指令,因其允许基于不同的数据元素宽度来应用掩码。
指令格式要求相对小数量的位,因为其基于其他字段的内容,对于不同目的再使用不同的字段。例如,一个观点是:修改器字段的内容在图6A-B上的没有存储器访问605指令模板与图6A-B上的存储器访问6250指令模板之间选择;而级别字段668的内容在图6A的指令模板610/615与图6B的612/617之间的那些非存储器访问605指令模板内选择;并且级别字段668的内容在图6A的指令模板625/830与图6B的627之间的那些存储器访问620指令模板内选择。从另一个观点,级别字段668的内容分别在图6A和B的A级别与B级别指令模板之间选择;而修改器字段的内容在图6A的指令模板605和620之间的那些A级别指令模板内选择;并且修改器字段的内容在图6B的指令模板605和620之间的那些B级别指令模板内选择。在级别字段的内容表明A级别指令模板的情况下,修改器字段646的内容选择alpha字段652(在rs字段652A与EH字段652B之间)的解释。在相关方式中,修改器字段646以及级别字段668的内容选择是否alpha字段被解释为rs字段652A、EH字段652B、或者写入掩码控制(Z)字段652C。在级别和修改器字段表明A级别没有存储器访问操作的情况下,增强字段的beta字段的解释基于rs字段的内容而改变;而在级别和修改器字段表明B级别没有存储器访问操作的情况下,beta字段的解释依赖于RL字段的内容。在级别和修改器字段表明A级别存储器访问操作的情况下,增强字段的beta字段的解释基于基本操作字段的内容而改变;而在级别和修改器字段表明B级别存储器访问操作的情况下,增强字段的beta字段的广播字段657B的解释基于基本操作字段的内容而改变。因此,基本操作字段、修改器字段和增强操作字段的组合允许指明甚至更宽种类的增强操作。
A级别和B级别内发现的各种指令模板在不同情形下是有益的。当由于性能原因期望归零写入掩码或者更小的矢量长度时,A级别是有用的。例如,由于不再需要人为地与目的地合并,当使用重命名时归零允许避免假依赖;作为另一个示例,当用矢量掩码来模拟更短的矢量尺寸时,矢量长度控制缓解了存储-加载转发问题。当有如下期望时B级别是有用的:1)当同时使用舍入模式控制时允许浮点异常(即,当SAE字段的内容表明否);2)能够使用上转换、拌合、互换、和/或下转换;3)在图形数据类型上操作。例如,上转换、拌合、互换、下转换、以及图形数据类型减小当与不同的格式的源工作时要求的指令的数量;作为另一个示例,允许异常的能力提供与指引的舍入模式的全IEEE合规。
示例性特定矢量友好指令格式
图7A-C是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。图7A-C示出特定矢量友好指令格式700,其在指明位置、尺寸、解释、以及字段的顺序、以及用于那些字段中一些的值的意义上是特定的。特定矢量友好指令格式700可以被用于扩展x86指令集,因此,一些字段类似于被用于现有x86指令集及其扩展(例如AVX)的那些或者与其相同。该格式保持符合前缀编码字段、实际操作码字节字段、MOD R/M字段、SIB字段、移位字段、以及具有扩展的现有x86指令集的立即字段。示出了来自图6的字段,其中来自图7A-C的字段映射到所述字段。
应该理解的是,尽管出于示例性目的,参考通用矢量友好指令格式600的上下文中的特定矢量友好指令格式700说明了本发明的实施例,但本发明不限于特定矢量友好指令格式700,除了当要求保护时。例如,通用矢量友好指令格式600考虑对于各种字段的各种可能的尺寸,而特定矢量友好指令格式700示出为具有特定尺寸的字段。通过特定示例的方式,虽然数据元素宽度字段664被示出为特定矢量友好指令格式700中的1位字段,但本发明不限于此(即,通用矢量友好指令格式600考虑其他尺寸的数据元素宽度字段664)。
格式—图7A-C
通用矢量友好指令格式600包含以图7A-C示出的顺序的下文列出的下面的字段。
EVEX前缀(字节0-3)
EVEX前缀702—以4字节形式编码。
格式字段640(EVEX字节0,位[7:0])—第一字节(EVEX字节0)是格式字段640,并且其含有0x62(在本发明的一个实施例中,用于辨别矢量友好指令格式的唯一值)。
第二至第四字节(EVEX字节1-3)包含提供特定能力的位字段的数量。
REX字段705(EVEX字节1,位[7-5])—包括EVEX.R位字段(EVEX字节1,位[7]—R)、EVEX.X位字段(EVEX字节1,位[6]—X)、以及657BEX字节1,位[5]—B)。EVEX.R、EVEX.X、以及EVEX.B位字段提供与对应的VEX位字段相同的功能,并且使用1s补码形式被编码,即,ZMM0被编码为1111B,ZMM15被编码为0000B。指令的其他字段对寄存器索引的更低3个位进行编码,如本领域已知的那样(rrr、xxx、以及bbb),以便Rrrr、Xxxx、以及Bbbb可以通过增加EVEX.R、EVEX.X、以及EVEX.B来形成。
REX'字段710—这是REX'字段710的第一部分,并且是EVEX.R'位字段(EVEX字节1,位[4]—R'),其被用于将扩展的32寄存器集合的高16或者低16编码。在本发明一个实施例中,该位以及其他下文表明的位,存储为位反转格式,以从实际操作码字节是62的BOUND指令辨别(在周知x86的32位模式中),但是不在MOD R/M字段(下述)中接受MOD字段中的11的值;本发明的替代实施例不存储该位以及其他下文表明的反转格式的位。1的值被用于编码低16个寄存器。换言之,R'Rrrr是通过合成EVEX.R'、EVEX.R、以及来自其他字段的其他RRR形成的。
操作码映射字段715(EVEX字节1,位[3:0]—mmmm)—其内容对隐含的引导操作码字节(0F、0F38,或者0F3)进行编码。
数据元素宽度字段664(EVEX字节2,位[7]—W)—表现为符号EVEX.W。EVEX.W被用于定义数据类型(32位数据元素或者64位数据元素)的粒度(尺寸)。
EVEX.vvvv720(EVEX字节2,位[6:3]—vvvv)—EVEX.vvvv的角色可以包含如下:1)EVEX.vvvv对以反转(1s补码)形式指明的第一源寄存器操作数进行编码,并且对于具有2或者更多的源操作数的指令有效;2)EVEX.vvvv对于某些矢量偏移对以1s补码形式指明的目的地寄存器操作数进行编码;或者3)EVEX.vvvv不编码任何操作数,该字段被保留并应该含有1111b。因此,EVEX.vvvv字段720对以反转(1s补码)形式存储的第一源寄存器说明符的4低阶位进行编码。根据指令,额外的不同EVEX位字段被用于将说明符尺寸扩展至32个寄存器。
EVEX.U 668级别字段(EVEX字节2,位[2]—U)—如果EVEX.U=0,其表明A级别或者EVEX.U0;如果EVEX.U=1,其表明B级别或者EVEX.U1。
前缀编码字段725(EVEX字节2,位[1:0]—pp)—对于基本操作字段提供额外的位。除了在EVEX前缀格式中提供对旧有SSE指令的支持,这还具有的好处是使SIMD前缀紧凑(并非要求字节来表达SIMD前缀,EVEX前缀仅需要2位)。在一个实施例中,为了支持在旧有格式和EVEX前缀格式中使用SIMD前缀(66H,F2H,F3H)的旧有SSE指令,这些旧有SIMD前缀被编码为SIMD前缀编码字段;并且在运行时在被提供给解码器的PLA之前被扩展为旧有SIMD前缀(使得PLA能够执行这些旧有的指令的旧有和EVEX格式这两者而不用修改)。尽管更加新的指令能够直接使用EVEX前缀编码字段的内容作为操作码扩展,但某些实施例为一致性以类似的方式扩展,但是允许由这些旧有的SIMD前缀指明不同的意思。替代的实施例可以重新设计PLA来支持2位SIMD前缀编码,因此,不需要该扩展。
alpha字段652(EVEX字节3,位[7]—EH;也称为EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、以及EVEX.N;也示出为α)—如前面描述的,该字段是上下文特定的。本文稍后提供额外的说明。
beta字段654(EVEX字节3,位[6:4]—SSS,也称为EVEX.s2-0、EVEX.r2-0、EVEX.rrl、EVEX.LL0、EVEX.LLB;也示出为βββ)—如前面描述的,该字段是上下文特定的。本文稍后提供额外的说明。
REX'字段710—这是REX'字段的其余部分并且是EVEX.V'位字段(EVEX字节3,位[3]—V'),其可以被用于对扩展的32寄存器集合的高16或者低16进行编码。该位以位反转格式存储。1的值被用于编码低16个寄存器。换言之,V'VVVV通过将EVEX.V'、EVEX.vvvv组合而形成。
写入掩码字段670(EVEX字节3,位[2:0]—kkk)—其内容指明写入掩码寄存器中的寄存器的索引,如前面描述的。在本发明的一个实施例中,特定值EVEX.kkk=000具有特殊的行为,暗指没有写入掩码被用于特定指令(这可以以各种方式实现,包含使用硬连线至全一(all ones)的写入掩码,或者绕开掩码操作硬件的硬件)。
实际操作码字段730(字节4)
这也称为操作码字节。操作码的部分在该字段中指明。
MOD R/M字段740(字节5)
修改器字段646(MODR/M.MOD,位[7-6]-MOD字段742)—如前面描述的,MOD字段742的内容在存储器访问和非存储器访问操作之间辨别。该字段将在本文稍后进一步说明。
MODR/M.reg字段744,位[5-3]—ModR/M.reg字段的角色能够总结为2个情形:ModR/M.reg对目的地寄存器操作数或者源寄存器操作数进行编码,或者ModR/M.reg被视为操作码扩展,并且不被用于对任何指令操作数进行编码。
MODR/M.r/m字段746,位[2-0]—ModR/M.r/m字段的角色可以包含如下:ModR/M.r/m对参考存储器地址的指令操作数进行编码,或者ModR/M.r/m对目的地寄存器操作数或者源寄存器操作数进行编码。
按比例调整、索引、基本(SIB)字节(字节6)
按比例调整字段660(SIB.SS,位[7-6]—如前面描述的,按比例调整字段660的内容用于存储器地址产生。该字段将在本文稍后进一步说明。
SIB.xxx 754(位[5-3]和SIB.bbb 756(位[2-0])—这些字段的内容在前面关于寄存器索引Xxxx和Bbbb被提及。
移位字节(字节7或者字节7-10)
移位字段662A(字节7-10)—当MOD字段742含有10时,字节7-10是移位字段662A,其与旧有的32位移位(disp32)相同工作,并以字节粒度工作。
移位因子字段662B(字节7)—当MOD字段742含有01时,字节7是移位因子字段662B。该字段的位置与旧有的x86指令集8位移位(disp8)相同,旧有的x86指令集8位移位(disp8)以字节粒度工作。由于disp8是签名扩展的,其仅能够在-128与127字节偏移之间处理;在64字节缓存线方面,disp8使用8位,其能够仅被设定为4个真正有用的值-128、-64、0、以及64;由于经常需要更大范围,使用disp32;然而,disp32要求4字节。与disp8和disp32相反,移位因子字段662B是disp8的重新解释;当使用移位因子字段662B时,实际的移位由移位因子字段的内容乘以存储器操作数访问的尺寸(N)来确定。这种类型的移位称作disp8*N。这减小了平均指令长度(用于移位的单个字节但是具有更大的范围)。这样的压缩的移位基于如下假定:有效移位是存储器访问的多个粒度,因此,地址偏移的冗余的低阶位不需要被编码。换言之,移位因子字段662B替换旧有的x86指令集8位移位。因此,移位因子字段662B以与x86指令集8位移位相同的方式被编码(所以ModRM/SIB编码规则没有改变),例外仅是disp8过载至disp8*N。换言之,编码规则或者编码长度没有改变,仅由硬件对移位值的解释改变了(其需要按照存储器操作数的尺寸,按比例调整移位以获得字节方式的地址偏移)。
立即
立即字段672如前面描述地操作。
示例性寄存器架构—图8
图8是根据本发明的一个实施例的寄存器架构800的框图。寄存器文件和寄存器架构的寄存器被列出如下:
矢量寄存器文件810—在示出的实施例中,有812位宽的32个矢量寄存器;这些寄存器称作zmm0至zmm31。较低16个的zmm寄存器的低阶656位叠加在寄存器ymm0-16上。较低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)叠加在寄存器xmm0-15上。特定矢量友好指令格式700对这些叠加的寄存器文件进行操作,如下方表格示出的那样。
换言之,矢量长度字段659B在最大长度与一个或多个其他更短的长度之间选择,每个这样的更短的长度是之前长度的一半长度;并且没有矢量长度字段659B的指令模板对最大矢量长度进行操作。此外,在一个实施例中,特定矢量友好指令格式700的B级别指令模板对打包的或者标量单/双精度浮点数据和打包的或者标量整数数据进行操作。标量操作是在zmm/ymm/xmm寄存器中最低阶数据元素位置执行的操作;高阶数据元素位置要么保持与在指令之前的相同,要么根据实施例被归零。
写入掩码寄存器815—在示出的实施例中,有8个写入掩码寄存器(k0至k7),每个尺寸为64位。如前面描述的,在本发明的一个实施例中,矢量掩码寄存器k0不能被用作写入掩码,当通常表明k0的编码用于写入掩码时,其选择硬连线写入掩码0xFFFF,有效对该指令禁用写入掩码操作。
多媒体扩展控制状态寄存器(MXCSR)820—在示出的实施例中,该32位寄存器提供被用于浮点操作的状态和控制位。
通用寄存器825—在示出的实施例中,有16个与现有x86寻址模式一起使用的64位通用寄存器,以处理存储器操作数。这些寄存器用以下的名字参考:RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、以及R8至R15。
扩展标志(EFLAGS)寄存器830—在示出的实施例中,该32位寄存器被用于记录很多指令的结果。
浮点控制字(FCW)寄存器835和浮点状态字(FSW)寄存器840—在示出的实施例中,这些寄存器由x87指令集扩展使用来设定舍入模式、异常掩码以及FCW情况下的标志,并在FSW的情况下对异常保持追踪。
标量浮点堆栈寄存器文件(x87堆栈)845在其上混杂(aliased)有MMX打包的整平寄存器文件850—在示出的实施例中,x87堆栈是被用于对32/64/80位浮点数据使用x87指令集扩展来执行标量浮点操作的8个元素堆栈;而MMX寄存器被用于对64位打包的整数数据执行操作,以及对在MMX与XMM寄存器之间执行的一些操作保持操作数。
分段寄存器855—在示出的实施例中,有6个16位寄存器使用来存储用于分段的地址产生的数据。
RIP寄存器865—在示出的实施例中,该64位寄存器存储指令指针。
本发明的替代实施例可以使用更宽或者更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少、或者不同寄存器文件和寄存器。
示例性按序处理器架构—图9A-9B
图9A-B示出示例性按序处理器架构的框图。这些示例性实施例围绕用宽矢量处理器(VPU)增强的按序CPU核心的多个例示而设计。核心通过高带宽互连网络与一些固定功能逻辑、存储器I/O接口、以及其他必需的I/O逻辑进行通信,根据e13t应用。例如,作为独立GPU的该实施例的实施方式将典型地包含PCIe总线。
图9A是根据本发明的实施例的单个的CPU核心、连同其至管芯上互连网络902的连接以及其2级(L2)缓存904的本地子集的框图。指令解码器900支持具有包含特定矢量指令格式700的扩展的x86指令集。虽然在本发明的一个实施例中(为简化设计),标量单元908和矢量单元910使用分离的寄存器集合(分别是标量寄存器912和矢量寄存器914),并且其间传输的数据被写入至存储器,进而,从1级(L1)缓存906读回,但本发明的替代实施例可以使用不同方法(例如,使用单个的寄存器集合或者包含允许数据在2个寄存器文件之间传输而不用写入和读回的通信路径)。
L1缓存906允许低延时访问至缓存存储器至标量和矢量单元。连同矢量友好指令格式的加载操作指令,这意味着L1缓存906能够有些像扩展的寄存器文件那样被处理。这显著改善了很多算法的性能,尤其是带有驱逐提示字段652B。
L2缓存904的本地子集是全局L2缓存的部分,被分割为分离的本地子集,每个CPU核心为一个。每个CPU具有向其自身的L2缓存904的本地子集的直接存取路径。由CPU核心读出的数据存储在其L2缓存子集904,并且能够与访问其自己的本地L2缓存子集的其他CPU并行地快速访问。由CPU核心写入的数据存储在其自身的L2缓存子集904,并且如果需要的话从其他子集刷入(flushed)。环形网络保证对于共享数据的相干性。
图9B是根据本发明的实施例的图9A中的CPU核心的部分的分解图。图9B包含L1缓存904的L1数据缓存906A部分、以及关于矢量单元910和矢量寄存器914的更多细节。具体而言,矢量单元910是16宽矢量处理单元(VPU)(参见16宽ALU 928),其执行整数、单精度浮点、以及双精度浮点指令。VPU支持将寄存器输入用拌合单元920拌合,用数字转换单元922A-B的数字转换,以及用复制单元924复制到存储器输入。写入掩码寄存器926允许预测得到的矢量写入。
寄存器数据能够以各种方式拌合,例如支持矩阵乘法。来自存储器的数据能够跨VPU道被复制。这是图形和非图形并行数据处理中的通常操作,其显著增加了缓存效率。
环形网络是双向的,以允许代理(诸如CPU核心、L2缓存和其他逻辑框)在芯片内互相彼此通信。每个环数据路径在每个方向是812位宽。
示例性乱序架构—图10
图10是示出根据本发明的实施例的示例性乱序架构的框图,并能够被看作是诸如上述图1中的流水线的流水线的更具体说明。具体而言,图10示出已被修改为合并矢量友好指令格式及其执行的周知的示例性乱序架构。在图10中,箭头标注两个或更多个单元之间的耦合,并且箭头的方向表明在这些单元之间数据流的方向。图10包含耦合至执行引擎单元1010的前端单元1005和存储器单元1015;执行引擎单元1010还耦合至存储器单元1015。
前端单元1005包含耦合至2级(L2)分支预测单元1022的1级(L1)分支预测单元1020。L1和L2品牌预测单元1020和1022耦合至L1指令缓存单元1024。L1指令缓存单元1024耦合至指令翻译后备缓冲器(TLB)1026,其还耦合至指令获取和预解码单元1028。指令获取和预解码单元1028耦合至指令队列单元1030,其还耦合至解码单元1032。解码单元1032包括复杂解码器单元1034以及3个简单解码器单元1036、1038、以及1040。解码单元1032包含微码ROM单元1042。解码单元1032可以如前所述,在解码阶段部分进行操作。L1指令缓存单元1024还耦合至存储器单元1015中的L2缓存单元1048。指令TLB单元1026还耦合至存储器单元1015中的第二级TLB单元1046。解码单元1032、微码ROM单元1042、以及循环流检测器单元1044每个耦合至执行引擎单元1010中的重命名/分配器单元1056。
执行引擎单元1010包含重命名/分配器单元1056,其耦合至隐退单元(retirement unit)1074和统一调度器单元1058。隐退单元1074还耦合至执行单元1060并包含重新排序缓冲单元1078。统一调度器单元1058还耦合至物理寄存器文件单元1076,其耦合至执行单元1060。物理寄存器文件单元1076包括矢量寄存器单元1077A、写入掩码寄存器单元1077B、以及标量寄存器单元1077C;这些寄存器单元可以提供矢量寄存器810、矢量掩码寄存器815、以及通用寄存器825;并且物理寄存器文件单元1076可以包含额外的未示出的寄存器文件(例如,混杂在MMX打包的整平的寄存器文件850上的标量浮点堆栈寄存器文件845)。执行单元1060包含3个混合的标量和矢量单元1062、1064、以及1072;负载单元1066;存储地址单元1068;存储数据单元1070。负载单元1066、存储地址单元1068、以及存储数据单元1070每个还耦合至存储器单元1015中的数据TLB单元1052。
存储器单元1015包含耦合至数据TLB单元1052的第二级TLB单元1046。数据TLB单元1052耦合至L1数据缓存单元1054。L1数据缓存单元1054还耦合至L2缓存单元1048。在一些实施例中,L2缓存单元1048还耦合至存储器单元1015内和/或外的L3和更高的缓存单元1050。
以示例的方式,示例性乱序架构可以实现处理流水线8200如下:1)指令获取和预解码单元1028执行获取和长度解码阶段;2)解码单元1032执行解码阶段;3)重命名/分配器单元1056执行分配阶段和重命名阶段;4)统一调度器1058执行调度阶段;5)物理寄存器文件单元1076、重新排序缓冲单元1078、以及存储器单元1015执行寄存器读出/存储器读出阶段;执行单元1060执行:执行/数据转换阶段;6)存储器单元1015和重新排序缓冲单元1078执行写回/存储器写入阶段1960;7)隐退单元1074执行ROB读出阶段;8)各种单元可以涉及异常处理阶段;和9)隐退单元1074和物理寄存器文件单元1076执行提交(commit)阶段。
示例性单核和多核处理器—图15
图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多核处理器1500的框图。图15的实线框示出具有单核1502A、系统代理1510、一个或多个总线控制器单元1516的集合的处理器1500,而可选的附加的虚线框示出具有系统代理单元1510中的多个核心1502A-N、一个或多个集成存储器控制器单元1514的集合、以及集成图形逻辑1508的替代处理器1500。
存储器层次包含核心内的一级或多级缓存、一组或一个或多个共享的缓存单元1506、以及耦合至集成存储器控制器单元1514的集合的外部存储器(未示出)。共享的缓存单元1506的集合可以包含一个或多个中级缓存(诸如2级(L2)、3级(L3)、4级(L4)或者其他级缓存、最后一级缓存(LLC)、和/或其组合)。虽然在一个实施例中,基于环的互连单元1512将集成图形逻辑1508、共享的缓存单元1506的集合、以及系统代理单元1510互连,但替代实施例可以使用任何数量的周知技术用于将这样的单元互连。
在一些实施例中,一个或多个核心1502A-N能够多线程。系统代理1510包含协调和操作核心1502A-N的那些部件。系统代理单元1510例如可以包含功率控制单元(PCU)和显示器单元。PCU可以包含调节核心1502A-N的功率状态和集成图形逻辑1508所需要的逻辑和部件。显示器单元用于驱动一个或多个外部连接的显示器。
在架构和/或指令集方面,核心1502A-N可以是同构或者异构的。例如,一些核心1502A-N可以按序(例如,如图9A和9B所示)而其他乱序(例如,如图10所示)。作为另一个示例,两个或更多个核心1502A-N可以能够执行相同的指令集,而其他可以能够执行该指令集的仅子集或者不同指令集。至少一个核心能够执行本文说明的矢量友好指令格式。
处理器可以是通用处理器,诸如可从加州圣克拉拉英特尔公司得到的CoreTMi3、i5、i7、2Duo和Quad、XeonTM、或者ItaniumTM处理器。替代地,处理器可以来自另一个公司。处理器可以是特殊用途处理器,诸如例如网络或者通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器可以在一个或多个芯片上实现。处理器1500可以是部分和/或可以实现在一个或多个基底上,其使用任何多个处理技术(诸如例如BiCMOS、CMOS或者NMOS)。
示例性计算机系统和处理器—图11至13
图11-13是适于包含处理器1500的示例性系统,而图14是可以包含一个或多个核心1502的示例性片上系统(SoC)。本领域已知的用于膝上型计算机、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、开关、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置也是适当的。一般而言,能够包含如本文公开的处理器和/或其他执行逻辑的很多种类的系统或者电子设备是通常合适的。
现在参考图11,示出的是依据本发明的一个实施例的系统1100的框图。系统1100可以包含一个或多个处理器1110、1115,其耦合至图形存储器控制器中心(GMCH)1120。额外的处理器1115的可选本质在图11中用虚线表示。
每个处理器1110、1115可以是一些版本的处理器1500。然而,应该注意的是,集成图形逻辑和集成存储器控制单元不大可能存在于处理器1110、1115中。
图11示出了GMCH 1120可以耦合至存储器1140,其例如可以是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性缓存相关联。
GMCH 1120可以是芯片组或者芯片组的一部分。GMCH 1120可以与处理器1110、1115通信,并控制在处理器1110、1115和存储器1140之间的交互。GMCH 1120还可以作为处理器1110、1115与系统1100的其他元素之间的加速的总线接口。对于至少一个实施例而言,GMCH 1120经由多点分支总线(诸如前端总线(FSB)1195)与处理器1110、1115通信。
此外,GMCH 1120耦合至显示器1145(诸如平板显示器)。GMCH 1120可以包含集成图形加速器。GMCH 1120还耦合至输入/输出(I/O)控制器中心(ICH)1150,其可以被用于将各种外围设备耦合至系统1100。例如图11的实施例示出的是外部图形设备1160,其可以是耦合至ICH 1150的分立图形设备,以及另一个外围设备1170。
替代地,额外的或者不同的处理器还可以存在于系统1100中。例如,额外的处理器1115可以包含与处理器1110相同的额外的处理器、与处理器1110异构或者非对称的额外的处理器、加速器(诸如例如图形加速器或者数字信号处理(DSP)单元)、现场可编程门阵列、或者任何其他处理器。在包含架构、微架构、热、功耗特征等的优点度量谱方面,在物理资源1110、1115之间能够有各种差异。这些差异可以在处理元件1110、1115之间将其自己有效地表现为不对称性和异构性。对于至少一个实施例而言,各种处理元件1110、1115可以驻存在相同的管芯封装中。
现在参考图12,示出的是依据本发明的实施例的第二系统1200的框图。如图12所示,多处理器系统1200是点对点互连系统,并且包含第一处理器1270和经由点对点互连1250耦合的第二处理器1280。如图12所示,每个处理器1270和1280可以是一些版本的处理器1500。
替代地,一个或多个处理器1270、1280可以是除处理器外的元素,诸如加速器或者现场可编程门阵列。
虽然仅示出有2个处理器1270、1280,但要理解的是本发明的范围不限于此。在其他实施例中,一个或多个额外的处理元件可以存在于给定的处理器中。
处理器1270还可以包含集成存储器控制器中心(IMC)1272和点对点(P-P)接口1276和1278。类似地,第二处理器1280可以包含IMC 1282和P-P接口1286和1288。处理器1270、1280可以使用点对点(PtP)接口电路1278、1288经由PtP接口1250来交换数据。如图12所示,IMC的1272和1282将处理器耦合至相应存储器,即存储器1242和存储器1244,其可以是本地附接至相应处理器的主存储器的部分。
处理器1270、1280的每个可以经由单独P-P接口1252、1254,使用点对点接口电路1276、1294、1286、1298,与芯片组1290交换数据。芯片组1290还可以经由高性能图形接口1239与高性能图形电路1238交换数据。
共享的缓存(未示出)可以被包含在两个处理器外的任一处理器中,但经由P-P互连与处理器连接,使得任一或者两个处理器的本地缓存信息可以存储在共享的缓存中,如果处理器处于低功率模式。
芯片组1290可以经由接口1296耦合至第一总线1216。在一个实施例中,第一总线1216可以是外围部件互连(PCI)总线,或者诸如PCI Express总线或者另一个第三代I/O互连总线的总线,尽管本发明的范围不限于此。
如图12所示,各种I/O设备1214可以耦合至第一总线1216、以及将第一总线1216耦合至第二总线1220的总线桥1218。在一个实施例中,第二总线1220可以是低针数(LPC)总线。各种设备可以耦合至第二总线1220,例如在一个实施例中包含键盘/鼠标1222、通信设备1226和数据存储单元1228(诸如可以包含代码1230的盘驱动器或者其他海量存储设备)。此外,音频I/O 1224可以耦合至第二总线1220。要注意的是,其他架构是可能的。例如,不是图12的点对点架构,系统可以实现多点分支总线或者其他这样的架构。
现在参考图13,示出的是依据本发明的实施例的第三系统1300的框图。图12和13中相似的元素承载了相似的附图标记,并且图12的某些方面已从图13省略,以避免模糊图13的其他方面。
图13示出了处理元件1270、1280可以分别包含集成存储器和I/O控制逻辑(“CL”)1272和1282。对于至少一个实施例,CL 1272、1282可以包含存储器控制器中心逻辑(IMC),诸如结合图11和12上述的那样。此外,CL 1272、1282还可以包含I/O控制逻辑。图13示出了不仅存储器1242、1244耦合至CL 1272、1282,而且I/O设备1314也耦合至控制逻辑1272、1282。旧有I/O设备1315耦合至芯片组1290。
现在参考图14,示出的是依据本发明的实施例的SoC 1400的框图。图15中的类似的元素承载了相似的附图标记。另外,虚线框是更高级SoC的可选的特征。在图14中,互连单元1402耦合至:应用处理器1410,其包含一个或多个核心1502A-N和共享缓存单元1506的集合;系统代理单元1510;总线控制器单元1516;集成存储器控制器单元1514;一组或者一个或多个介质处理器1420,其可以包含集成图形逻辑1508、用于提供静止和/或视频照相机功能的图像处理器1424、用于提供硬件音频加速的音频处理器1426、以及用于提供视频编码/解码加速的视频处理器1428;静态随机存取存储器(SRAM)单元1430;直接存储器存取(DMA)单元1432;以及用于耦合至一个或多个的外部显示器的显示器单元1440。
本文公开的机制的实施例可以实现在硬件、软件、固件、或者这样的实施方式方法的组合中。本发明的实施例可以实现为在可编程系统上执行的计算机程序或者程序代码,可编程系统至少包括一个处理器、存储系统(包含易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备。
程序代码可以适用到输入数据来执行本文说明的功能并产生输出信息。输出信息可以以已知的方式应用到一个或多个输出设备。出于本申请的目的而言,处理系统包含具有处理器(诸如例如数字信号处理器(DSP)、微控制器、特定应用集成电路(ASIC)、或者微处理器)的任何系统。
程序代码可以用高级过程或者面向对象编程语言实现来与处理系统通信。如果需要的话,程序代码还可以用汇编或者机器语言实现。实际上,本文说明的机构的范围不限于任何特定编程语言。在任何情况下,语言可以是编译或解释的语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性指令实现,其代表处理器内的各种逻辑,当由机器读出时,使机器生成执行本文说明的技术的逻辑。该代表被称为“IP核”,可以被存储在有形、机器可读介质中,并供应至各种客户或者制造设施,以载入到实际上制作逻辑或者处理器的生成机器中。
这样的机器可读存储介质可以包含但不限于:非暂时性、由机器或者设备制造或形成的物品的有形布置,包含存储介质(诸如硬盘)、任何其他类型的盘(包含软盘、光盘(压缩光盘只读存储器(CDROM)、压缩可重写光盘(CD-RW))、以及磁光盘)、半导体设备(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存存储器、电可擦除可编程只读存储器(EEPROM))、磁或者光卡、或者适于存储电子指令的任何其他类型的介质。
相应地,本发明的实施例还包含含有指令矢量友好指令格式或者含有设计数据的非暂时性、有形机器可读介质,诸如定义了本文说明的构造、电路、装置、处理器和/或系统特征的硬件描述语言(HDL)。这样的实施例还可以称作程序产品。
在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令翻译(例如使用静态二进制翻译、包含动态汇编的动态二进制翻译)、变形、模拟、或者转换至通过核心处理的一个或多个其他指令。指令转换器可以实现在软件、硬件、固件、或者其组合中。指令转换器可以在处理器上、在处理器外、或者部分在处理器上部分在处理器外。
图16是根据本发明的实施例的对比用于将源指令集中的二进制指令转换至目标指令集中的二进制指令的软件指令转换器的使用的框图。在示出的实施例中,指令转换器是软件指令转换器,尽管替代地指令转换器可以实现在软件、固件、硬件、或者各种其组合中。图16示出以高级语言1602写的程序可以使用x86编译器1604编译,以产生可以由具有至少一个x86指令集核心的处理器1616原生执行的x86二进制代码1606(假定编译的一些指令是矢量友好指令格式)。具有至少一个x86指令集核心的处理器1616代表:能够执行与具有至少一个x86指令集核心的英特尔处理器实质上相同功能的任何处理器,是通过兼容执行或者处理(1)英特尔x86指令集核心的指令集的实质部分,或者(2)目标为运行在具有至少一个x86指令集核心的英特尔处理器上的应用或者其他软件的目标代码版本,以实现与具有至少一个x86指令集核心的英特尔处理器实质上相同的结果。x86编译器1604代表可操作来产生x86二进制代码1606(例如目标代码)的编译器,无论是否有额外的链接处理,其可以在具有至少一个x86指令集核心的处理器1616上执行。类似地,图16示出以高级语言1602写的程序可以使用替代的指令集编译器1608来进行编译,以产生替代的指令集二进制代码1610,其可以由没有至少一个x86指令集核心的处理器1614原生执行(例如,具有执行MIPS Technologies of Sunnyvale,CA的MIPS指令集的核心和/或执行ARM Holdings of Sunnyvale,CA的ARM指令集的核心的处理器)。指令转换器1612被用于将x86二进制代码1606转换为可以由没有x86指令集核心的处理器1614原生执行的代码。该转换的代码不太可能与替代的指令集二进制代码1610相同,因为难以做出能够进行该操作的指令转换器;然而,转换的代码将完成一般操作,并由来自替代的指令集的指令构成。因此,指令转换器1612代表软件、固件、硬件、或者其组合,通过模拟、仿真或者任何其他处理,允许不具有x86指令集处理器或者核心的处理器或者其他电子设备执行x86二进制代码1606。
本文公开的矢量友好指令格式中的指令的某些操作可以由硬件部件执行,并可以实施在机器可执行指令(其被用于使或者至少导致:用执行该操作的指令编程的电路或者其他硬件部件)中。电路可以包含通用或者特殊用途处理器、或者逻辑电路,仅举几个例子。操作还可以可选地由硬件和软件的组合执行。执行逻辑和/或处理器可以包含:响应于从机器指令导出的机器指令或者一个或多个控制信号来存储指明指令的结果操作数的、特定或者特别电路或者其他逻辑。例如,本文公开的指令的实施例可以在图11-16的一个或多个系统中执行,并且矢量友好指令格式中的指令的实施例可以存储在系统中要执行的程序代码中。另外,这些图的处理元件可以利用本文详述的一个详细的流水线和/或架构(例如按序和乱序架构)。例如,按序架构的解码单元可以将指令解码,将解码指令传递至矢量或者标量单元等
上述说明旨在示出本发明的优选实施例。另外从上述讨论应该显而易见的是尤其是在技术的这样的、成长快速且进一步的发展难以预料的领域中,本发明在布置中能够被修改,并由本领域的技术人员细化,而不脱离所附的权利要求和其等同物的范围内的本发明的原理。例如,方法的一个或多个操作可以合成或者进一步拆开。
替代实施例
虽然已说明的实施例将原生执行矢量友好指令格式,但本发明的替代实施例可以通过运行在执行不同指令集的处理器(例如,执行MIPSTechnologies of Sunnyvale,CA的MIPS指令集的处理器、执行ARM Holdingsof Sunnyvale,CA的ARM指令集的处理器)上的模拟层来执行矢量友好指令格式。另外,虽然图中的流程图示出由本发明的某些实施例执行的操作的特定顺序,但应该理解的是这样的顺序是示例性的(例如,替代实施例可以以不同顺序执行操作,组合某些操作,重叠某些操作等)。
在上述说明中,出于解释的目的,已叙述了大量具体细节,以提供对本发明的实施例的彻底理解。然而,本领域的技术人员可以知晓的是一个或多个其他实施例可以被实践而没有这些具体细节中的一些。说明的特定实施例被提供不是限制本发明,而是示出本发明的实施例。本发明的范围不由上述特定示例确定,而仅由权利要求确定。

Claims (18)

1.一种处理器,包括:
指令执行流水线,其具有用来执行指令的功能单元,所述指令将多个矢量元素与一输入值进行比较,每个所述矢量元素和所述输入值具有标识数据内的位置的第一相应的段和具有所述数据的字节序列的第二相应的段,所述功能单元具有:
比较电路,用于将输入矢量元素的相应的字节序列与所述输入值的字节序列进行比较,来识别每个比较的匹配字节的数量;以及
差异电路,用于确定所述数据内所述输入矢量的元素的字节序列与所述输入值的字节序列之间的相应的距离。
2.如权利要求1所述的处理器,其中,所述指令具有标识立即操作数的格式。
3.如权利要求2所述的处理器,其中,所述立即操作数指明输入矢量元素的字节序列与所述输入值的字节序列之间的最大允许距离。
4.如权利要求2所述的处理器,其中,所述立即操作数指明来自所述比较电路的最小匹配数量。
5.如权利要求2所述的处理器,其中,所述立即操作数指明在所述指令的结果矢量的元素内的位置,其中,匹配的数量以及每个所述矢量元素的距离位于该位置处。
6.如权利要求2所述的处理器,其中,所述功能单元具有输入端,用来接收标识所述输入矢量的尺寸的掩码。
7.一种处理器,包括:
指令执行流水线,其具有用来执行指令的功能单元,所述指令将多个矢量元素与一输入值进行比较,每个所述矢量元素和所述输入值具有标识数据内的位置的第一相应的段和具有所述数据的字节序列的第二相应的段,所述功能单元具有:
i)比较电路,用于将输入矢量元素的相应的字节序列与所述输入值的字节序列进行比较,来识别每个比较的匹配字节的数量;以及
ii)差异电路,用于确定所述输入矢量的元素的字节序列与所述数据内所述输入值的字节序列之间的相应的距离,所述指令执行流水线具有功能单元比较电路,所述功能单元比较电路用于比较第二输入矢量的元素内的值并识别所述值中的最大的一个。
8.如权利要求7所述的处理器,其中,所述指令具有标识立即操作数的格式。
9.如权利要求8所述的处理器,其中,所述立即操作数指明输入矢量元素的字节序列与所述输入值的字节序列之间的最大允许距离。
10.如权利要求8所述的处理器,其中,所述立即操作数指明来自所述比较电路的最小匹配数量。
11.如权利要求8所述的处理器,其中,所述立即操作数指明在所述指令的结果矢量的元素内的位置,其中,匹配的数量以及每个所述矢量元素的距离位于该位置处。
12.如权利要求8所述的处理器,其中,所述功能单元具有输入端,用来接收标识所述输入矢量的尺寸的掩码。
13.一种方法,包括:
执行相同类型的多个指令,每个所述指令接收输入值,所述输入值具有标识数据内的位置的第一段和所述数据的字节序列,每个所述指令具有相应的输入矢量,所述输入矢量具有相应的元素,每个所述元素具有所述数据内的相应的位置和所述数据的相应的字节序列,每个所述指令使其相应的结果被写入同一个矢量寄存器的不同段,每个所述结果提供在所述输入值与所述输入矢量中的相应的一个的元素之间的距离和匹配的数量。
14.如权利要求13所述的方法,还包括在已执行所述指令之后执行另一个指令,该另一个指令确定所述矢量寄存器内的最大匹配数量。
15.如权利要求13所述的方法,其中,每个所述指令具有包含立即操作数的指令格式,所述立即操作数指明所述数据内所述输入值与所述输入矢量的所述元素之间的最大允许距离。
16.如权利要求13所述的方法,其中,每个所述指令具有包含立即操作数的指令格式,所述立即操作数指明在所述矢量寄存器内结果信息要写入的位置。
17.一种具有程序代码的机器可读存储介质,所述程序代码当由处理器处理时,使所述处理器执行方法,包括:
执行相同类型的多个指令,每个所述指令接收输入值,所述输入值具有标识数据内的位置的第一段和所述数据的字节序列,每个所述指令具有相应的输入矢量,所述输入矢量具有相应的元素,每个所述元素具有所述数据内的相应的位置和所述数据的相应的字节序列,每个所述指令使其相应的结果被写入同一个矢量寄存器的不同段,每个所述结果提供在所述输入值与所述输入矢量中的相应的一个的元素之间的距离和匹配的数量。
18.一种处理器,包括:
指令执行流水线,其具有功能单元,所述功能单元具有比较电路,用来比较输入矢量的元素内的值,并识别所述值中的最大的一个。
CN201380062335.XA 2012-12-28 2013-06-27 用于滑动窗口编码算法的指令 Active CN104903850B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/730,732 2012-12-28
US13/730,732 US9489199B2 (en) 2012-12-28 2012-12-28 Vector compare instructions for sliding window encoding
PCT/US2013/048333 WO2014105195A1 (en) 2012-12-28 2013-06-27 Instructions for sliding window encoding algorithms

Publications (2)

Publication Number Publication Date
CN104903850A true CN104903850A (zh) 2015-09-09
CN104903850B CN104903850B (zh) 2018-09-18

Family

ID=51018676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380062335.XA Active CN104903850B (zh) 2012-12-28 2013-06-27 用于滑动窗口编码算法的指令

Country Status (5)

Country Link
US (2) US9489199B2 (zh)
KR (2) KR20170104157A (zh)
CN (1) CN104903850B (zh)
DE (1) DE112013005343T5 (zh)
WO (1) WO2014105195A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9196384B2 (en) 2012-12-28 2015-11-24 Intel Corporation Memory subsystem performance based on in-system weak bit detection
US9536626B2 (en) 2013-02-08 2017-01-03 Intel Corporation Memory subsystem I/O performance based on in-system empirical testing
US9374004B2 (en) 2013-06-28 2016-06-21 Intel Corporation I/O driver transmit swing control
US9218575B2 (en) 2013-09-04 2015-12-22 Intel Corporation Periodic training for unmatched signal receiver
US10387150B2 (en) 2015-06-24 2019-08-20 International Business Machines Corporation Instructions to count contiguous register elements having a specific value in a selected location
US10691453B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector load with instruction-specified byte count less than a vector size for big and little endian processing
US10691456B2 (en) 2015-11-13 2020-06-23 International Business Machines Corporation Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing
CN107315563B (zh) * 2016-04-26 2020-08-07 中科寒武纪科技股份有限公司 一种用于执行向量比较运算的装置和方法
US10191744B2 (en) * 2016-07-01 2019-01-29 Intel Corporation Apparatuses, methods, and systems for element sorting of vectors
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11327862B2 (en) 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US11507374B2 (en) * 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
CN111443947B (zh) * 2020-03-24 2022-09-27 山东大学 基于众核平台上面向二代测序数据的序列比对方法及系统
GB2599652B (en) * 2020-10-06 2023-01-18 Advanced Risc Mach Ltd Masked-vector-comparison instruction
CN115203214B (zh) * 2022-09-16 2023-01-03 杭州谐云科技有限公司 一种报表数据的更新方法和系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010051969A1 (en) * 1998-04-06 2001-12-13 Oberman Stuart F. Floating point addition pipeline including extreme value, comparison and accumulate functions
CN1349159A (zh) * 2001-11-28 2002-05-15 中国人民解放军国防科学技术大学 微处理器向量处理方法
US20060037023A1 (en) * 2004-08-11 2006-02-16 International Business Machines Corporation Method and apparatus for avoiding data dependency hazards in a microprocessor pipeline architecture
US20060155967A1 (en) * 2000-05-30 2006-07-13 Hong Wang Processing essential and non-essential code separately
US20100262806A1 (en) * 2009-04-13 2010-10-14 International Business Machines Corporation Tracking Effective Addresses in an Out-of-Order Processor

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070003A (en) 1989-11-17 2000-05-30 Texas Instruments Incorporated System and method of memory access in apparatus having plural processors and plural memories
US5493689A (en) 1993-03-01 1996-02-20 International Business Machines Corporation System for configuring an event driven interface including control blocks defining good loop locations in a memory which represent detection of a characteristic pattern
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
US5903282A (en) 1997-07-28 1999-05-11 Lsi Logic Corporation Video decoder dynamic memory allocation system and method with an efficient freeze mode
US7129860B2 (en) 1999-01-29 2006-10-31 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US6691305B1 (en) 1999-11-10 2004-02-10 Nec Corporation Object code compression using different schemes for different instruction types
US6950445B2 (en) 2000-11-16 2005-09-27 Telefonaktiebolaget Lm Ericsson (Publ) Communication system and method for shared context compression
US7532358B2 (en) 2002-02-27 2009-05-12 Hewlett-Packard Development Company, L.P. Hardware implemented loss-less page data compressor/decompressor
CN100557579C (zh) 2002-11-12 2009-11-04 雷特泽遥距管理有限责任公司 具有ip能力分区的数据存储设备
WO2005027430A1 (en) 2003-09-12 2005-03-24 Unisearch Limited Method for transmitting data over lossy packet-based communication networks
US6903668B1 (en) 2003-11-18 2005-06-07 M-Systems Flash Disk Pioneers Ltd. Decompression accelerator for flash memory
US7353233B1 (en) 2004-04-16 2008-04-01 Majesco Entertainment Company Apparatus and method for real-time decompression of data streams on limited-resource embedded devices
US7307552B2 (en) 2005-11-16 2007-12-11 Cisco Technology, Inc. Method and apparatus for efficient hardware based deflate
JP4874162B2 (ja) 2007-04-27 2012-02-15 ルネサスエレクトロニクス株式会社 データ展開装置及びデータ展開方法
WO2009005758A2 (en) 2007-06-29 2009-01-08 Rmi Corporation System and method for compression processing within a compression engine
JP2009012324A (ja) 2007-07-05 2009-01-22 Konica Minolta Business Technologies Inc 光書込装置及び画像形成装置
US8028125B2 (en) 2007-08-27 2011-09-27 Comtech Ef Data Corp. Content-addressable memories and state machines for performing three-byte matches and for providing error protection
US7872598B2 (en) 2008-12-10 2011-01-18 Intel Corporation Accelerated decompression
US8125357B1 (en) 2010-03-23 2012-02-28 Sandia Corporation Deflate decompressor
US8456331B2 (en) 2011-04-15 2013-06-04 Cavium, Inc. System and method of compression and decompression
WO2013095615A1 (en) 2011-12-23 2013-06-27 Intel Corporation Bitstream processing using coalesced buffers and delayed matching and enhanced memory writes
US8855938B2 (en) * 2012-05-18 2014-10-07 International Business Machines Corporation Minimization of surprisal data through application of hierarchy of reference genomes
US8849567B2 (en) * 2012-05-31 2014-09-30 Google Inc. Geographic data update based on user input
US20140019718A1 (en) * 2012-07-10 2014-01-16 Shihjong J. Kuo Vectorized pattern searching
US8872677B2 (en) 2013-03-15 2014-10-28 Dialogic Networks (Israel) Ltd. Method and apparatus for compressing data-carrying signals
JP6160259B2 (ja) * 2013-05-30 2017-07-12 富士通株式会社 文字列探索方法、文字列探索装置および文字列探索プログラム
US8947270B2 (en) 2013-06-29 2015-02-03 Intel Corporation Apparatus and method to accelerate compression and decompression operations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010051969A1 (en) * 1998-04-06 2001-12-13 Oberman Stuart F. Floating point addition pipeline including extreme value, comparison and accumulate functions
US20060155967A1 (en) * 2000-05-30 2006-07-13 Hong Wang Processing essential and non-essential code separately
CN1349159A (zh) * 2001-11-28 2002-05-15 中国人民解放军国防科学技术大学 微处理器向量处理方法
US20060037023A1 (en) * 2004-08-11 2006-02-16 International Business Machines Corporation Method and apparatus for avoiding data dependency hazards in a microprocessor pipeline architecture
US20100262806A1 (en) * 2009-04-13 2010-10-14 International Business Machines Corporation Tracking Effective Addresses in an Out-of-Order Processor

Also Published As

Publication number Publication date
KR101776227B1 (ko) 2017-09-07
US10379853B2 (en) 2019-08-13
US20170052784A1 (en) 2017-02-23
US9489199B2 (en) 2016-11-08
US20140189293A1 (en) 2014-07-03
KR20150102964A (ko) 2015-09-09
KR20170104157A (ko) 2017-09-14
WO2014105195A1 (en) 2014-07-03
CN104903850B (zh) 2018-09-18
DE112013005343T5 (de) 2015-09-10

Similar Documents

Publication Publication Date Title
US11740904B2 (en) Vector friendly instruction format and execution thereof
CN104903850A (zh) 用于滑动窗口编码算法的指令
US20190108029A1 (en) Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
CN104823156A (zh) 用于确定直方图的指令
KR101926241B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
US20180004517A1 (en) Apparatus and method for propagating conditionally evaluated values in simd/vector execution using an input mask register
KR101783535B1 (ko) 유니코드 문자들의 가변 길이 코드 포인트들을 트랜스코딩하기 위한 명령어들, 시스템들, 방법들 및 프로세서들
US10540177B2 (en) Efficient zero-based decompression
US9792115B2 (en) Super multiply add (super MADD) instructions with three scalar terms
CN103562856A (zh) 用于数据元素的跨步图案聚集及数据元素的跨步图案分散的系统、装置及方法
CN105359052A (zh) 用于积分图像计算指令的方法和装置
US20160011873A1 (en) Instruction for implementing vector loops of iterations having an iteration dependent condition
US9513918B2 (en) Apparatus and method for performing permute operations
US9189236B2 (en) Speculative non-faulting loads and gathers
US20140052968A1 (en) Super multiply add (super madd) instruction
TWI760341B (zh) 用於跨步載入的系統、設備及方法
CN117130578A (zh) 位矩阵乘法
US20130332701A1 (en) Apparatus and method for selecting elements of a vector computation
TWI733718B (zh) 用於獲得偶數和奇數資料元素的系統、裝置及方法
US9389861B2 (en) Systems, apparatuses, and methods for mapping a source operand to a different range
US10891230B1 (en) Apparatuses, methods, and systems for selective linear address masking based on processor privilege level and control register bits
EP3516504A1 (en) Apparatuses, methods, and systems for multiple source blend operations
TW201732573A (zh) 用於跨步載入(stride load)的系統、設備及方法
US20170192789A1 (en) Systems, Methods, and Apparatuses for Improving Vector Throughput
TWI817926B (zh) 用於執行指令的設備、方法及非暫態機器可讀媒體

Legal Events

Date Code Title Description
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant