用于实现具有迭代依赖条件的迭代的向量环路的指令的制作方法

文档序号:9523958阅读:447来源:国知局
用于实现具有迭代依赖条件的迭代的向量环路的指令的制作方法
【技术领域】
[0001] 本发明的领域设及计算科学,更具体地说,本发明的领域设及用于消除具有未对 齐数据行的数组的处理期间的未对齐的存储器访问的指令集。
【背景技术】
[0002] 图1示出了在半导体忍片上用逻辑电路实现的处理核100的高层级的图。该处理 核包括流水线101。该流水线由多个级组成,运些级各自被设计成在完全执行程序代码指令 所需的多步骤过程中执行特定步骤。运些级通常至少包括:1)指令取出和解码;2)数据取 出;3)执行;4)写回。执行级对由指令标识的并且在先前级(例如,在上述步骤2)中所取 出的数据执行由在另一先前级(例如,在上述步骤1)中所取出并解码的相同指令所标识的 特定操作。被操作的数据通常是从(通用)寄存器存储空间102中取出的。在该操作完成 时所创建的新数据通常也被"写回"到寄存器存储空间(例如,在上述级4)。
[0003] 与执行级相关联的逻辑电路通常由多个"执行单元"或"功能单元"1〇3_1到103_ N构成,运些单元各自被设计成用于执行其自身的唯一操作子集(例如,第一功能单元执行 整数数学操作,第二功能单元执行浮点指令,第Ξ功能单元执行来自/去往高速缓存/存储 器的加载/存储操作,等等)。由所有运些功能单元执行的所有操作的集合与处理核100所 支持的"指令集"相对应。
[0004] 计算机科学领域中广泛认可两种类型的处理器架构:"标量"型和"向量"型。标 量处理器被设计成用于执行对单个数据集执行操作的指令,而向量处理器被设计成用于执 行对多个数据集执行操作的指令。图2A和2B呈现了展示标量处理器与向量处理器之间的 基本差异的比较示例。
[0005] 图2A示出标量AND(与)指令的示例,其中单个操作数集A和B-起进行"与"运 算W产生单个(或"标量")结果C(即,AB=C)。相比之下,图2B示出向量AND指令的示 例,其中两个操作数集A/B和D/E并行地分别一起进行"与"运算W同时产生向量结果C和 F(即,A.AND.B=C并且化AND.E=巧。根据术语,"向量"是具有多个"元素"的数据元 素。例如,向量¥ = 0,氏5,1',11具有五个不同的元素:9、1?、5、1'和1]。示例性向量¥的"尺 寸"是5(因为它具有5个元素)。
[0006] 图1也示出不同于通用寄存器空间102的向量寄存器空间104的存在。具体而言, 通用寄存器空间102名义上用于存储标量值。由此,当多个执行单元中的任何执行单元执 行标量操作时,它们名义上使用从通用寄存器存储空间102调用的操作数(并且将结果写 回到通用寄存器存储空间102)。相比之下,当多个执行单元中的任何执行单元执行向量操 作时,它们名义上使用从向量寄存器空间104调用的操作数(并将结果写回到向量寄存器 空间104)。可类似地分配存储器的不同区域W存储标量值和向量值。
【附图说明】
[0007] 结合W下附图,从W下【具体实施方式】中可获得对本发明更好的理解,其中:
[0008] 图1示出指令执行流水线;
[0009] 图2a和2b将标量处理与向量处理进行比较;
[0010] 图3示出确定每个迭代之内的条件的状态的迭代过程;
[0011] 图4示出改进的指令序列的图,该改进的指令序列使用条件递增指令W利用向量 环路来实现确定每一个迭代之内的条件的状态的迭代过程;
[0012] 图5a示出用于执行条件递增指令的功能单元的逻辑电路的第一实施例;
[0013] 图化示出用于执行条件递增指令的功能单元的逻辑电路的第二实施例;
[0014] 图6A是示出根据本发明的多个实施例的通用向量友好指令格式及其A类指令模 板的框图。
[0015] 图6B是示出根据本发明的多个实施例的通用向量友好指令格式及其B类指令模 板的框图。
[0016] 图7是示出根据本发明的多个实施例的示例性专用向量友好指令格式的框图。
[0017] 图8是根据本发明的一个实施例的寄存器架构的框图。
[0018] 图9A是根据本发明的多个实施例的单个CPU核W及它与管忍上互连网络的连接 及其第二级化2)高速缓存的本地子集的框图。
[0019] 图9B是根据本发明的多个实施例的图9A中的CPU核的部分的分解图。
[0020] 图10是示出根据本发明的多个实施例的示例性无序架构的框图。
[0021] 图11是根据本发明的一个实施例的系统的框图。
[0022] 图12是根据本发明的实施例的第二系统的框图。
[0023] 图13是根据本发明的实施例的第Ξ系统的框图。
[0024] 图14是根据本发明的实施例的SoC的框图。
[0025] 图15是根据本发明的多个实施例的具有集成的存储器控制器和图形器件的单核 处理器和多核处理器的框图。
[00%]图16是根据本发明的多个实施例的对照使用软件指令转换器将源指令集中的二 进制指令转换成目标指令集中的二进制指令的框图。
【具体实施方式】
[0027] 通过向量环路的实现,可频繁地"加速"替代过程或W其他方式使替代过程更高 效。为了实现向量环路(loop),创建一个或多个向量,其中,环路中的多个元素表示不同的 迭代循环(cycle)。例如,向量中的第一元素表示第一迭代,第二元素表示第二迭代,等等。 通过对运些向量执行多个向量操作,可并行地(例如,并发地或同时地)有效执行多个迭 代。
[0028] 然而,当前不能够将图3中描绘的那种形式的迭代过程编译为向量环路(vector loop)。容易在各种应用中找到图3中描绘的迭代形式。
[0029] 图3示出由变量"i"控制的迭代过程。也就是说,如301处所示,伴随着每一次迭 代,i递增(或递减)。在如306处所示的N次迭代之后,如307处所示,该过程停止。作为 每次迭代的部分,如302处所示,进行关于条件是"真"还是"非真"的查询。该条件可W是 作为i的函数的真或非真。也就是说,对于一个迭代,该条件可W为真,而对于另一迭代,该 条件可W不为真。确定对于任何迭代α的值)的该条件是否为真的情况和/或过程的集 合实际上可w是不受限的。
[0030] 条件为真的迭代将W与条件不为真的迭代不同的方式表现。如果条件为真,则如 303处所示,使变量η递增跨度(stride)值S。在此,S可W是任意值,并且η可具有任意 初始值。例如,如果S= 1并且η的初始值为0,则每当条件为真时,η将根据模式0、1、2、 3、…递增。相比之下,如果s= 3并且η的初始值为0,则每当条件为真时,η将根据模式 0、3、6、9、…递增。
[0031] 同样,对于i的各个值,该条件可W为真。例如,对于第一迭代,该条件可W为真, 并且随后直到第十个迭代才再次为真。因此,对于第二到第九个迭代,η将保持恒定。因此, η提供了在多个迭代的过程中,该条件已经有多少次为真的某种反映。如上文所暗指的那 样,在迭代序列的开始之前,通常向变量η提供初始值(例如,η= 0)。
[0032] 无论该条件是否为真,如304处所示,每一个迭代将基于η确定变量X。具体而言, 理解存在数组A(例如,大型向量Α),并且X取A中基于η的位置的值(χ=Α[η])。因此, 对于每一个迭代,η充当确定X的值的A的索引。如果对于特定迭代,该条件不为真,则X将 采用它在前一迭代中所采用的相同的值(因为如果条件不为真,则η不递增为A的另一新 索引值)。
[0033]随着X被确定,如305处所示,最终执行对该迭代的结果的计算。也就是说,该结 果是X的函数。在其他情况下,该结果计算连同X-起,可W是i(迭代计数)和/或η值 (在迭代中真条件的数量的测量)的函数。在此,就该条件而言,可利用实际不受限数目的 计算过程中的任何过程来实现结果计算305。当已执行了全部的迭代,该结果是i个计算结 果。
[0034]遗憾的是,由于该迭代过程(尤其是对条件的查询302,如303处所示在递增为真 时使η递增SW及将η用作A的索引)的复杂性,编译器将图3中那种形式的过程编译为 向量环路是有困难的。因此,本申请描述允许编译器能够更容易地将图3中的过程编译为 向量环路的新指令。
[0035] 图4示出利用用于将图3中的迭代过程实现为向量环路的新指令的程序代码的结 构的实施例。
[0036] 如图4中所观察到的那样,如401处所示,程序代码创建被称为"环路向量(LV)" 的向量,该向量的多个元素表示经由多个迭代的进展。在实施例中,相邻的元素位置表示相 对于该位置所邻接的元素位置的"下一个"迭代,并且环路向量的多个元素的值对应于"环 路计数"。例如,在其中环路向量被实现为八元素向量的实施例中,可利用下列内容使该环 路向量实例化W表示该迭代过程的前八个迭代:
[0037]LV< = 76543210 方程 1
[0038] 在多个迭代的过程中,将在第八个和第九个迭代之间更新该环路向量,W便按如 下方式表示第九到第十六个迭代:
[0039]LV< = 15 14 13 12 11 10 9 8 方程 2 W40] 因此,至少在一些实现中,LV的内容可被视为多个顺序迭代的过程中的i的值。
[0041] 如402处所示,程序代码也创建第二向量("条件向量"(CV)),其多个元素指示任 何特定迭代上的条件是否为真(或是否不为真)。与环路向量LV相同,在实施例中,条件向 量(CV)中的相邻元素位置表示相对于该位置所邻接的元素位置的"下一个"迭代。然而, 与环路向量LV不同,CV的多个元素指示其各自迭代的条件是否为真。例如,在其中W1表 示真并且W0表示非真的实施例中,在其中对于前八个迭代中的第四个和第屯个迭代为真 但对于其他迭代的条件不为真的过程中,条件向量可采取W下形式:
[0042] CV< = 0 1 0 0 1 0 0 0 方程 3
[0043] 在运些迭代的过程中,将在第八和第九个迭代之间更新该条件向量W反映紧接着 的第九到第十六个迭代过程中的多个条件。例如,如果对于第九到第十六个迭代中的第十 和第十二迭代为真但对于其他迭代不为真,则被更新的条件向量将采用W下形式:
[0044]CV< = 0 0 0 0 1 0 1 0 方程 4
[0045] 在如402处所示创建了条件向量之后,如403处所示执行W上所暗指的新指令 (C0NDINC)。该C0NDINC指令接受条件向量作为输入操作数,并且将被称为"η向量"(NV) 的第Ξ向量作为结果返回,该向量的内容表示运些迭代过程中的η的值。 阳046] 在实施例中,与环路向量LV和条件向量CV相同,η向量NV中的相邻元素位置表 示相对于该位置所邻接的元素位置的"下一个"迭代。然而,与环路向量LV和条件向量CV都不相同,每当横跨多个迭代的条件为真时,η向量NV呈现η递增了跨度S。例如,如果上 文中方程3中指定的条件向量CV横跨前八个迭代而应用,则C0NDINC指令将提供针对初始 η值0、跨度3和方程4中所指定的输入向量操作数CV的下列结果:
[0047] NV< = 66333000 方程 5。
[0048] 继续该示例,如果方程4中的条件向量CV适用于第九到第十六个迭代,则该 C0NDINC指令将提供下列结果:
[0049]NV< = 12 12 12 12 12 9 9 6 方程 6。
[0050] 注意,来自第八个迭代的η的值(方程5中的NV的最左边的值=6)延续到(carry over)第九个迭代的η的值(方程6中的NV的最右边的值=6)。如将在下文中更详细地 描述的那样,可将通过来自C0NDINC指令的前一执行所确定的前一迭代的η值的"延续"接 受为C0NDINC指令的输入操作数。 阳051] 在该C0NDINC指令的执行之后,如404处所示,执行一条或多条指令(例如,向量 指令)W确定被称为"X向量"狂V)的第四向量,其横跨多个迭代的进展建立X的值。回想 一下,η充当数组A的索引,如404处所示,一条或多条指令实质上W向量格式返回对应于 由η向量(NV)提供的索引位置的A的值。例如,如果提供A的前八个值如下: 阳化2]A[7:0] = 128 64 32 16 8 4 2 1 方程 7
[0053] 并且如果通过指令处理404获取方程5中的η向量NV作为对应的向量输入操作 数,则通过指令处理404产生的对应的X向量XV将如下:
[0054]XV< = 64 64 8 8 8 1 1 1 方程 8。 阳化5] 在执行过程404中所利用的一条或多条指令可包括例如聚集指令。聚集指令是基 于输入索引值从数组中提取多个元素的指令。
[0056] 伴随着方程1中的环路向量LV、方程5中的η向量NV和方程7中的X向量XV的 创建,W向量形式设置用于图3中的过程的前八个迭代的输入变量。为了方便起见,W下重 复运些方程。
[0057]LV< = 76543210 方程 1。
[0058]NV< = 66333000 方程 5。
[0059] XV< = 64 64 8 8 8 1 1 1方程8。
[0060] 在此,横跨上述Ξ个向量的相同位置的元素集对应于它们表示的特定迭代的正确 的i、n和X值。也就是说,例如,横跨LV、NV和XV向量的最右边的(第一)元素位置对应 于图3中的过程的第一迭代的i、η和X值的正确集合α= 0,η= 0且X= 1);横跨LV、 NV和XV向量的第四元素位置对应于图3中的过程的第四迭代的i、n和X值的正确集合α = 3,η= 3 且χ= 8),等等。
[0061] 由此,伴随着运些向量的创建,最终准备好指令序列W在需要时将结果计算405 作为向量操作来执行。同样,结果计算405实际上可W是不受限数量的不同计算中的任何 计算。然而最终在实施例中,结果计算405的结果将是用于前八个迭代的向量格式的结果 (i)。也就是说,如果句法RS(i)用于指定"结果(i)"(即,第i个迭代的结果),则来自由 框405执行的处理的结果将是如下的结果向量RV:
[0062]RV< =RS(7)RS(6)RS(5)RS(4)RS(3)RS(2)RS(1)RS(0)方程9。
[006引在为图3中的过程的前八个迭代计算了W上所提供的RV之后,可执行图4中的指 令序列的下一向量
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1