迭代运算的处理

文档序号:1042392 发布日期:2020-10-09 浏览:34次 >En<

阅读说明:本技术 迭代运算的处理 (Processing of iterative operations ) 是由 尼古拉斯·安德鲁·菲斯特 斯里尼瓦斯·维穆里 大卫·雷蒙德·鲁茨 于 2020-03-16 设计创作,主要内容包括:本申请公开了迭代运算的处理。一种装置具有处理电路系统,该处理电路系统用于响应于由指令解码器对迭代运算指令的解码来执行迭代运算,该迭代运算包含处理的至少两个迭代,其中迭代取决于在先前迭代中产生的操作数。初始信息产生电路系统执行给定迭代的处理的初始部分以产生初始信息。结果产生电路系统执行给定迭代的处理的剩余部分,以使用初始信息来产生结果值。对于除了最终迭代之外的迭代,转发电路系统将结果值作为迭代运算的下一迭代的操作数转发。初始信息产生电路系统与结果产生电路系统完成当前迭代的剩余部分并行地开始执行下一迭代的初始部分,以提高性能。(The application discloses processing of iterative operations. An apparatus has processing circuitry to perform an iterative operation in response to decoding of an iterative operation instruction by an instruction decoder, the iterative operation comprising at least two iterations of processing, wherein an iteration is dependent on operands produced in a previous iteration. Initial information generation circuitry performs an initial portion of the processing for a given iteration to generate initial information. The result generation circuitry performs the remainder of the processing for a given iteration to generate a result value using the initial information. For iterations other than the final iteration, the forwarding circuitry forwards the result value as an operand for a next iteration of the iterative operation. The initial information generation circuitry begins executing the initial portion of the next iteration in parallel with the remainder of the current iteration being completed by the result generation circuitry to improve performance.)

迭代运算的处理

技术领域

本发明的技术涉及数据处理的领域。

背景技术

诸如微处理器的数据处理装置可具有:指令解码器,用于对程序指令进行解码;及处理电路系统,用于响应于程序指令的解码执行处理运算。在设计处理电路逻辑时可能会存在挑战,以便对于给定指令的运算可在由期望得以支持的时钟频率施加的时序约束之内完成。

发明内容

至少一些示例提供一种装置,包括:

指令解码器,用于对程序指令进行解码;以及

处理电路系统,用于响应于由指令解码器对迭代运算指令的解码,执行包括多个处理迭代的迭代运算,对于所述多个处理迭代,除了第一迭代之外的后续迭代取决于在先前迭代中产生的操作数;

处理电路系统包括:

初始信息产生电路系统,用于执行给定迭代的处理的初始部分以产生初始信息;

结果产生电路系统,用于执行给定迭代的处理的剩余部分,以使用由初始信息产生电路系统确定的初始信息来产生结果值;及

转发电路系统,用于当给定迭代为除了最终迭代之外的迭代时,将在给定迭代中产生的结果值作为迭代运算的下一迭代的操作数转发;其中:

当结果产生电路系统执行除了最终迭代之外的给定迭代的剩余部分时,初始信息产生电路系统被配置为与结果产生电路系统完成当前迭代的剩余部分并行地开始执行下一迭代的初始部分。

至少一些示例提供一种装置,包括:

用于对程序指令进行解码的模块;及

用于处理的模块,用于响应于由指令解码器对迭代运算指令的解码,执行包括多个处理迭代的迭代运算,对于该多个处理迭代,除了第一迭代之外的迭代取决于在先前迭代中产生的操作数;

用于处理的模块包括:

用于通过执行给定迭代的处理的初始部分来产生初始信息的模块;

用于通过执行给定迭代的处理的剩余部分来产生结果值的模块,该模块使用了由初始信息产生电路系统确定的初始信息;以及

用于转发的模块,该模块用于当所述给定迭代为除了最终迭代之外的迭代时,将在给定迭代中产生的结果值作为迭代运算的下一迭代的操作数转发;其中:

当结果产生电路系统执行除了最终迭代之外的给定迭代的剩余部分时,初始信息产生电路系统被配置为与结果产生电路系统完成当前迭代的剩余部分并行地开始执行下一迭代的初始部分。

至少一些示例提供一种数据处理方法,包括:

使用指令解码器解码迭代运算指令;且

响应于对迭代运算指令的解码,执行包括多个处理迭代的迭代运算,对于该多个处理迭代,除了第一迭代之外的迭代取决于在先前迭代中产生的操作数;

其中迭代运算系使用处理电路系统执行,该处理电路系统包括:

初始信息产生电路系统,用于执行给定迭代的处理的初始部分以产生初始信息;

结果产生电路系统,用于执行给定迭代的处理的剩余部分,以使用由初始信息产生电路系统确定的初始信息来产生结果值;及

转发电路系统,用于当给定迭代为除了最终迭代之外的迭代时,将在给定迭代中产生的结果值作为迭代运算的下一迭代的操作数转发;其中:

当结果产生电路系统执行除了最终迭代之外的给定迭代的剩余部分时,初始信息产生电路系统与结果产生电路系统完成当前迭代的剩余部分并行地开始执行下一迭代的初始部分。

本发明技术的进一步态样、特征及优点将自示例的以下描述显而易见,该等示例将结合附图来阅读。

附图说明

图1示意地图示数据处理装置的示例;

图2图示浮点归约运算的示例,该浮点归约运算为迭代运算的示例;

图3示出用于将两个浮点操作数相加的浮点加法单元的一部分的示例;

图4示出示例性时序图,为了比较,该时序图示出其中在迭代运算的连续迭代的处理中没有重叠的方法;

图5示出支持迭代运算的处理电路系统的一部分,其中给定迭代的处理的初始部分可与完成先前迭代的剩余部分并行执行;

图6示出时序图,该时序图示出使用图5的处理电路系统执行迭代运算的示例;

图7示出用于执行图2的浮点归约运算的浮点归约单元;及

图8为示出执行迭代运算的方法的流程图。

具体实施方式

