首页 / 专利库 / 电脑零配件 / 中央处理器 / 算术逻辑单元 / 具有重叠执行的流处理器

具有重叠执行的流处理器

阅读:523发布:2020-05-17

专利汇可以提供具有重叠执行的流处理器专利检索,专利查询,专利分析的服务。并且本 发明 涉及一种具有重叠执行的流处理器。公开了用于实现具有重叠执行的流处理器的系统、装置和方法。在一个实施方式中,系统至少包括具有多个执行流 水 线的并行处理单元。通过在不提高指令发布速率的情况下使用单遍指令重叠执行多遍指令来增加并行处理单元的处理吞吐量。在单个时钟周期中从共享矢量寄存器堆读取第一矢量指令的多个第一操作数,并存储在临时 存储器 中。多个第一操作数被 访问 并用于在随后时钟周期中启动在第一执行流水线上各个矢量元素上的多个指令。在随后时钟周期期间从共享矢量寄存器堆中读取多个第二操作数,以启动在第二执行流水线上的一个或多个第二矢量指令的执行。,下面是具有重叠执行的流处理器专利的具体信息内容。

1.一种系统,其包括:
第一执行流线;
与所述第一流水线并行的第二执行流水线;和
由所述第一执行流水线和所述第二执行流水线共享的矢量寄存器堆;
其中所述系统被配置为:
在所述第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在所述第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
2.如权利要求1所述的系统,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述系统被配置为:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中启动对在所述第一执行流水线上的多个矢量元素执行所述第一矢量指令。
3.根据权利要求2所述的系统,其中所述系统被配置为在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动在所述第二执行流水线上执行一个或多个第二矢量指令。
4.根据权利要求1所述的系统,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
5.根据权利要求4所述的系统,其中,所述系统还被配置为响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
6.如权利要求1所述的系统,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元
7.如权利要求1所述的系统,其中所述系统还被配置为:
检测第一矢量指令;
确定所述第一矢量指令的指令类型;
响应于确定所述第一矢量指令是所述第一类型指令而在所述第一执行流水线上发布所述第一矢量指令;和
响应于确定所述第一矢量指令是所述第二类型指令而在所述第二执行流水线上发布所述第一矢量指令。
8.一种方法,其包括:
在第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在所述第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
9.根据权利要求8所述的方法,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述方法还包括:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中在所述第一执行流水线上启动对多个矢量元素执行所述第一矢量指令。
10.根据权利要求9所述的方法,还包括在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动所述第二执行流水线上的一个或多个第二矢量指令的执行。
11.根据权利要求9所述的方法,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
12.根据权利要求11所述的方法,还包括:响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
13.如权利要求8所述的方法,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元。
14.根据权利要求8所述的方法,还包括:
检测第一矢量指令;
确定所述第一矢量指令的指令类型;
响应于确定所述第一矢量指令是所述第一类型指令而在所述第一执行流水线上发布所述第一矢量指令;和
响应于确定所述第一矢量指令是所述第二类型指令而在所述第二执行流水线上发布所述第一矢量指令。
15.一种装置,其包括:
第一执行流水线;和
与所述第一流水线并行的第二执行流水线;
其中所述装置被配置为:
在所述第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在所述第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在所述第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
16.根据权利要求15所述的装置,其中,所述装置还包括由所述第一执行流水线和所述第二执行流水线共享的矢量寄存器堆,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述装置还被配置为:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中在所述第一执行流水线上启动对多个矢量元素执行所述第一矢量指令。
17.根据权利要求16所述的装置,其中,所述装置被配置为在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动所述第二执行流水线上的一个或多个第二矢量指令的执行。
18.根据权利要求16所述的装置,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
19.根据权利要求18所述的装置,其中,所述装置还被配置为响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
20.根据权利要求15所述的装置,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元。

说明书全文

具有重叠执行的流处理器

技术领域

[0001] 本发明涉及计算机领域,更具体而言,涉及一种具有重叠执行的流处理器。

背景技术

