用于滑动窗口编码算法的指令的制作方法

文档序号:8926974阅读:216来源:国知局
用于滑动窗口编码算法的指令的制作方法
【技术领域】
[0001] 发明的领域通常涉及计算系统,并且更具体而言,涉及用于滑动窗口编码算法的 指令。
【背景技术】
[0002] 矢量处理
[0003] 图1示出在半导体芯片上用逻辑电路实现的处理核心100的高层图。处理核心包 含流水线101。流水线包括多个阶段,每个设计为执行完全执行程序代码指令所需要的多 步骤处理中的特定步骤。这些典型地至少包含:1)指令获取和解码;2)数据获取3)执行; 4)写回。当数据由相同的指令标识并在之前阶段中获取(例如,在上述步骤2)中)时,执 行特定操作的执行阶段由指令标识,该指令在另一个之前阶段中被获取并解码(例如,在 上述步骤1)中)。被操作的数据典型地从(通用)寄存器存储空间102获取。在操作完成 时创建的新数据也典型地"写回"到寄存器存储空间(例如,在上述4)阶段处)。关联于执 行阶段的逻辑电路典型地由多个"执行单元"或者"功能单元"1〇3_1至103_N组成,其每个 设计为执行其自身的操作的唯一子集(例如,第一功能单元执行整数数学操作,第二功能 单元执行浮点指令,第三功能单元执行从/向缓存/存储器的加载/存储操作等)。由所有 功能单元执行的所有操作的集合对应于处理核心100支持的"指令集"。
[0004] 在计算机科学领域广泛知晓2个类型的处理器架构:"标量"和"矢量"。标量处理 器被设计为执行对单集合数据执行操作的指令,而矢量处理器被设计为执行对多集合数据 执行操作的指令。图2A和2B呈现展示了标量处理器与矢量处理器之间的基本差异的比较 例。
[0005] 图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个元素)。
[0006] 图1还示出不同于通用寄存器空间102的矢量寄存器空间107的存在。具体而言, 通用寄存器空间102在名义上被用于存储标量值。这样,当任何执行单元执行标量操作时, 其在名义上使用从(并将结果写回)通用寄存器存储空间102调用的操作数。与此相反, 当任何执行单元执行矢量操作时,其在名义上使用从(并将结果写回)矢量寄存器空间107 调用的操作数。存储器的不同区域可以同样被分配用于存储标量值和矢量值。
[0007] 还要注意的是,在向功能单元103_1至103_N的输入处和从功能单元103_1至 l〇3_N的输出处相应存在掩码操作(masking)逻辑104_1至104_N* 105_1至105_N。在各 种实施方式中,对于矢量操作,实际上仅实现这些层中的一个一尽管不是严格要求(尽管 在图1中未绘出,但可想象地,仅执行标量而非矢量操作的执行单元不需要具有任何掩码 操作层)。对于采用掩码操作的任何矢量指令,输入掩码操作逻辑1〇4_1至104_N* /或输 出掩码操作逻辑1〇5_1至105_N可以被用于控制:针对矢量指令,哪些元素被有效地操作。 此处,掩码矢量从掩码寄存器空间106读出(例如,连同从矢量寄存器存储空间107读出的 输入操作数矢量),并且被呈现给掩码操作逻辑104、105层中的至少一个。
[0008] 在执行矢量程序代码的过程中,每个矢量指令不需要要求全数据字。例如,用于一 些指令的输入矢量可以仅是8个元素,用于其他指令的输入矢量可以是16个元素,用于其 他指令的输入矢量可以是32个元素等。因此,掩码操作层104/105被用于标识适用于特定 指令的全矢量数据字的元素的集合,以便跨指令影响不同的矢量尺寸。典型地,对于每个矢 量指令而言,保持在掩码寄存器空间106中的特定掩码模式由指令调出、从掩码寄存器空 间获取并被提供至掩码层104/105中的一个或者两个,来"启用"对于特定矢量操作的元素 的正确集合。
[0009] LZ77压缩算法
[0010] 压缩算法努力减小数据的量而不牺牲数据内的信息。一个类型的压缩算法被称为 LZ77算法,通过参考输入(未压缩的)数据流中更早存在的数据的单个拷贝来替代数据的 重复出现,以实现压缩。匹配由一对称作"长度距离对"的数字进行编码,其等同于以下陈 述:"在未压缩的流中,每个接下来的"长度"字符等于恰好其后有"距离"个字符的字符"。 ("距离"有时替代地称作"偏移"。)
[0011] 为了认出匹配,编码器对一些量的最近数据(诸如最后2kB、4kB、或者32kB)保持 追踪。其中保持了该数据的构造称作"滑动窗口",因此LZ77有时称作滑动窗口压缩。编码 器保持滑动窗口内最近的数据,来寻找匹配(并且解码器也将保持该数据来解释编码器参 考的匹配)。
[0012] 图3示出基本处理LZ77编码方案的简单示例。如图3所示,比特流300的之前(更 早或者更晚)部分301的位模式与比特流的当前部分302的位模式进行比较。如果当前部 分302中发现与之前部分301中的序列位匹配的序列位,那么参考更早部分301中相同序 列的位来替代当前部分302中的位的序列。例如,参考更早部分301中的位序列303来替 代当前部分302中的位序列。对位序列302插入的参考将标识出位序列302的长度(其也 与位序列303的长度相同)以及位序列303的位置。因此,当对压缩的流解码时,当解码器 到达该参考时,其仅"参考"回位序列303来再现用于解码的流的部分302的正确位序列。
[0013] 编码处理的更复杂但更有效的版本将计算当前部分的引导字节(例如,3个引导 字节)的散列(被称为"前缀"),并使用其作为向一些数据结构的索引,该数据结构保持被 散列至相同值的更早部分的位串(或者这样的位串的位置)。
[0014] LZ77压缩算法被用作DEFLATE压缩算法的部分,其被用于压缩gzip、Zlib、PKZip 和WinZip压缩方案。
【附图说明】
[0015] 在附图的图中以示例的方式,而非以限制的方式示出本发明,其中相似的参考标 记指代类似的元件,其中:
[0016] 图1示出指令执行流水线;
[0017] 图2A和2B涉及矢量处理;
[0018] 图3示出滑动窗口编码处理的示例;
[0019] 图4A示出指令的方法;
[0020] 图4B示出指令的流的方法;
[0021] 图5A和5B示出对图4的指令的电路设计;
[0022] 图6A是示出根据本发明的实施例的通用矢量友好指令格式及其A级别指令模板 的框图。
[0023] 图6B是示出根据本发明的实施例的通用矢量友好指令格式及其B级别指令模板 的框图。
[0024]图7A-C是示出根据本发明的实施例的示例性特定矢量友好指令格式的框图。
[0025] 图8是根据本发明的一个实施例的寄存器架构的框图。
[0026] 图9A是根据本发明的实施例的单个CPU核心的框图,连同其至管芯上互连网络的 连接,及其2级(L2)缓存的本地子集。
[0027] 图9B是根据本发明的实施例的图9A中的CPU核心的部分的分解图。
[0028] 图10是示出根据本发明的实施例的示例性乱序架构的框图。
[0029] 图11是依据本发明的一个实施例的系统的框图。
[0030] 图12是依据本发明的实施例的第二系统的框图。
[0031] 图13是依据本发明的实施例的第三系统的框图。
[0032] 图14是依据本发明的实施例的SoC的框图。
[0033] 图15是根据本发明的实施例的具有集成存储器控制器和图形的单核处理器和多 核处理器的框图。
[0034] 图16是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制 指令转换至目标指令集中的二进制指令的框图。
【具体实施方式】
[0035] 图4a示出适于加速位匹配标识处理(诸如LZ77编码处理的位匹配标识处理)的 矢量指令(VC0MPCPM)的实施例的操作。图4a示出512位第一输入操作数400。如图4所 示,第一输入操作数400被分割为4个128位元素401_1至401_4。每个元素401_1至401_4 对应于要根据比特流匹配处理进行编码的比特流的段。
[0036] 128位元素401_1至401_4中的每个含有4字节的"位置头部"402_1至402_4以 及12字节的连续段的数据403_1至403_4。4字节位置头部指明在被编码的数据中,在哪 能够发现其12字节的连续数据。因此,512位数据结构含有4个12字节的数据的段以及在 数据内的每个的位置。
[0037] 第二(例如标量)输入操作数404还具有数据的不同段的位置头部405和12个 连续字节406。
[0038] 如图4a所示,指令将第二输入操作数404的数据406的12字节与第一输入操作 数400的每个12字节数据元素403_1至403_4进行比较,并取出其相应的位置头部信息 402_1至402_4与第二输入操作数404的位置头部405之间的差异。在比较2个12字节序 列中,指令在两个序列的一端(例如,最右端)开始,并朝另一端移动(例如,移动到左侧) 来逐字节比较。一旦观察到一对均等定位的不同字节,比较停止,均等定位的字节的数量导 致:第一对不均等的字节被建立为对于2个12字节序列的比较结果的均等字节的数量。
[0039] 因此,结果407是矢量,其元素对应于能够被直接或者间接使用(作为对每个比较 的参考插入信息)的信息。即,结果407对第一操作数400中的每个元素指明:该元素的位 置与用于第二输入操作数404的数据406的位置之间的距离;以及数据的2个12字节段之 间的长度(以匹配字节的数量)。在图4的实施例中,结果的每个元素对于匹配字节的数量 预留4位(但是仅能够指明12个匹配字节的最大值),并且预留16位来指明1的补码形式 的位置差异。
[0040] 理论上,第一输入操作数400能够被用于保持被压缩的数据的"更早的"段,并且 第二输入操作数404能够用于被压缩的数据的当前段,或者第一输入操作数400能够用于 被压缩的数据的当前段,并且第二输入操作数404能够用于被压缩的数据的更早的段。为 了简洁起见,本说明书中将大多引用前一方法。
[0041] 在图4a的指令的实施例中,立即操作数408_1的第一字段被用于基本指明压缩算 法的滑动窗口的尺寸。换言之,立即操作数408的第一字段408_1指明允许在输入矢量400 内发现输入操作数404的当前数据的匹配领先于先前的数据多少。如果任何位置差异计算 超过由立即操作数408的第一字段408_1指明的距离,那么对应的元素是设置有表明比较 无效的固定代码(例如,比较结果固定来示出没有字节匹配)的结果407。
[0042] 例如,在实施例中,第一字段408_1是4位来指明比较的数据段之间的最大距离。 这对应于16的最大距离,其中该最大距离的1/16对应于最小距离设定。例如,如果最小距 离设定是2千字节(KB),那么4位的第一字段408_1位长度提供32KB的最大滑动窗口尺 寸。
[0043] 另外在图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 除外)。
[0044] 指明每个矢量4个不同位置的能力允许结果矢量407由4个连续指令写入,每个 连续指令指明不同DWORD结果位置,以便一个矢量含有16个不同比较的比较结果。
[0045] 图4b更具体地来示出序列。如图4b所示,第一 VC0MPCPM指令412_1将当前数据 序列410与4个先前的数据序列的第一输入矢量411_1进行比较。第一指令的立即操作 数(的第一字段)指明结果应该被写入第一指令的结果413_1中每个矢量元素的最右边的 DWORD〇
[0046] 接下来执行第二VC0MPCPM指令412_2,其比较当前数据序列410与4个先前的数 据序列的第二输入矢量411_2。然而,第二指令412_2的立即操作数指明结果应该被写入与 第一指令412_1相同的目的地寄存器(即,相同的结果413_1)中每个矢量元素的第二最右 边的DWORD。这样,即使相同的寄存器被写入以具有第一指令412_1的结果,第一指令412_1 的结果也不被第二指令412_2的结果改写。
[0047] 序列持续2个更多的VCOMPCPM指令412_3、412_4,具有4个之前的数据序列的2 个更多的不同相应的输入矢量411_3、411_4,以及指明结果413_1的第三和第四DWORD的相 应的立即操作数。在第四指令412_4的结束处,结果413_1含有与当前输入数据序列410 的16个比较的结果。
[0048] 在执行了第四VCOMPCPM指令412_4之后,执行另一个矢量指令VPHMAXPOSUD 414
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1