处理电路系统可响应于由指令解码器解码的程序指令执行数据处理运算。当设计处理电路系统的电路逻辑时,可能在平衡以下两个方面时存在不断的设计挑战:一方面,用于支持某些相对复杂指令的期望,该等相对复杂指令可能需要具有更大逻辑深度的电路逻辑,但当信号经过电路逻辑时将因此引发更大的处理延迟;且另一方面,尽可能多地增加时钟频率以提供改良的性能的期望。需要更大逻辑深度的相对复杂运算可横跨多个处理周期分离,但若使用更大数目的周期,则可能减慢依赖于此运算的处理工作负荷。这对于需要两个或两个以上处理迭代的某些迭代操作指令可能是一个特定的问题,因为若每个迭代必须在更大数目的周期上分离,则对于相同的指令多次引发对应的性能冲击。应对此设计挑战的另一方法可为降低所支持的最大时钟频率,从而为在一定数量的时钟周期之内完成更复杂的操作留出更多时间,但是在此情况下,降低的时钟频率将降低其他类型的操作的性能,而其他类型的操作将需要较少的逻辑深度并且可能会以更快的时钟频率及时完成。

下文论述了用于提高迭代运算指令的每次迭代性能的技术,当该迭代运算指令由指令解码器解码时,控制处理电路系统执行包括两个或两个以上处理迭代的迭代运算,对于该等处理迭代,除了迭代运算的第一迭代之外的后续迭代取决于在先前迭代中产生的操作数。

处理电路系统包括初始信息产生电路系统,以通过执行迭代运算的给定迭代的处理的初始部分来产生初始信息。结果产生电路系统执行给定迭代的处理的剩余部分,以使用由初始信息产生电路系统确定的初始信息来产生结果值。当给定迭代为除了迭代运算的最终迭代之外的迭代时,转发电路系统将在给定迭代中产生的结果值作为迭代运算的下一个迭代的操作数转发。

对于其中较早迭代的结果经转发用于后续迭代的的迭代运算,吾人会认为直至先前迭代的结果已经产生为止才有可能开始下一个迭代。然而,与直觉相反,发明者认识到,初始信息产生电路系统有可能与结果产生电路系统完成当前迭代的剩余部分并行开始执行下一迭代的处理的初始部分。因为每次迭代时延可能小于处理的初始部分及剩余部分的组合时延,所以使能性能得以提高,以便迭代运算指令可在支持比原本可能的时钟频率更高的时钟频率的处理电路系统上执行。如此不仅为迭代操作指令本身提供了性能益处,而且亦为其他指令提供益处,因为当迭代操作指令支持更高的时钟频率时,其他指令亦可从该更高的时钟频率受益。

初始信息产生电路系统开始给定迭代的初始部分与初始信息产生电路系统开始下一迭代的初始部分之间的时延,可小于初始信息产生电路系统开始给定迭代的初始部分与结果产生电路系统完成给定迭代的剩余部分之间的时延。这表示处理电路系统能够根据具有一时钟周期的时钟信号操作,该时钟周期短于初始部分及剩余部分的组合时延。自开始给定迭代的初始部分与开始下一迭代的初始部分之间的延迟可对应于N个时钟周期,其中N为1或更大,但归因于下一次迭代的初始部分与当前迭代的剩余部分的完成之间的重叠,这表示给定迭代的总处理(初始部分和剩余部分的组合)实际具有多于N个周期要完成,以便时钟频率的更积极缩放变为可能。

初始信息产生电路系统可在比一时钟周期更早的时钟周期中执行给定迭代的初始部分,在该前一时钟周期中,结果产生电路系统开始执行给定迭代的剩余部分。因此,对于为迭代操作指令执行的第一个迭代,该第一迭代的初始部分可在设置时钟周期中执行,且随后在下一个时钟周期中,可为给定迭代开始剩余部分,其中下一个迭代的初始部分与给定迭代的剩余部分的结束并行执行。

此技术可应用于对于处理的剩余部分需要两个或两个以上时钟周期的运算,亦即,其中在上文论述的示例中,N等于2或更大。然而,这对于逻辑深度比单个时钟周期所能容纳的逻辑深度稍深的运算尤其有用,因为该技术可随后允许在一个周期内具有过多逻辑的运算仍可根据单周期每迭代利用延迟缩放进行处理,此对于性能可能是极其有益的。特定言之,对于其中N=1的实施(亦即,一个迭代的初始部分在先前迭代的初始部分之后开始一个周期),产生结果所用的时钟周期的总数可为M+1(一个设置周期及M个每次迭代结果产生周期),其中M为迭代操作中的迭代数目。

给定迭代的处理的初始部分可包含产生关于待在该迭代中处理的操作数的信息。例如,可能需要操作数的一些初始处理以确定需要结果产生电路系统之内的哪些逻辑路径,或以产生用于配置结果产生电路系统的某些逻辑元素的配置信号(诸如确定移位器的移位量,例如用于有效对齐的部分或完全指数差)。

有人可能会问,为什么涉及迭代之间的依赖性(且因此需要将一迭代的结果作为下一迭代的操作数转发)的迭代操作有可能在下一迭代的初始部分与先前迭代的结束并行执行的情况下实施。然而,发明者认识到可在迭代之间实现并行化若干选项,尽管基于先前迭代的结果进行下一迭代的操作数的转发。

在一个示例中,对于除了第一迭代之外的后续迭代,该后续迭代可不仅取决于由转发电路系统基于来自先前迭代的结果值转发的经转发的操作数,而且取决于与先前迭代的结果无关的第二操作数。在此情况下,由初始信息产生电路系统确定的初始信息可包含自第二操作数导出的信息。因为第二操作数与先前迭代的结果无关,所以第二操作数在先前迭代的结果已产生之前可获得。初始信息产生电路系统可因此在完成先前迭代的处理的剩余部分之前开始自第二操作数导出信息,以便处理的剩余部分的逻辑深度可更浅,因为其不需要包括用于确定来自第二操作数的初始信息的逻辑。

作为从第二独立操作数导出初始信息的替代或另外,另一方法可为:初始信息可为从经转发的操作数上的早期信息导出的信息,该信息在经转发的操作数已经完全由对于先前迭代的结果产生电路系统确定之前可用。例如,将经转发至下一迭代的操作数上的某些部分信息可提早获得,且因此某些初始信息可从用于迭代运算的下一迭代的早期信息导出,此举与在先前迭代中的经转发操作数的完整值的进行中的计算并行。