[0002] 许多不同类型的计算系统包括矢量处理器或单指令的多数据(SIMD)处理器。任务可以在这些类型的并行处理器上并行执行,以增加计算系统的吞吐量。应当注意,并行处理器在本文中也可以称为“流处理器”。改进流处理器吞吐量的尝试持续地在进行。术语“吞吐量”可以被定义为处理器在给定时间段内可以执行的工作量(例如,任务数量)。提高流处理器吞吐量的一种技术是增加指令发布速率。然而,增加流处理器的指令发布速率通常会导致成本和功耗的增加。在不增加指令发布速率的情况下增加流处理器的吞吐量可能是一个挑战。

发明内容

[0003] 本发明的一些方面可以具体描述如下:1.一种系统,其包括:
第一执行流线;
与所述第一流水线并行的第二执行流水线;和
由所述第一执行流水线和所述第二执行流水线共享的矢量寄存器堆;
其中所述系统被配置为:
在所述第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在所述第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
2.如条款1所述的系统,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述系统被配置为:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中启动对在所述第一执行流水线上的多个矢量元素执行所述第一矢量指令。
3.根据条款2所述的系统,其中所述系统被配置为在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动在所述第二执行流水线上执行一个或多个第二矢量指令。
4.根据条款1所述的系统,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
5.根据条款4所述的系统,其中,所述系统还被配置为响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
6.如条款1所述的系统,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元
7.如条款1所述的系统,其中所述系统还被配置为:
检测第一矢量指令;
确定所述第一矢量指令的指令类型;
响应于确定所述第一矢量指令是所述第一类型指令而在所述第一执行流水线上发布所述第一矢量指令;和
响应于确定所述第一矢量指令是所述第二类型指令而在所述第二执行流水线上发布所述第一矢量指令。
8.一种方法,其包括:
在第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在所述第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
9.根据条款8所述的方法,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述方法还包括:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中在所述第一执行流水线上启动对多个矢量元素执行所述第一矢量指令。
10.根据条款9所述的方法,还包括在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动所述第二执行流水线上的一个或多个第二矢量指令的执行。
11.根据条款9所述的方法,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
12.根据条款11所述的方法,还包括:响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
13.如条款8所述的方法,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元。
14.根据条款8所述的方法,还包括:
检测第一矢量指令;
确定所述第一矢量指令的指令类型;
响应于确定所述第一矢量指令是所述第一类型指令而在所述第一执行流水线上发布所述第一矢量指令;和
响应于确定所述第一矢量指令是所述第二类型指令而在所述第二执行流水线上发布所述第一矢量指令。
15.一种装置,其包括:
第一执行流水线;和
与所述第一流水线并行的第二执行流水线;
其中所述装置被配置为:
在所述第一执行流水线上在第一时钟周期中启动对第一矢量的第一矢量元素执行第一类型指令;
在所述第一执行流水线上在所述第二时钟周期中启动对所述第一矢量的第二矢量元素执行所述第一类型指令,其中所述第二时钟周期在所述第一时钟周期之后;和在所述第二执行流水线上在所述第二时钟周期中启动对第二矢量的多个矢量元素执行第二类型指令。
16.根据条款15所述的装置,其中,所述装置还包括由所述第一执行流水线和所述第二执行流水线共享的矢量寄存器堆,其中所述矢量寄存器堆包括单个读取端口以在每个时钟周期将操作数传送到仅一个执行流水线,并且其中所述装置还被配置为:
在单个时钟周期内从所述矢量寄存器堆中检索第一矢量指令的多个第一操作数;
将所述多个第一操作数存储在临时存储器中;和
从所述临时存储器访问所述多个第一操作数,以在随后的时钟周期中在所述第一执行流水线上启动对多个矢量元素执行所述第一矢量指令。
17.根据条款16所述的装置,其中,所述装置被配置为在所述后续时钟周期期间从所述矢量寄存器堆中检索多个第二操作数,以启动所述第二执行流水线上的一个或多个第二矢量指令的执行。
18.根据条款16所述的装置,其中所述第一执行流水线是先验流水线,并且其中所述先验流水线包括查找阶段,随后是第一乘法阶段和第二乘法阶段,之后是加法阶段,随后是归一化阶段,以及随后是舍入阶段。
19.根据条款18所述的装置,其中,所述装置还被配置为响应于确定所述一个或多个第二矢量指令与所述第一矢量指令之间没有相关性来启动在所述第二执行流水线上执行所述一个或多个第二矢量指令。
20.根据条款15所述的装置,其中:
所述第一类型指令是矢量先验指令;
所述第一执行流水线是标量先验流水线;
所述第二类型指令是矢量融合乘加指令;以及
所述第二执行流水线是矢量算术逻辑单元。
附图说明
[0004] 通过结合附图参考以下描述可以更好地理解本文描述的方法和机构的优点,其中:
[0005] 图1是计算系统的一个实施方式的框图
[0006] 图2是具有多种类型的执行流水线的流处理器的一个实施方式的框图。
[0007] 图3是具有多种类型的执行流水线的流处理器的另一实施方式的框图。
[0008] 图4是流水线上重叠执行的一个实施方式的时序图。
[0009] 图5是示出用于在多个执行流水线中重叠执行的方法的一个实施方式的一般流程图
[0010] 图6是示出用于在多个执行流水线之间共享矢量寄存器堆的方法的一个实施方式的一般流程图。
[0011] 图7是示出用于确定在哪个流水线上执行给定矢量指令的方法的一个实施方式的一般流程图。
[0012] 图8是示出用于实现指令仲裁器的方法的一个实施方式的一般流程图。