例如,经转发的操作数可为具有符号、指数和有效位数的浮点操作数。通常,浮点结果的符号及/或指数可比有效位数更早地可用,因为计算有效位数可能需要比计算指数或符号更大的逻辑深度。因此,关于转发操作数返回的早期信息可包括从经转发的操作数的符号或指数的至少一者导出的信息。因此,在已为先前迭代计算出包括有效位数的完整经转发操作数之前,可预先计算将在下一迭代中处理的有关操作数的初始信息,以加速下一迭代的处理。

在其中亦存在与先前迭代的结果无关的第二操作数的情况下,可将关于经转发的操作数的早期信息与从第二操作数导出的信息比较,以提供额外的初始信息。例如,可将经转发的操作数的早期可用指数与第二独立操作数的指数比较,以产生指数差值的至少一个位,该位可对加速下一迭代中的浮点加法很有用。

本技术可对于其给定迭代的结果值包含通过将浮点操作数相加而获得的舍入浮点值的迭代运算尤为有用。浮点加法可能相对缓慢且需要相对大的逻辑深度,因为浮点操作数的加法可能需要浮点操作数的指数的初始分析、基于指数之间的差异的操作数的有效位数的对准、经对准的有效位数的相加及舍入以产生经舍入的浮点结果。因此,当设计给定处理器的处理逻辑时,浮点加法可通常提供一些最严格的时序约束。在于每个迭代需要浮点加法的迭代运算中,上文论述的技术可非常有用于通过降低每次迭代时延来加速性能,此时延降低是通过将初始信息计算的部分与剩余部分重叠以产生在先前迭代中的经舍入浮点值来获得。

对于涉及浮点加法的此迭代运算,初始信息可包含关于待相加的浮点操作数的各种不同类型的信息。例如,初始信息可包含以下任何一或多者:

·浮点操作数的一者是否为次正规(subnormal)的指示;

·浮点操作数的一者是否为无限大的指示;

·浮点操作数的一者是否为非数值的指示;

·指示浮点操作数的指数之间的差的指数差值的至少一部分;

·浮点操作数的一者的有效位数的分数部分是否为零的指示;

·浮点操作数是类符号操作数还是非类符号操作数的指示。

所有该等类型的信息可用于控制浮点加法。通过与先前迭代的结束并行计算该等类型的信息的任一者,如此降低了对于剩余部分的整体逻辑深度,且因此通过使能更高的时钟频率来提高性能。

虽然本发明的技术可用于涉及浮点加法的任何迭代操作,但是本技术可特定用于浮点归约运算。对于此运算,迭代运算指令可识别纯量浮点操作数及包含多个数据元素的向量数据值,每个数据元素指定一浮点操作数。对于此指令,迭代运算的每个有效迭代(active iteration)可包含将第一浮点操作数与第二浮点操作数相加。对于有效迭代的第一有效迭代,第一浮点操作数为纯量浮点操作数,且第二浮点操作数为在向量数据值的第一有效数据元素中指定的浮点操作数。对于有效迭代的后续有效迭代,第一浮点操作数为在先前有效迭代中的加法的转发结果,且第二浮点操作数为在向量数据值的后续有效数据元素中指定的浮点操作数。可提供断言信息以指定向量数据值中的哪些数据元素为有效数据元素。每个迭代将向量的对应元素作为其第二浮点操作数,且若该向量由断言信息标记为有效,则这表示对应迭代为有效迭代,而对于其断言信息指示向量的对应数据元素为非有效的迭代被视为非有效迭代。对于非有效迭代,处理逻辑中的触发器可使其使能信号无效,以防止其基于非有效向量元素更新。

处理系统可支持向量运算,对于其可响应于单个指令执行处理的多个通道(此方法亦可称为单一指令多重数据(single instruction multiple data;SIMD)或SIMD),每个通道使用至少一个向量操作数的相应数据元素。一些SIMD实施方式可提供用于并行处理多个向量信道的硬件,而其他电路实施方式可顺序地或以区块形式一个接一个执行至少一些向量通道。无论何种方式,与对于处理的每个信道需要单独指令的等效纯量代码相比,使用向量处理可通过降低捕获且解码指令时的负担来提高代码密度且提高性能。

此类向量指令的一种使用可为执行浮点处理的数个信道,该数个信道将其结果累积至向量的各个元素中,但最终可能期望将向量中的所有元素相加在一起以产生纯量结果,在此情况下上文论述的向量归约运算可能是有用的。在加法中包括纯量操作数可能是有用的,因为这表示向量归约指令可将向量操作数的所有元素相加至由先前向量归约指令基于不同的向量操作数获得的纯量结果中,以便通过连续执行若干向量归约指令,来自多个向量的元素可累积在一起。

然而,由于浮点加法是非相关联的,所以可能重要的是,各个向量元素的加法是以预定义次序执行的,以确保将元素相加的结果为可预测的/可重复的。因此,将向量的每个连续元素添加至纯量操作数或较早迭代的结果的迭代可能需要顺序地执行。这表示单个迭代的性能可能很重要,因为单个迭代的任何速度降低皆会对整体指令产生影响,因为其延迟会多次发生。然而,因为每次迭代涉及浮点加法,与其他类型的处理运算相比,浮点加法可为相对慢的运算,且因此时序约束可相对严格。上文论述的技术可对于该等向量归约运算非常有用于允许在一周期中的较小逻辑深度,因为用于下一周期的某些初始信息是与用于较早周期的结果并行计算的,以整体提高系统的性能且支持更高的时钟频率。

对于此向量归约运算的一个问题为关于第一有效迭代,纯量浮点操作数是作为第一浮点操作数注入的,而对于后续周期,第一浮点操作数为从前述有效迭代的结果转发的经转发操作数。人们认为此将需要多路复用器选择何时将纯量浮点操作数作为第一浮点操作数注入,并且该多路复用器应设置于转发回路信号路径上,该转发回路信号路径将在先前有效迭代中的加法的转发结果作为第一浮点操作数提供,该第一浮点操作数待输入用于后续有效迭代。然而,实际上,多路复用器可引发相对较大的逻辑深度并且此对转发回路信号路径增加的延迟可能足以使得当在某些较高的时钟频率下计时时,该信号路径在单个周期中执行向量归约运算的单个迭代变得不切实际。

取而代之地,如下文进一步论述,用于选择何时注入纯量浮点的多路复用器可位于转发回路信号路径之外,该转发回路信号路径将在先前有效迭代中的加法的经转发结果作为后续有效迭代的第一浮点操作数提供。因此,经转发结果可在不经过多路复用器的情况下仅输入至下一迭代,并且多路复用器经由转发回路脱离关键时序路径。取而代之地,转发回路信号路径可包含或电路系统,该或电路系统提供待在给定迭代中处理的第一浮点操作数。此或电路系统可根据按位或运算将第一输入与第二输入组合。在除了第一有效运算之外的迭代中,或电路系统的第一输入可为在先前有效迭代中执行的加法的经转发结果。第二输入可包含多路复用器的输出,该多路复用器在纯量操作数、全零值及视情况地其他值之间选择,该其他值诸如来自执行向量归约(迭代运算)指令的先前示例的最终迭代的经转发结果。由于或电路系统典型地具有比多路复用器更浅的逻辑深度,如此提高了性能,因为沿着转发回路信号路径的时延更短,从而使得在较高的时钟频率下执行浮点向量归约运算的单个周期变得切实可行。

为了能够在关键时序路径上使用或电路逻辑代替多路复用器,结果产生电路及多路复用器本身可同时确保在其中该两者不意欲将待使用的值作为第一浮点操作数提供的周期中,结果产生电路及多路复用器输出零值,以便当与来自其他路径的输出进行或运算时,或结果将是正确的。因此,在对于第一迭代运算指令的迭代运算的最终迭代中,处理电路系统可在转发回路信号路径上提供全零值,该全零值待用作用于后续迭代运算指令的第一有效迭代的或门的第一输入。另一方面,多路复用器可在给定迭代运算指令的第一有效迭代中选择纯量浮点操作数(或者来自较早迭代运算指令的最终迭代的经转发结果),并且在一或多个后续有效迭代中选择全零值。因此,在每个迭代中,多路复用器的输出或者转发回路信号路径上的输出的任一者为零,而(除非有效加法迭代的输出为由转发电路系统返回的真零)另一者为非零(两个输出同时为非零是不可能的)。以此方式,可避免在关键时序路径上的多路复用器的存在,将其用或电路系统替代以提高性能且降低时延。

避免多路复用器在转发回路信号路径上的时延损失的另一方式可为在设置处理周期期间经由一信号路径将纯量浮点操作数注入至转发电路系统的输出中,该信号路径具有比经由用于产生实际浮点加法结果的结果产生电路系统的逻辑深度更短的逻辑深度。因此,在设置处理周期期间,转发电路系统(该电路系统在后续周期中将为给定迭代提供浮点加法结果)的输出可取而代之地输出纯量浮点操作数,以便在后续时钟周期中,结果产生电路系统可使用纯量浮点操作数作为回路的第一迭代的第一浮点操作数来执行处理的剩余部分。该方法可从转发回路的关键时序路径除去或电路以及多路复用器。

浮点表示

浮点(floating-point;FP)为使用较小数目的位来近似实数的有用方式。IEEE754-2008FP标准为FP数提供了多种不同格式,而有些格式为二进制64位(亦称为双精度,或(double precision;DP))、二进制32位(亦称为单精度,或(single precision;SP)),及二进制16位(亦称为半精度,或(half precision;HP))。数字64、32和16代表每个格式所需的位数。

FP数非常类似于在科学课中教示的“科学计法”,其中我们写的不是-2,000,000,而是-2.0×106。此数值的各部分为正负号(在该情况下为负号)、有效位数(2.0)、指数的底数(10),及指数(6)。在FP数中的所有该等部分皆相似,尽管存在差异;其最重要之处为各组成部分以二进制数储存,指数的底数始终为2。

更精确而言,FP数由符号位、一些的有偏指数位,和一些分数字节成。感兴趣的一些FP格式提供以下位:

符号 指数 分数 指数偏位
DP[63:0] 63 62:52(11位) 51:0(52位) 1023
SP[31:0] 31 30:23(8位) 22:0(23位) 127
HP[15:0] 15 14:10(5位) 9:0(10位) 15

负数的符号为1,正数的符号为0。每个数字(包括零)皆具有符号。

指数偏位表示真实指数与数字中储存的指数不同。例如,经偏位的SP指数为8位长并且范围从0至255。指数0及255为特殊情况,但是所有其他指数具有偏位127,表示真实指数小于经偏位指数127。最小经偏位指数为1,对应于真实指数-126。最大经偏位指数为254,对应于真实指数127。HP及DP指数以相同方式工作,其中偏位在上表中指示。

SP指数255(或DP指数2047,或HP指数31)经保留用于无限大及被称为NaN(非数字)的特殊符号。无限大(可为正数或负数)的分数为零。具有指数255及非零分数的任何数皆为NaN。无限大提供饱和值,因此该值实际表示着诸如“此计算产生的数字大于我们可以此格式所表示的数字”的情况。NaN对于未在实数上数学定义的操作将返回,例如零除数或者取负数的平方根。

在任意格式下,指数零经保留用于次正规数及零。正规数表示以下值:-1符号×1.分数×2e,其中e为从经偏位指数(biased exponent)计算的指数。“1.分数”这项被称为有效位数,并且1并未储存为FP数的一部分,而是从指数中推断而得。除了零及最大指数之外的所有指数指示形式为“1.分数”的有效位数。指数零指示的有效位数形式为“0.分数”,并且真实指数等于给定格式的1-偏位。该数字被称为次正规(历史上此类数字被称为非正规(denormal),但是现代使用倾向于术语次正规)。指数及分数均等于零的数字为零。

下表具有HP格式的示例性数字。该等条目采用二进制格式,并添加了“_”字符以增加可读性。应注意,次正规条目(表中第4行,指数为零)产生与前一行中的正规条目不同的有效位数。

5位指数 10位分数 11位有效位数
0 01111 00_0000_0000 100_0000_0000 1.0X 2<sup>0</sup>
1 01110 10_0000_0000 110_0000_0000 -1.1X 2<sup>-1</sup>
0 00001 10_0000_0000 110_0000_0000 1.1X 2<sup>-14</sup>
0 00000 10_0000_0000 010_0000_0000 0.1X 2<sup>-14</sup>
1 11111 00_0000_0000 -无限大
0 11111 00_1111_0011 NaN

FP实施的复杂性的大部分是归因于次正规的,因此其通常通过微码或软件处置。与软件或微码实施方式相比,处置硬件中的次正规的处理电路系统可将这些运算加速10至100倍。

整数、定点、浮点