具体实施方式

[0013] 在下面的描述中,阐述了许多具体细节以提供对本文呈现的方法和机制的透彻理解。然而,本领域普通技术人员应该认识到,可以在没有这些具体细节的情况下实践各种实施方式。在一些情况下,未详细示出公知的结构、组件、信号计算机程序指令和技术,以避免模糊本文描述的方法。应当理解,为了说明的简单和清楚,附图中所示的元件未必按比例绘制。例如,某些元件的尺寸可能会相对于其它元件而夸大。
[0014] 本文公开了用于提高处理器吞吐量的系统、装置和方法。在一个实施方式中,通过在不提高指令发布速率的情况下通过在单独执行流水线上重叠执行具有单遍指令的多遍指令来增加处理器吞吐量。在一个实施方式中,系统至少包括具有多个执行流水线的并行处理单元。并行处理单元包括至少两种不同类型的执行流水线。这些不同类型的执行流水线通常可以被称为第一类型执行流水线和第二类型执行流水线。在一个实施方式中,第一类型执行流水线是用于执行先验操作(例如,乘幂,对数,三函数)的先验流水线(transcendental pipeline),第二类型执行流水线是用于执行融合乘加运算(FMA)的矢量算术逻辑单元(ALU)流水线。在其它实施方式中,第一和/或第二类型的处理流水线可以是处理其它类型的操作的其它类型的执行流水线。
[0015] 在一个实施方式中,当第一类型执行流水线是先验流水线时,在系统上执行的应用程序可以改善具有大量先验操作的3D图形的着色器性能。充分利用多个执行流水线的计算吞吐量的传统方法是通过复杂指令调度器和高带宽矢量寄存器堆(vector register file)实现多问题架构。然而,本文描述的系统和装置包括与单问题架构兼容的指令调度器和矢量寄存器堆。
[0016] 在一个实施方式中,多遍指令(例如,先验指令)将花费一个周期来将操作数读入到第一执行流水线并启动第一矢量元素的执行,但是从下一周期开始,如果指令之间没有依赖关系,则第二矢量元素的执行可以与第二执行流水线上的指令重叠。在其它实施方式中,可以实现处理器架构并将其应用于其它多遍指令(例如,双精度浮点指令)。利用这里描述的技术,在不提高指令发布速率的情况下增加具有多个执行单元的处理器的吞吐量。
[0017] 在一个实施方式中,待由第一执行流水线执行的矢量指令的多个矢量元素的多个第一操作数在单个时钟周期从矢量寄存器堆被读取并存储在临时存储器中。在一个实施方式中,临时存储器通过使用耦合到矢量寄存器堆的输出的触发器来实现。从临时存储器访问操作数,并且操作数用于在随后的时钟周期中在第一执行流水线上启动多个操作的执行。同时,第二执行流水线从矢量寄存器堆访问多个第二操作数,以在随后的时钟周期期间在第二执行流水线上开始执行一个或多个矢量操作。在一个实施方式中,第一执行流水线具有到矢量目标高速缓存的单独写入端口,以允许与第二执行流水线的共同执行。
[0018] 现在参考图1,示出了计算系统100的一个实施方式的框图。在一个实施方式中,计算系统100至少包括一或多个处理器110、输入/输出(I/O)接口120、总线125和一或多个存储器设备130。在其它实施方式中,计算系统100可以包括其它组件,和/或计算系统100可以不同地布置。
[0019] 一或多个处理器110代表任何数量和类型的处理单元(例如,中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)、现场可编程阵列(FPGA)、专用集成电路(ASIC))。在一个实施方式中,一或多个处理器110包括具有多个流处理器的矢量处理器。每个流处理器也可以被称为处理器或处理通道。在一个实施方式中,每个流处理器包括共享公共矢量寄存器堆的至少两种类型的执行流水线。在一个实施方式中,矢量寄存器堆包括多库(bank)高密度随机存取存储器(RAM)。在各种实施方式中,指令的执行可以在多个执行流水线上重叠以增加流处理器的吞吐量。在一个实施方式中,第一执行流水线具有到矢量目标高速缓存的第一写入端口,并且第二执行流水线具有到矢量目标高速缓存的第二写入端口,以允许执行两流水线都以相同的时钟周期写入到矢量目标高速缓存。
[0020] 一或多个存储设备130代表任何数量和类型的存储设备。例如,一或多个存储设备130中的存储器类型可以包括动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、NAND闪存、NOR闪存、电随机存取存储器(FeRAM)或其它。一或多个存储设备130可由一或多个处理器110访问。I/O接口120代表任何数量和类型的I/O接口(例如,外围组件互连(PCI)总线、PCI扩展(PCI-X)、PCIE(PCI Express)总线,千兆以太网(GBE)总线、通用串行总线(USB))。各种类型的外围设备可以耦合到I/O接口120。这样的外围设备包括(但不限于)显示器、键盘鼠标打印机扫描仪、操纵杆或其它类型的游戏控制器、媒体记录设备、外部存储设备、网络接口卡等。
[0021] 在各种实施方式中,计算系统100可以是计算机、膝上型计算机、移动设备、服务器或各种其它类型的计算系统或设备中的任何一种。注意,计算系统100的组件的数量可以从实施方式到实施方式而变化。每个组件/子组件可以多于或者少于图1所示的数量。还应注意,计算系统100可以包括图1中未示出的其它组件。
[0022] 现在转到图2,示出了具有多种类型的执行流水线的流处理器200的一个实施方式的框图。在一个实施方式中,流处理器200包括由第一执行流水线220和第二执行流水线230共享的矢量寄存器堆210。在一个实施方式中,矢量寄存器堆210用多组随机存取存储器(RAM)实现。尽管图2中未示出,但在一些实施方式中,矢量寄存器堆210可以耦合到操作数缓冲器,以向第一执行流水线220和第二执行流水线230提供增加的操作数带宽。
[0023] 在一个实施方式中,在单个周期中,用于矢量指令的多个源数据操作数(或操作数)从矢量寄存器堆210中读取出并存储在临时存储器215中。在一个实施方式中,用多个触发器实现临时存储器215。然后,在随后的周期中,将操作数从临时存储器215中提取出来并提供给在第一执行流水线220上启动执行的各个指令。由于第一执行流水线220在这些后续周期期间不访问矢量寄存器堆210,因此第二执行流水线230能够访问矢量寄存器堆210以检索操作数,以执行与由第一执行流水线220执行的各个指令重叠的矢量指令。第一执行流水线220和第二执行流水线230利用单独的写端口将结果写入矢量目标高速缓存240。
[0024] 在一个实施方式中,第一执行流水线220是先验执行流水线,第二执行流水线230是矢量算术逻辑单元(VALU)流水线。VALU流水线也可以实现为矢量融合乘加(FMA)流水线。在其它实施方式中,第一执行流水线220和/或第二执行流水线230可以是其它类型的执行流水线。应当理解,虽然在流处理器200中示出了两种独立类型的执行流水线,但这意在说明一个可能的实施方式。在其它实施方式中,流处理器200可以包括耦合到单个矢量寄存器堆的其它数量的不同类型的执行流水线。
[0025] 现在参考图3,示出了具有多种类型的执行流水线的流处理器300的另一实施方式的框图。在一个实施方式中,流处理器300包括先验执行流水线305和融合乘加(FMA)执行流水线310。在一些实施方式中,流处理器300还可以包括双精度浮点执行流水线(未示出)。在其它实施方式中,流处理器300可以包括其它数量的执行流水线和/或其它类型的执行流水线。在一个实施方式中,流处理器300是单发布处理器。
[0026] 在一个实施方式中,流处理器300被配置为执行具有四个元素的矢量宽度的矢量指令。应当理解,虽然流处理器300的架构被示为每个矢量指令包括四个元素,但这只是表示一个特定实施方式。在其它实施方式中,流处理器300可以每个矢量指令包括其它数量(例如,2、8、16)的元素。另外,应当理解,流处理器300内的总线的位宽可以是根据实施方式可以变化的任何合适的值。
[0027] 在一个实施方式中,先验执行流水线305和FMA执行流水线310共享指令操作数缓冲器315。在一个实施方式中,指令操作数缓冲器315耦合到矢量寄存器堆(未示出)。当发出针对先验执行流水线305的矢量指令时,用于矢量指令的操作数以单个周期读取,并将其存储在临时存储器(例如,触发器)330中。然后,在下一个周期中,矢量指令的第一操作从临时存储器330访问一个或多个第一操作数,以启动先验执行流水线305上的第一操作的执行。FMA执行流水线310可以以在先验执行流水线305上启动第一操作的周期相同的周期来访问指令操作数缓冲器315。类似地,在随后的周期中,从触发器330访问附加操作数,以启动对先验执行流水线305上的相同矢量指令的操作的执行。换句话说,矢量指令被转换成在先验执行流水线305上以多个时钟周期启动的多个标量指令。同时,在先验执行流水线305上正在启动多个标量操作时,同时可以在FMA执行流水线310上执行重叠指令。
[0028] 对于先验执行流水线305和FMA执行流水线310两者示出了流水线的不同阶段。例如,阶段325涉及将多路复用器(“muxes”)320A-B的操作数路由到相应流水线的输入。阶段335涉及对先验执行流水线305执行查找表(LUT)的查找,并对FMA执行流水线310执行对多个矢量元素的多个操作数的乘法操作。阶段340涉及对先验执行流水线305执行乘法操作和对FMA执行流水线310执行多个矢量元素的多个操作数的加法操作。阶段345涉及对先验执行流水线305执行乘法操作,并对FMA执行流水线310执行多个矢量元素的归一化(normalization)操作。阶段350涉及对先验执行流水线305执行加法操作,并对FMA执行流水线310执行多个矢量元素的舍入操作。在阶段355中,先验执行流水线305的数据通过归一化和前导零检测单元,舍入阶段的输出被写入用于FMA执行流水线310的矢量目标高速缓存。在阶段360中,先验执行流水线对来自阶段355的输出执行舍入操作,然后将数据写入矢量目标高速缓存。注意,在其它实施方式中,可以不同地构造先验执行流水线305和/或FMA执行流水线310。
[0029] 现在转到图4,示出了处理流水线的重叠执行的一个实施方式的时序图400。为了本讨论的目的,可以假定时序图400适用于执行(图3的)流处理器300的先验执行流水线305和FMA执行流水线310上的指令。显示为在时序图400中执行的指令仅仅是一个特定实施方式的指示。在其它实施方式中,可以在先验执行流水线和FMA执行流水线上执行其它类型的指令。指令ID所示的周期表示流处理器的时钟周期。
[0030] 在对应于指令ID0的通道405中,在FMA执行流水线上正在执行矢量融合乘加(FMA)指令。源数据操作数在周期0中从矢量寄存器堆中读取。对应于指令ID1的通道410示出了正在先验执行流水线上执行的矢量互逆指令(vector reciprocal instruction)的定时。矢量互逆指令的通过0在循环1中启动。在循环1中,矢量互逆指令的通过0从矢量寄存器堆读取整个矢量互逆指令的所有操作数,并将它们存储在临时存储器中。注意,通过0涉及由先验执行流水线处理的第一矢量元素,其中通过1涉及由先验执行流水线处理的第二矢量元素,等等。在时序图400所示的实施方式中,假定矢量指令的宽度是四个要素。在其它实施方式中,可以利用其它矢量宽度。
[0031] 接下来,在循环2中,如在通道415中所示,在FMA执行流水线上启动矢量加法指令。在矢量加法指令被启动的同时,在循环2中,启动矢量互逆的通过1,如通道420所示。如通道
415所示的加法指令在周期2中访问矢量寄存器堆,而矢量互逆指令的通过1从临时存储器访问操作数。这样可以通过阻止矢量加法指令和矢量互逆指令在相同的时钟周期内访问矢量寄存器堆来防止发生冲突。通过防止矢量寄存器堆冲突,通道415的矢量加法指令的执行能够与在通道420所示的矢量互逆指令的通过1重叠。
[0032] 在循环3中,如在通道425中所示,在FMA执行流水线上启动具有指令ID3的矢量乘法指令。同样在循环3中,矢量互逆指令的通过2在先验执行流水线上启动,如通道430所示。在循环4中,如通道435所示,在FMA执行流水线上启动具有指令ID4的矢量下舍入指令(vector floor instruction)。同样在循环4中,如通道440所示,矢量互逆指令的通过3在先验执行流水线上启动。在循环5中,如通道445所示,具有指令ID5的矢量分式指令(vector fraction instruction)在FMA执行流水线上启动。注意,在一个实施方式中,矢量目标高速缓存存在两个写入端口,允许先验执行流水线和FMA执行流水线在相同的时钟周期写入到矢量目标高速缓存。
[0033] 在通道402中,示出了在执行流水线上执行的不同指令的在矢量目标高速缓存中的高速缓存行分配的时序。在一个实施方式中,缓存线被提前分配并对齐,以避免与其它指令的分配冲突。在循环4中,在通道405中示出的FMA指令的矢量目标高速缓存中分配高速缓存行。在循环5中,在矢量目标高速缓存中分配高速缓存行,以存储互逆指令的所有四次通过的结果。在循环6中,针对通道415中示出的加法指令在矢量目标高速缓存中分配高速缓存行。在循环7中,针对通道425中示出的乘法指令在矢量目标高速缓存中分配高速缓存行。在周期8中,针对通道435所示的下舍入指令在矢量目标高速缓存中分配高速缓存行。在循环9中,针对通道445中示出的分式指令在矢量目标高速缓存中分配高速缓存行。应注意,由于在第一次通过期间较早地分配先验流水线的高速缓存行,使得分配不与在FMA执行流水线上执行的任何指令冲突,因此在单个周期中未分配两个高速缓存行。还要注意的是,为矢量目标缓存实现多个写入端口,以避免先验流水线与FMA执行流水线之间的写入冲突。
[0034] 现在参考图5,示出了用于在多个执行流水线中重叠执行的方法500的一个实施方式。为了讨论的目的,本实施方式中的步骤和图6的步骤按顺序显示。然而,应当注意,在所描述的方法的各种实施方式中,所描述的元素中的一个或多个元素以与所示的顺序不同的顺序同时进行,或完全省略。还可以根据需要执行其它附加元素。本文描述的各种系统或装置中的任何一个被配置为实现方法500。
[0035] 处理器在第一执行流水线上启动在第一时钟周期中对第一矢量元素执行第一类型指令(框505)。在一个实施方式中,第一执行流水线是先验流水线,第一类型指令是矢量先验指令。注意,“启动执行”被定义为向执行流水线的第一阶段提供要执行的指令的一或多个操作数和/或指令。执行流水线的第一阶段随后根据第一阶段的处理元素的功能开始处理一个或多个操作数。
[0036] 接下来,处理器在第一执行流水线上启动在第二时钟周期中对第二矢量元素执行第一类型指令,其中第二时钟周期在第一时钟周期之后(框510)。然后,处理器在第二执行流水线上启动在第二时钟周期中对具有多个元素的矢量执行第二类型指令(框515)。在一个实施方式中,第二执行流水线是矢量算术逻辑单元(VALU),第二类型指令是矢量融合乘加(FMA)指令。在框515之后,方法500结束。
[0037] 现在转向图6,示出了用于在多个执行流水线之间共享矢量寄存器堆的方法600的一个实施方式。在单个时钟周期中从矢量寄存器堆中检索第一矢量指令的多个第一操作数(框605)。接下来,将多个第一操作数存储在临时存储器中(框610)。在一个实施方式中,临时存储器包括耦合到矢量寄存器堆的输出的多个触发器。
[0038] 然后,从临时存储器访问多个第一操作数,以在随后的时钟周期中在第一执行流水线上启动执行第一矢量指令的多个矢量元素(框615)。注意,在随后的时钟周期期间,第一执行流水线不访问矢量寄存器堆。另外,在随后的时钟周期期间从矢量寄存器堆中检索多个第二操作数,以启动在第二执行流水线上执行一个或多个第二矢量指令(框620)。注意,第二执行流水线可以在随后的时钟周期期间多次访问矢量寄存器堆,以在第二执行流水线上启动多个第二矢量指令。由于第一执行流水线在随后的时钟周期期间未访问矢量寄存器堆,因此第二执行流水线能够访问矢量寄存器堆以获得用于执行重叠指令的操作数。在框620之后,方法600结束。
[0039] 现在参考图7,示出了用于确定在哪个流水线上执行给定的矢量指令的方法700的一个实施方式。处理器在指令流中检测给定的矢量指令(框705)。接下来,处理器确定给定的矢量指令的指令类型(框710)。如果给定的矢量指令是第一类型指令(决策框715,“第一”支路),则处理器在第一执行流水线上发布给定的矢量指令(框720)。在一个实施方式中,第一类型指令是矢量先验指令,并且第一执行流水线是标量先验流水线。
[0040] 否则,如果给定的矢量指令是第一类型指令(决策框715,“第一”支路),则处理器在第一执行流水线上发布给定的矢量指令(框725)。在一个实施方式中,第二类型指令是矢量融合乘加指令,第二执行流水线是矢量算术逻辑单元(VALU)。在框720和725之后,方法700结束。注意,可以对在指令流中检测到的每个矢量指令执行方法700。
[0041] 现在转到图8,示出了用于实现指令仲裁器的方法800的一个实施方式。指令仲裁器接收多个用于执行的指令流(框805)。指令仲裁器基于流的优先级选择一个用于执行的指令流(框810)。接下来,指令仲裁器判定来自所选择的指令流的就绪指令是否是先验指令(决策框815)。如果就绪指令是先验指令(决策框815,“是”支路),则指令仲裁器判定先前的先验指令是否在少于四个周期之前被调度(决策框825)。应注意,在决策框825中使用四个周期是依赖于流水线的。在其它实施方式中,在对决策框825执行的判定中可以使用除了四个之外的其它数目的周期。如果就绪指令不是先验指令(决策框815,“否”支路),则指令仲裁器发布这个非先验指令(框820)。在框820之后,方法800返回到框810。
[0042] 如果先前的先验指令在少于四个周期前被调度(决策框825,“是”支路),则指令仲裁器判定下一个就绪波(ready wave)的指令是否是先前的先验指令(决策框830)。如果先前的先验指令的调度时间少于四个周期前没有被调度(决策框825,“否”支路),则指令仲裁器发布该先验指令(方框835)。在框835之后,方法800返回到框810。如果下一个就绪波的指令是非先验指令(决策框830,“是”支路),则指令仲裁器发布该非先验指令(框840)。在框840之后,方法800返回到方框810。如果下一个就绪波的指令是先验指令(决策框830,“否”支路),则方法800返回到框810。
[0043] 在各种实施方式中,软件应用的程序指令用于实现先前描述的方法和/或机制。程序指令描述了诸如C之类的高级编程语言中的硬件行为。或者,使用硬件设计语言(HDL),诸如Verilog。程序指令存储在非暂时性的计算机可读存储介质上。有多种类型的存储介质可用。在使用期间,存储介质可由计算系统访问,以将程序指令和附带数据提供给计算系统用于程序执行。计算系统包括至少一个或多个存储器和被配置为执行程序指令的一个或多个处理器。
[0044] 应当强调,上述实施方式仅是实现方案的非限制性示例。一旦完全理解了上述公开内容,许多变化和修改对于本领域技术人员而言将变得显而易见。旨在将以下权利要求解释为包含所有这些变化和修改。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