处置符号的FP方式称为符号量值,并且该方式不同于通常整数储存于计算机中的方式(二的补码)。在符号量值表示法中,相同数目的正负版本仅符号位不同。4位符号量值整数(由符号位及3个有效位数字节成)将令加减一表示为:

+1=0001

-1=1001

在二的补码表示中,n位整数i是通过二进制n+1位值2n+i的低阶n位表示的,因此4位二的补码整数将令加减一表示为:

+1=0001

-1=1111

二的补码格式实际上对带符号的整数是通用的,因为该格式简化了计算机运算。

定点数看起来完全像一个整数,但实际上其表示具有一定数量分数位的值。传感器数据通常为定点格式,并且在广泛采用FP之前,存在大量已编写的定点软件。定点数字的使用非常繁琐,因为程序员必须追踪“二进制点”,亦即数字的整数与分数部分之间的分隔符,并且还必须不断将数字移位以保持位在正确的位置。FP数字则没有此困难,因此期望能够在定点数字和FP数字之间转换。能够进行转换表示我们仍可使用定点软件及数据,但当编写新的软件时不限于定点。

FP数的舍入

IEEE-754标准要求对大多数FP运算进行计算,就好像该运算是在无限制的范围及精度下进行的,且随后经舍入以适合FP数。若计算与FP数完全匹配,则该值始终被返回,当通常该计算产生位于两个连续浮点数之间的值。舍入为选择应返回两个连续数中哪一者的过程。

存在称为舍入模式的多个舍入方式;六个该等舍入模式如下:

模式 定义
RNE 最近舍入,取偶数值 取最接近的值,或若两个值同样接近,则取偶数值
RNA 最近舍入,取较远值 取最接近的值,或若两个值同样接近,则取离零最远的值
RZ 向零舍入 取最接近零的值
RP 向正无限大舍入 取最接近正无限大的值
RM 向负无限大舍入 取最接近负无限大的值
RX 向奇数舍入 取奇数值

该定义未告诉我们如何以任何实际方式进行取舍。一种常见的实施方式为进行运算,查找截断值(亦即,适合FP格式的值)以及所有剩余位,且随后在满足某些条件的情况下调整截断值。所有计算全部是基于:

L(最低)截断值的最低有效位

G(保护)下一最高有效位(亦即,未包括在截断中的第一位)

S(黏性)并非截断的一部分的所有剩余位的逻辑或。

给定这三个值及截断值,我们可根据下表(表1)计算经正确舍入的值:

表1

模式 改变至截断值
RNE 若(L&G)|(G&S),则递增
RNA 若G,则递增
RZ
RP 若为正数&(G|S),则递增
RM 若为负数&(G|S),则递增
RX 若G|S,则设置L

例如,考虑将两个4位有效位数相乘,且随后舍入至4位有效位数。

sig1=1011(十进制11)

sig2=0111(十进制7)

将收益相乘

sig1×sig2=1001_101(十进制77)

L Gss

经截断的4位结果的最低有效位被标记为L、下一位G,并且S为标记为s(亦即,S=0|1=1)的剩余位的逻辑或。为了舍入,我们根据上表中的舍入模式及计算来调整我们的4位结果(1001)。因此例如在RNA舍入中,G经设定,因此我们返回1001+1=1010。对于RX舍入,G|S为真,因此我们将L设定为1(其已经为1,因此在该情况下无任何变化)并且返回1001。

示例

图1示意地图示数据处理装置2的示例。数据处理装置具有处理管线4,处理管线包括数个管线级。在此示例中,管线级包括:提取级6,该提取级用于从指令高速缓存8提取指令;解码级10,用于解码提取程序指令以产生待由管线的其余级处理的微运算;发布级12,用于检查是否在寄存器文件14中可获得微运算所需的操作数,并且一旦给定微运算的所需操作数可用,就发布用于执行的微运算;执行级16,用于通过处理读取自寄存器文件14的操作数来执行对应于微运算的数据处理运算以产生结果值;及写回级18,用于将处理的结果写回至寄存器文件14。将了解,此仅为可能的管线架构的一个示例,并且其他系统可具有额外的级或者不同配置的级。例如,在乱序处理器中,可包括额外的寄存器重新命名级用于将由程序指令或微运算指定的架构寄存器映像至实体寄存器说明符,该实体寄存器说明符识别寄存器文件14中的实体寄存器。

执行级16包括用于执行不同类别的处理运算的多个处理单元。例如,执行单元可包括纯量算术/逻辑单元(scalar arithmetic/logic unit;ALU)20,用于对读取自纯量寄存器文件21的纯量操作数执行算术或逻辑运算;浮点单元22,用于对浮点值执行运算;分支单元24,用于评估分支运算的结果且相应地调整表示当前执行点的程序计数器;及加载/储存单元28,用于执行加载/储存运算以存取内存系统8、30、32、34中的数据。在此示例中,内存系统包括一阶数据高速缓存30、一阶指令高速缓存8、共享二阶高速缓存32,及主系统内存34。将了解,此仅为可能的内存阶层的一个示例,并且可提供高速缓存的其他布置。在执行级16中所示的特定类型的处理单元20至28仅为一个示例,并且其他实施可具有不同集合的处理单元或可包括相同类型的处理单元的多个示例,以便可并行处置相同类型的多个微运算。将了解,图1仅为可能的处理器管线架构的某些元素的简化表示,并且处理器可包括为了简洁起见未示出的许多其他元素,诸如分支预测机构或者地址平移或内存管理机构。

浮点单元22支持对以浮点表示表示的操作数执行的处理运算。浮点运算可包括对储存在纯量寄存器之内的纯量浮点操作数,或对储存在向量寄存器中的向量操作数的相应数据元素的浮点操作数执行的运算。一些运算亦可处理纯量及向量操作数两者。

可能由浮点单元22支持的一种类型的浮点运算,可为浮点向量归约运算;该运算可由如图2中所示的向量归约指令FADDA控制。FADDA指令为如上文论述的迭代运算指令的示例。FADDA指令指定纯量目的地寄存器Rd、向量源寄存器Za、纯量源寄存器Rb、断言寄存器Pg。纯量源寄存器Rb包含纯量浮点操作数Sc,纯量浮点操作数Sc包含如上文论述的符号、有效位数及指数。而且,向量源寄存器Za的每个元素V还包含浮点操作数,该浮点操作数再次包含符号、有效位数及指数。断言寄存器Pg包含一系列的断言指示,断言指示每一者指示源向量寄存器Za的对应元素是有效还是无效的。在此示例中,向量元素V[1]经指示为无效,因为在断言寄存器的位置1中的其对应断言旗标为0;而Za的其他向量元素全部有效,因为其断言旗标为1。

图2的下部示出待执行用于FADDA指令的运算。在第一迭代(迭代0)中,使用包括舍入及正规化的浮点加法,将寄存器Rb中的纯量操作数Sc与向量寄存器Za中的第一有效元素V[0]相加,以产生迭代0结果Sc+V[0]。在此示例中,下一迭代(迭代1)通常会将迭代0的结果相加至向量元素V[1],但由于V[1]元素由断言屏蔽为无效,所以迭代0的输出经保持为迭代1的输出,而无需在下一向量元素V[1]中相加。对于图2中所示的后续迭代2及迭代3,再次使用包括舍入及正规化的浮点加法,将向量的连续有效元素V[2]、V[3]一次一个地相加至前述迭代的结果,直至产生最终结果为止;在此示例中,该最终结果对应于纯量操作数Sc及三个有效元素V[0]、V[2]及V[3]的总和。此最终结果经储存至目的地寄存器Rd。实际上,连续执行若干FADDA指令可能是相对常见的,其中对于一个FADDA指令的如向量寄存器Za,及目的地寄存器Rd的不同源向量变为用于下一指令的源纯量寄存器Rb,以将横跨多个向量的向量元素相加在一起。

浮点加法为非相关联的,为了提供可预测的结果,迭代必须按照与源向量中的向量元素的顺序相对应的顺序进行,且迭代无法并行进行,以便此类型的运算对于与执行单个迭代的浮点加法相关联的任何增加的时延相对敏感,因为任何增加的时延皆将发生多次,每迭代一次。因此,可能期望提供用于降低对于此指令的每迭代时延的技术。

为了比较,图3示出可在用于支持此类型的浮点加法的浮点单元22之内提供的处理逻辑的示例。图3图示单个迭代的逻辑,并且为了简洁起见,未示出操作数返回另一迭代的转发。通常,加法可涉及关于使用逻辑30的待相加的操作数opa、opb的第一计算信息。例如,可计算操作数的指数之间的指数差,以及关于是否指数/有效位数具有某些特殊值的信息,该等特殊值指示浮点操作数为如上文论述的次正规、无限大、NaN等。该经计算的信息可随后被用于配置加法/舍入电路系统32或特殊值处置系统34如何处理操作数以产生结果。

取决于对于操作数的经计算的信息,加法/舍入电路系统32可包括处置不同类型的处理的近路径逻辑36及远路径逻辑38。浮点加法可被视为表示类符号加法(like-signed-addition;LSA)或非类符号加法(unlike-signed-addition;USA)。当加法运算作用于具有符号的相同值两个操作数或当减法运算作用于具有不同符号的值(该两者实际上为加法)时,执行LSA;而USA为作用于具有不同符号的浮点操作数的加法运算,或为作用于具有相同符号的操作数的减法运算。远路径逻辑38可被设计为处置所有LSA及作用于其指数差大于1的操作数的那些USA。远路径逻辑38可包括用于基于指数差将操作数的有效位数对准、将对准的有效位数相加并且将结果舍入的处理。另一方面,近路径逻辑36可处置其中指数相同或仅相差1的USA,在此情况下,可能需要用于基于加法结果中的前导零的数目调整指数,并且用于处置潜在次正规输出的逻辑。

因此,通常,浮点加法可能需要计算关于操作数的一些信息以决定如何处理操作数,例如以便可选择是需要近路径36还是远路径38;且用于配置运算的其他部分,诸如在远路径38中用于对准所需的移位量;或用于决定是否需要诸如无限大或NaN的特殊浮点值的特殊值处理34。

如图4中所示,若浮点加法包括在诸如图2的向量归约运算的迭代运算中,则人们会认为在迭代运算的每个周期中,将需要首先计算关于待在该周期中处理的操作数的信息,且随后基于关于操作数的经计算的信息将操作数相加。用于计算关于操作数的信息的逻辑30及随后的加法电路系统32可均需要某一逻辑深度,以便可由处理逻辑支持的最小时钟周期C1(且因此最大时钟频率)可基于电路逻辑30、32的经组合的逻辑深度而得以约束。

图5示出替代方法。图5示用于支持图2中所示的浮点向量归约(floating-pointvector reduction)的处理的浮点单元22的一部分。浮点向量归约逻辑包括两个级,级0及级1。级1包括用于执行浮点加法(例如,近/远路径逻辑)的大部分电路逻辑。对于近路径及远路径逻辑(为了简洁起见,该两者在图5中并未区分)两者,加法电路逻辑可包括:有效位数处理逻辑50,其产生将两个浮点操作数opa、opb相加的结果的有效位数;指数及符号处理逻辑52,其产生将操作数OPA、OPB相加的结果的指数及符号。该等位于执行级1中。

选择电路系统54经提供以选择将何操作数作为第一浮点操作数opa提供至有效位数处理逻辑50及指数/符号处理逻辑52。在迭代浮点归约运算的初始周期中,来自纯量寄存器Rb的值可经选择为操作数opa,而在后续周期中,可使用来自先前迭代的浮点结果,该浮点结果在转发电路系统的转发路径56上转发。另一方面,可从对于FADDA指令的源向量Za的各个向量元素中选择其他操作数opb。

如图5中所示,浮点单元包括初始信息确定电路系统60,该系统包括级0之内的部分60-0及在级1之内的部分60-1。与有效位数处理逻辑50完成先前迭代的加法结果的产生并行,初始信息产生电路系统60产生待在FADDA指令的下一迭代中处理的操作数opa、opb。如此利用FADDA指令的两个性质,其表示尽管迭代运算的一迭代需要在先前迭代中产生的结果,但仍然有可能将连续迭代的处理重叠,以便连续迭代部分并行执行。首先,对于FADDA指令,在向量寄存器Za之内的向量元素通常可从指令处理的开始获得,并且不取决于运算的较早周期中的加法输出,随后级0初始信息产生电路系统60-0可与产生待用于下一循环的经转发操作数opa的加法逻辑50、52并行预计算初始信息。

此外,通常,指数及符号处理逻辑52可具有比有效位数处理逻辑50更短的逻辑深度。例如,有效位数处理逻辑50可能需要相对缓慢的运算,诸如用于对准的移位及进位传播加法;而指数及符号可基于组合逻辑或通过在输入操作数的指数及符号之间选择来产生,且因此可更早地可用。因此,在完整的经转发操作数56可用之前,可获得关于待用作下一迭代的操作数opa的值的指数或符号的早期信息58。因此,在opa的完整值已产生之前,级1初始信息产生电路系统60-1可预计算关于待在下一周期中使用的操作数opa的信息。同时,此级1初始信息产生60-1可基于下一迭代的操作数opa的早期信息与对于下一迭代的操作数opb已知的完整值的比较来预计算信息(例如,指数差的所有或部分)。

通过将关于操作数的信息的一些预计算引入较早周期,这表示下一周期的加法逻辑50、52之内的逻辑深度可较短,以便有可能使用更高的时钟频率。图6示出如何将其实现的时序图。如图6中所示,与图4比较,图6中的时钟周期C2可相对于图4的时钟周期C1减小,因为现在用于产生对于给定迭代的操作数的初始信息的处理70的初始部分是与用于产生先前迭代的结果的剩余部分72的完成重叠。

因此,在迭代0中,首先在设置时钟周期之内执行处理的初始部分70,以计算关于待在迭代0中处理的操作数opa[0]、opb[0]的初始信息;且随后在下一时钟周期(周期0)中,产生处理输入操作数opa[0]、opb[0]的结果,并且此结果经转发用作迭代1的操作数opa[1]。同时,与产生结果OPA[1]的迭代0的处理的剩余部分72的结束并行,基于提前已知的opb[1]的值且基于在opa[1]的指数及符号上返回的早期信息58,在时钟周期0中执行迭代1的初始部分70。类似地,对于迭代2及3,在前述迭代的剩余部分结束之前开始初始部分70。

因此,这表示FADDA指令可在使用一时钟信号的系统上得以支持,该时钟信号具有比迭代运算的给定迭代的初始部分70及后续部分72的组合时延L更短的时钟周期C2。如此实现时钟频率的更积极缩放以不仅为FADDA指令本身提高性能,而且为由处理电路系统支持的所有其他指令提高性能;如当处理电路系统以更高的时钟频率的计时时,则该等其他运算亦加速。

图7示出可在上文论述的浮点单元22之内提供的浮点归约单元的示例。如在图7的左手侧所示,当执行如上文论述的FADDA指令时,浮点归约单元分别从纯量寄存器Rb、向量源寄存器Za,及断言寄存器Pg接收其输入值。在当执行FADDA运算的后续迭代时在后一时钟周期中需要来自Rb的纯量操作数及除了第一向量元素el_0的之外的向量元素el_1至el_3的时间,在对应的源寄存器Rb、Za已经覆写的情况下,该纯量操作数经保存在浮点归约单元的内部寄存器100之内,且该向量元素el_1至el_3经保存在浮点归约单元的内部寄存器102之内。提供用于保存纯量操作数的内部寄存器100,因为有可能向量的第一有效元素可为元素el_1至el_3的一者(若断言Pg将el_0标记为无效),在此情况下将在后续迭代中需要纯量值。

使能逻辑103经提供以提供使能信号,该等使能信号使能第二执行级104中的触发器基于来第一执行级106的值更新。在FADDA操作的迭代X中,若元素el_X的断言指示元素el_X无效,则使能逻辑103使触发器使能信号无效,以确保第二执行级104的输出触发器108保持其先前值且将不被更新,有效地提供了如在对于迭代1的图2的示例中所示的迭代的屏蔽。通过防止触发器更新,此亦节省了用于迭代运算的无效迭代的功率。第一执行级106包括多路复用器110,多路复用器110从寄存器Za中选择输入向量的元素el_0至el_3中的何者作为当前迭代中的操作数opb提供。多路复用器是通过元素计数器112控制的,元素计数器112循环通过值0、1、2、3以选择每个循环的下一个元素。加法的另一操作数opa是通过选择电路系统54选择的,该选择电路系统54是使用多路复用器54-0及或门54-1来实施的,这将在下文中更详细描述。

如图5中所示,在第二执行级104中提供加法逻辑50、52,并且提供初始信息产生电路系统60,该初始信息产生电路系统包括在第一级106之内的部分60-1及在第二级104内的部分60-1。在此示例中,由初始产生电路系统60提前计算的关于下一迭代的操作数opa、opb的信息包括每个操作数opa、opb的指数是否为0的指示,该指示是在触发器116中捕获的。预计算指数是否为零可能是有用的,因为如此可允许在浮点加法器50、52之内的逻辑的早期配置。例如,如此可允许确定浮点操作数是否为次正规,次正规可能需要在处理之前将指数从0调整至1。与用先前迭代的浮点结果计算并行,通过发生与确定一个迭代的指数是否为0相关联的逻辑延迟,此降低了在第二执行级之内的时延,使得将浮点加法器50、52的逻辑深度适合在单个时钟周期之内更加切实可行。

图7图示用作转发电路系统的转发路径56,以将在一迭代期间由浮点加法器产生的浮点结果转发回,用于作为下一迭代的操作数opa的输入。虽然有人可能认为此将需要经转发至多路复用器以在转发路径56上的经转发结果与从寄存器Rb提供的纯量输入之间选择,但是此多路复用器可能引入显著的额外延迟。因此,为了加速处理,实际情况为,转发路径56将其输入提供至或门54-1,并且至或门54-1的另一输入为多路复用器54-0的输出。因此,或门54-1仅执行其两个输入的按位或,并且将结果作为操作数opa(包括指数及分数)提供至浮点加法器50、52。或门具有比多路复用器短得多的逻辑延迟,因此其提高了性能。

当使用或门时,随后若任一输入为非零,则在该输入中的非零位将影响或门54-1的输出。因此,为了确保或门输入中仅一者为非零,回路转发路径56,或多路复用器54-0的输出的任一者通常应提供0值。触发器120经提供以提供信号至浮点加法器60-1,浮点加法器强制在转发路径56上提供的值在给定浮点归约指令FADDA的处理的最终迭代中清除为0。因此,当元素计数器112等于值“完成”时,此触发器120在时钟周期中确定,该值“完成”对应于在向量的最有效端处的元素位置(例如,对于图2的4元素示例,“完成”=3)。因此,在执行一个浮点向量归约运算的最终迭代中,在转发回路信号路径56上的值经输出为全零,这表示当浮点归约单元开始执行下一浮点向量归约指令的迭代运算时,在该下一指令的第一周期上,于回路转发路径56上的全零值将不会干扰由多路复用器54-0输出的值,该输出值随后可基于纯量值而选择。

在除了迭代运算的第一有效迭代之外的任何周期中,opa多路复用器54-0选择待提供至或门54-1的全零值122,以便该值将不会干扰提供自先前迭代中的加法的转发路径56上的经转发的结果。在对于给定浮点向量归约指令的第一有效迭代中,opa多路复用器54-0选择以下一者:(1)来自纯量源寄存器Rb自身的输出124;(2)在浮点归约单元的内部寄存器100中储存的经保存的纯量操作数;(3)在指令至指令转发路径126上提供的浮点操作数,该指令至指令转发路径126将来自一FADDA指令的结果108作为潜在输入且作为来自下一指令的纯量操作数提供,以避免将结果写入寄存器且随后结果再次读取出的延迟。因此,若需要在指令之间的转发,则可选择在内部指令至指令转发路径126上的值。若在指令之间不需要转发(因为执行的先前指令不是另一浮点向量归约指令,或者因为先前浮点向量归约指令的目的地寄存器Rd不同于当前浮点向量归约指令的源寄存器Rb),且若第一迭代有效,则来自原始纯量寄存器Rb的值124是在第一迭代(对应于元素el_0)上选择的;或者若第一有效迭代为除了迭代0之外的后续迭代1、2、3的一者,则来自内部寄存器100的值是在第一有效迭代上选择的,因为迭代0由断言标记为无效。一旦给定有效迭代已经处理,则对于任何剩余迭代,opa多路复用器54-0选择全零值122以避免与回路信号路径56上的迭代至迭代转发干扰。

因此,由于多路复用器54-0在沿着回路56的关键时序路径之外,如此提高了性能并且因此实现时钟频率的更积极缩放。

图7示出其中多路复用器54-0的输出通过或电路系统54-1的示例,该或电路系统将来自转发路径56的经转发操作数与多路复用器54-0的纯量输出组合。然而,另一方法为在设置时钟周期期间经由轻逻辑加载的特殊路径注入初始迭代的纯量值,以产生关于转发电路系统56的输出的纯量值;除了移除多路复用器54-0之外,如此还将从单周期转发返回路径56中完全移除或门54-1。

图7图示其中关于下一周期的操作数计算的初始信息为是否任一操作数opa、opb的指数为零的指示的示例。如此允许有效位数的较早建构。而且,在图7中,指数值可较早地返回,并且对于给定迭代,由浮点加法器50、52对指数的处理可相对于有效位数的处理偏斜,以便指数处理在有效位数处理之前开始。

然而,有可能的是,与完成用于在先前迭代中产生浮点加法结果的处理的剩余部分并行确定用于下一迭代的操作数opa、opb上的其他初始信息。例如,有可能提前预计算操作数opa、opb的指数之间的指数差的低阶位或低阶位集,或甚至计算完整的指数差expa-expb及/或expb-expa。在一些实施方式中,可能并不预先知道操作数中的何者具有较大指数,因此可并行计算指数差expa-expb及expb-expa两者以允许较早处理。可能需要该等指数差以确定位位置的数目,较小操作数的有效位数应通过该等位位置移位以便与其他有效位数对准,并且指数差亦可用于产生诸如舍入状态的其他信息。

同时,操作数的符号可较早地预计算,并且如此可控制用于处置LSA或USA的处理路径是否可使用,例如,如此可控制如上文论述的近处理逻辑与远处理逻辑之间的选择。此外,预计算逻辑60可计算关于给定浮点操作数是为无限大还是NaN的信息,该信息可控制用于处置此类特殊浮点值的特殊处置逻辑是否被使用。

另一示例可预计算操作数opb是否等于0(若经偏位指数及分数同时为0,则可将此确定),此举可有助于加速处理,因为若已知操作数为0,则可省略涉及加法的更复杂的处理信号路径。若对于给定迭代opb=0,则可去能用于寄存器108的触发器使能信号以防止先前迭代的结果被更新,因为先前结果+0仍为先前结果。

因此,可计算关于操作数opa及/或opb的各种信息,并且通过将该逻辑引出单个迭代的关键路径,如此加速了比迭代的处理并且实现了较高时钟频率的使用。

图8为示出执行迭代运算的方法的流程图。在步骤202处,在设置周期中,初始信息产生电路系统60确定待在迭代运算的迭代n中处理的操作数上的初始信息,其中对于初始设置周期,n=0。

在后续时钟周期中,在步骤204处,结果产生电路系统50、52产生对于迭代n的结果值,并且与完成用于产生该结果的迭代的剩余部分并行,在步骤206处,初始信息产生电路系统60执行下一迭代的处理的初始部分以确定关于待在下一迭代n+1上执行的操作数的初始信息。

在步骤208处,可以确定迭代n是否为迭代运算的最后迭代;若是,则在步骤210处,迭代n的在步骤204处产生的最终结果经输出为指令的结果。然而,若仍然有另一迭代待处理,则在步骤212处,转发电路系统56将迭代n的结果作为下一迭代n+1的输入转发,并且n递增。因此,在下一时钟周期中,再次执行步骤204、206以执行后续迭代n+2、n+1的初始/剩余部分。

因此,利用该技术,与计算初始信息相关联的时延可隐藏在确定结果的时延阴影中,以提高性能。

在本申请中,用词“被配置为”是用于表示装置的元素具有能够执行经定义运算的配置。在本上下文中,“配置”表示将硬件或软件互连的布置或方式。例如,装置可具有提供经定义运算的专用硬件,或者处理器或可经程序化以执行功能的其他处理设备。“被配置为”不意味装置元素需要以任何方式改变以提供经定义的运算。

尽管本发明的说明性实施例已参考附图在其中详细描述,但是应将理解,本发明不限于那些精确实施例,并且在不背离如由随附权利要求定义的本发明的范围及精神的情况下,可由本领域技术人员在本发明中进行各种改变及修改。

26页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种处理器、指令执行设备及方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!