利用特定数检测的多流水线架构

文档序号:1146099 发布日期:2020-09-11 浏览:18次 >En<

阅读说明:本技术 利用特定数检测的多流水线架构 (Multi-pipeline architecture with special number detection ) 是由 韩亮 蒋晓维 于 2018-12-21 设计创作,主要内容包括:本公开涉及具有多流水线架构的计算设备。所述多流水线架构包括并发运行的第一流水线和第二流水线,其中所述第一流水线比所述第二流水线提前至少一个周期运行。在所述第一流水线上利用特定数检测,其中特定数是产生可预测结果的数值。在检测到特定数后,计算得以优化。(The present disclosure relates to computing devices having multiple pipeline architectures. The multi-pipeline architecture includes a first pipeline and a second pipeline that run concurrently, wherein the first pipeline runs at least one cycle ahead of the second pipeline. Utilizing a particular number detection on the first pipeline, wherein a particular number is a numerical value that produces a predictable result. After a certain number is detected, the calculation is optimized.)

利用特定数检测的多流水线架构

相关申请的交叉引用

本公开要求2017年12月22日提交的美国临时申请No.62/610,077和2018年12月10日提交的美国专利申请No.16/215,553的优先权权益,上述申请的全部内容通过引用合并于此。

背景技术

开发神经网络处理器以加速基于神经网络的深度学习应用已在许多业务领域获得了重大关注,包括成熟的芯片制造商、初创公司以及大型互联网公司。单指令多数据(SIMD)架构能应用于芯片以加速深度学习应用的操作。随着基于神经网络的深度学习应用(例如图像识别、语言/语音识别和机器翻译)呈指数增长,希望保持并提高系统的计算强度。

发明内容

本公开涉及用于具有特定数检测能力以简化操作并提高计算强度的多管道流水线(pipeline)的方法和系统。

与公开的一些实施例一致,提供了一种计算方法,用于在利用多流水线架构的计算设备中、并带有特定数检测。所述计算设备包括用于存储指令的存储器和用于执行所述指令以执行所述方法的处理单元。所述方法包括针对来自所述存储器的数据并发地运行第一流水线和第二流水线。所述第一流水线被配置为从所述存储器接收第一操作数,所述第二流水线被配置为从所述存储器接收第二操作数。所述第一流水线比所述第二流水线提前至少一个周期操作。

所述方法还包括针对所述第一操作数在所述存储器中生成存储器地址,并在所述第一流水线上从生成的存储器地址读取所述第一操作数。所述方法还包括:通过检测器检测所述第一操作数是否为特定数,其中,特定数是产生预定或可预测操作结果的数值。

如果所述第一操作数是特定数,则所述方法还包括检索(retrieve)与检测到的特定数相关联的结果,并将检索到的结果存储在针对所述第一流水线和所述第二流水线的所述存储器中。如果所述第一操作数不是特定数,则所述方法还包括针对所述第二操作数在所述存储器中生成存储器地址,在所述第二流水线上从生成的存储器地址读取所述第二操作数,对所述第一操作数和所述第二操作数执行操作,并将执行的操作的结果存储在针对所述第一流水线和所述第二流水线的所述存储器中。

本文公开的一些实施例针对用于利用特定数检测进行计算的计算设备。所述计算设备包括存储器以及第一流水线和第二流水线。所述第一流水线被配置为从所述存储器接收第一操作数,所述第二流水线被配置为从所述存储器接收第二操作数。所述第一流水线比所述第二流水线提前至少一个周期操作。所述设备还包括处理单元,用于针对所述第一操作数在所述存储器中生成存储器地址。

所述第一流水线从生成的存储器地址读取所述第一操作数。此后,检测器检测所述第一操作数是否为特定数。特定数是产生预定或可预测运算结果的数值。

如果所述第一操作数是特定数,则所述处理单元检索与检测到的特定数相关联的预定或可预测操作结果,并将检索到的结果存储在针对所述第一流水线和所述第二流水线的所述存储器中。

如果所述第一操作数不是特定数,则所述处理单元针对所述第二操作数在所述存储器中生成存储器地址。此后,所述第二流水线从生成的存储器地址读取所述第二操作数。然后,所述处理单元对所述第一操作数和所述第二操作数执行操作,并将执行的操作的结果存储在针对所述第一流水线和所述第二流水线的所述存储器中。

与公开的一些实施例一致,公开了一种用于计算设备中具有特定数检测能力的多管道流水线的方法,每个计算设备包括存储指令的一个或多个存储器和执行所述指令以执行所述方法的一个或多个处理器。所述方法包括:针对来自所述一个或多个存储器的数据并发地运行一对流水线,其中,所述对中的一个流水线接受广播操作数,所述对中的另一个流水线接受私有操作数;针对所述广播操作数在所述一个或多个存储器中生成存储器地址;从生成的存储器地址读取所述广播操作数;通过检测器检测所述广播操作数是否为0;如果所述广播操作数为0,则停止针对所述私有操作数在所述一个或多个存储器中生成存储器地址,如果所述广播操作数为1,则针对所述私有操作数更新所述一个或多个存储器中的存储器地址;通过另一检测器检测所述广播操作数是否为1;计算所述广播操作数和所述私有操作数的结果;以及将所述结果存储到针对数据的该对流水线的所述一个或多个存储器中的存储器地址。

与公开的一些实施例一致,提供了一种用于多管道流水线的系统,其具有特定数检测能力,以简化操作并提高计算强度。

与公开的一些实施例一致,提供了一种计算机可读存储介质,其包括可由至少一个处理器执行以执行上述方法的指令集。

与公开的其他实施例一致,一种非暂时性计算机可读存储介质可以存储由至少一个处理设备执行并执行本文描述的前述方法的程序指令。

附图说明

图1示出了与本公开的实施例一致的示例性神经网络处理单元(NPU)架构。

图2A示出了与本公开的实施例一致的神经网络处理器的层的示例性功能。

图2B示出了与本公开的实施例一致的示例性硬件神经网络处理器。

图3示出了与本公开的实施例一致的多层网络中的数据共享。

图4A示出了与本公开的实施例一致的包括存储器模块的统一组织的示例性硬件的示意图。

图4B示出了与本公开的实施例一致的统一存储介质的示例性存储单元。

图5示出了与本公开的实施例一致的在计算设备中实现的多流水线配置。

图6是与本公开的实施例一致的图5的多流水线配置的操作周期图。

图7是与本公开的实施例一致的以图5的多流水线配置为特征的计算设备采取的示例操作的处理流程图。

具体实施方式

现在将详细参考示例性实施例,其示例在附图中示出。以下描述参考附图,其中除非另外表示,否则不同附图中的相同数字表示相同或相似的元素。在示例性实施例的以下描述中阐述的实现并不代表与本发明一致的所有实现。相反,它们仅是与如所附权利要求中所述的本发明的相关方面一致的装置和方法的示例。

在包括中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理单元(DSP)、神经网络处理器等的计算设备(例如台式机、笔记本电脑、服务器、诸如蜂窝电话的蜂窝设备、PDA、平板电脑等)中,计算强度通常定义为设备快速执行操作的能力。设备检测特定数(例如0、1等)的能力可提高计算强度。对于具有矢量、SIMD或阵列计算的计算机架构,这种检测以及基于检测执行操作的能力可能甚至进一步提高计算强度。

所公开的实施例涉及用于具有特定数检测能力以简化操作并提高计算强度的多管道流水线的方法和系统。应当理解,术语“多个”在本文中应解释为表示两个或更多个。特定数是在操作中使用时产生预定或可预测结果的数字。预定或可预测的结果是无需执行操作即可获得的操作结果。这样的数字的示例可以是乘法运算中的数字1或0。具体地,将第一数字乘以数字1将总是产生等于第一数字的结果,而将任何数字乘以数字0将总是产生0的结果。因此,由于如本文描述的检测这种数字的能力,可以优化此类操作的性能,因为可基于特定数的检测确定结果。因此,能够识别这样的数字可由于计算时间将减少而提高计算强度,因为如果检测到特定数,则无需执行完整操作即可确定结果。

将使用神经网络来说明本文公开的示例实施例。然而,应当理解,示例实施例可以应用于可以优化计算的任何其他系统。图1示出了示例性神经网络处理单元(NPU)架构100。NPU架构100可以包括片上通信系统110、主机存储器120、存储器控制器130、直接存储器访问(DMA)单元140、联合测试动作组(JTAG)/测试访问端(TAP)控制器150、***组件快速互连(PCIe)接口160、总线170、全局存储器126等。应当理解,片上通信系统110可以基于所传送的数据来执行算术操作。此外,NPU架构500可以包括具有片上存储器块(例如,8GB第二代高带宽存储器(HBM2)的4个块)用作主存储器的全局存储器126。

片上通信系统110可包括全局管理器112和多个核116。全局管理器112可包括被配置为与一个或多个核116协调的一个或多个任务管理器114。每个任务管理器114可以与核116的阵列相关联,核116提供神经网络的突触/神经元电路。例如,图1的核的顶层可以提供表示神经网络的输入层的电路,而核的第二层可以提供表示神经网络的一个或多个隐藏层的电路。如图1所示,全局管理器112可以包括被配置为与核116的两个阵列进行协调的两个任务管理器114。

核116可以包括一个或多个处理元件,每个处理元件包括单指令多数据(SIMD)架构,SIMD架构包括被配置为在全局管理器112的控制下对所传送的数据执行一个或多个操作(例如,乘法、加法、乘法累加等)的一个或多个处理单元。为了对所传送的数据分组执行操作,核116可以包括用于存储数据分组的至少一个缓冲器、用于存储指令的一个或多个缓冲器、用于存储数据分组中的信息的一个或多个存储器、以及用于处理数据分组中的信息的一个或多个处理元件。每个处理元件可以包括任何数量的处理单元。在一些实施例中,核116可以被认为是瓦片(tile)等。

主机存储器120可以是片外存储器,诸如主机CPU的存储器。例如,主机存储器120可以是DDR存储器(例如DDR SDRAM)等。与集成在一个或多个处理器内充当高级高速缓存的片上存储器相比,主机存储器120可以被配置为以较慢的访问速度存储大量数据。

存储器控制器130可以管理从全局存储器126内的存储器块(例如,HBM2)读数据以及向其写数据。例如,存储器控制器130可以管理来自芯片通信系统110外部(例如,来自DMA单元140或与另一个NPU相对应的DMA单元)或来自芯片通信系统110内部(例如,通过由全局管理器112的任务管理器控制的2D网格来自核116中的本地存储器)的读/写数据。此外,尽管在图1中示出了一个存储器控制器,但应当理解,在NPU架构100中可以提供一个以上的存储器控制器。例如,对于全局存储器126内的每个存储器块(例如,HBM2)可以存在一个存储器控制器。

存储器控制器130可以生成存储器地址并启动存储器读或写周期。存储器控制器130可包含能被一个或多个处理器写和读的若干硬件寄存器。寄存器可以包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、以及其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(I/O)设备读或向I/O设备写)、传输单元的大小、一个突发中传输的字节数、和/或存储器控制器的其他典型特征的某种组合。

DMA单元140可以辅助在主机存储器120与全局存储器126之间传输数据。另外,DMA单元140可以辅助在多个NPU之间传输数据。DMA单元140可以允许片外设备访问片上存储器和片外存储器两者而不会引起CPU中断。因此,DMA单元140还可生成存储器地址并启动存储器读或写周期。DMA单元140还可包含能被一个或多个处理器写和读的若干硬件寄存器,包括存储器地址寄存器、字节计数寄存器、一个或多个控制寄存器、以及其他类型的寄存器。这些寄存器可以指定源、目的地、传输方向(从输入/输出(I/O)设备读或向I/O设备写)、传输单元的大小、和/或一个突发中传输的字节数的某种组合。应当理解,NPU架构100可以包括第二DMA单元,该第二DMA单元可以用于在其他NPU架构之间传输数据,以允许多个NPU架构直接通信而不涉及主机CPU。

JTAG/TAP控制器150可以指定专用调试端口,该专用调试端口实现用于低开销访问NPU的串行通信接口(例如,JTAG接口),而无需直接外部访问系统地址和数据总线。JTAG/TAP控制器150还可以具有片上测试访问接口(例如,TAP接口),该片上测试访问接口实现协议以访问一组测试寄存器,该测试寄存器提供了各个部分的芯片逻辑级别和设备能力。

外设接口160(例如PCIe接口)(如果存在)充当(并且通常是)芯片间总线,提供NPU与其他设备之间的通信。

总线170包括芯片内总线和芯片间总线。芯片内总线将所有内部组件相互连接,这是系统架构所要求的。尽管并非所有组件都与每个其他组件连接,但所有组件确实与它们需要与之通信的其他组件具有某种连接。芯片间总线将NPU与其他设备(例如片外存储器或外设)相连。通常,如果存在PCIe接口,则它是芯片间总线并且总线170仅与芯片内总线有关,尽管在某些实现中,总线170仍可以与专用总线间通信有关。

虽然NPU架构100结合了本公开的实施例,但是应当理解,所公开的实施例可以应用于具有SIMD架构用于加速诸如深度学习的一些应用的芯片。这样的芯片可以是例如GPU、具有矢量处理能力的CPU、或用于深度学习的神经网络加速器。SIMD或矢量架构通常用于支持具有数据并行性的计算设备,例如图形处理和深度学习。SIMD架构可以包括多个处理元件,其中每个处理元件可以同时对多个数据点执行相同的操作。

在一些实施例中,神经网络处理器包括编译器(未示出)。编译器是将以一种编程语言编写的计算机代码转换为NPU指令以创建可执行程序的程序或计算机软件。在加工应用中,编译器可执行各种操作,例如,预处理、词法分析、解析、语义分析、输入程序到中间表示的转换、代码优化和代码生成、或其组合。

在一些实施例中,编译器可以在主机单元(例如,具有主机存储器104的CPU)上,该主机单元将命令推入NPU 100。基于这些命令,任务管理器1022可以将任意数量的任务分配给一个或多个核(例如,核1024)。命令中的一些可以指示DMA单元108将指令和数据从主机存储器104加载到全局存储器116中。然后可以将加载的指令分发到分配有相应任务的每个核,并且一个或多个核可以处理这些指令。

应当理解,核接收的前几条指令可以指示核将来自全局存储器116的数据加载/存储到核的一个或多个本地存储器(例如,核的存储器或核的每个活动处理元件的本地存储器)。然后,每个核可以启动指令流水线,这涉及从本地存储器中获取指令(例如,通过获取单元)、解码指令(例如,通过指令解码器)以及生成本地存储器地址(例如,对应于操作数)、读取源数据、执行或加载/存储操作、然后写回结果。

图2A示出了包括软件算法210和硬件220的神经网络的层200的示例性功能。硬件220可以包括私有存储器模块230、处理单元阵列240的一个或多个处理单元、共享(例如广播)存储器模块250、写缓冲器260、输入操作数270、输出操作数280等。在一些实施例中,硬件220可以位于核(例如,图1的核116)中。应当理解,也可以采用单个同质的(homogenous)存储器模块。

在一些实施例中,处理单元阵列240的处理单元可以提供诸如乘法、加法、乘法累加等的一个或多个操作。处理单元阵列240可以包括多个处理单元242、244、246和248,例如,如图2B所示的处理单元阵列。

私有存储器模块230可以被划分成单独的私有存储器块,使得多个处理单元242、244、246和248中的每个具有对应的私有存储器块232、234、236和238,如图2B所示。

输入操作数270可以是由处理单元阵列240操作的输入数据。在一些实施例中,图2A的输入操作数270可以包括一个或多个私有输入操作数272和一个或多个共享输入操作数274,如图2B所示。私有输入操作数272可以存储在私有存储器模块230中,共享输入操作数274可以存储在共享存储器模块250中。

在神经网络的应用中,软件算法210具有共享数据,该共享数据可以存储在共享存储器模块250中,并可以广播到处理单元阵列240的多个处理单元242、244、246和248中的每个,作为共享操作数274。例如,图2A所示的算法计算以下矢量运算:

A=sigmoid(b+X*W1)(等式1)

这是深度学习算法中经常调出的神经网络的层200中的代表运算。参考等式1,“b”可以包括常数值,“X”可以包括共享输入操作数274,“W1”可以包括私有输入操作数272。

参考图2A,矢量大小可以设置为任何自然数。这里,以4的矢量大小为例,并且使用4路SIMD硬件来计算矢量。处理单元242、244、246和248可以并行计算以下运算:

a1=sigmoid(b+x1*W111+x2*W121+x3*W131+x4*W141)(等式2)

a2=sigmoid(b+x1*W112+x2*W122+x3*W132+x4*W142)(等式3)

a3=sigmoid(b+x1*W113+x2*W123+x3*W133+x4*W143)(等式4)

a4=sigmoid(b+x1*W114+x2*W124+x3*W134+x4*W144)(等式5)

图2A中的阴影框和虚线表示如何计算“a1”。根据该操作,可以理解,“W1”阵列的每一列中的数据对于处理单元阵列240的相应处理单元而言是本地的,并且该数据可以相应地作为私有输入操作数272存储在私有存储器模块230的相应存储器块中。例如,W1阵列的第一、第二、第三和第四列中的每一列中的数据都可以作为私有输入操作数存储在私有存储器模块230的相应存储器块232、234、236和238中。

参考图2A,W1阵列可以包括存储的数据的矩阵,其中矩阵的每个元素表示为Wlij或Wl_ij(如后所示),其中“i”表示矩阵中的行号,“j”表示列号。例如,在等式2中,W141表示存储在位于W1阵列的第4行和第1列的元素中的数据。也可以使用其他公知的符号来对矩阵中的元素寻址。

同时,X阵列中的数据被所有处理单元242、244、246和248使用,并且相应地作为共享输入操作数274存储在共享存储器模块250中,并广播到从共享存储器模块250进行读取的所有组件。等式2-5表示在神经网络处理器的层200中执行的示例性操作,被设计为计算a1、a2、a3和a4。

在一些实施例中,机器学习或深度学习包括训练神经网络处理器以基于输入数据来生成最终结果,这是通过实现用于一层或多层神经处理的算法来实现的。例如,图2A的层200表示包括配置为使用偏置b、存储在X阵列中的数据和存储在W1阵列中的数据来执行运算的算法的第一层。第二层和第三层(未示出)可以包括使用偏差b、存储在X阵列中的数据以及存储在W2和W3阵列中的数据的算法。每层可以包括偏差b的不同值和存储在“W”阵列中的不同参数。

参考图2A,例如,阵列X可以包括不同类别的个人分数。阵列X的x1值可以是学生A的数学分数,x2可以是英语分数,x3可以是历史分数,x4可以是科学分数。最终结果可以是基于分数(输入数据)将准许还是拒绝个人入学。如图2A所示,并在等式2-5中描述,数据x1-x4是“共享的”并且在计算a1-a4时是共同的。

图3示出了多层网络中的数据共享。如本文所描述的,数据共享是指先前的私有数据如何能在程序的后续阶段中成为共享数据。在一些实施例中,神经网络架构300包括多层,例如,层310和320。在一些实施例中,层310的输出操作数280可以用作层320的输入操作数270。在一些实施例中,一层的输出操作数280可以被一层或多层用作输入操作数270。

例如,在层310中,a1由私有存储器模块230的处理单元242计算。a1中的数据成为层320的广播输入。通常,神经网络可以按层组织。每一层都可以对其输入执行一个或多个操作并生成输出。一层的输出可以传递到下一层用于进一步处理。例如,前一层的输出可以是下一层的输入。因此,必须将本地生成的“a”存储回共享存储器250,或存储到私有存储器230,之后再复制到共享存储器250。

作为存储在私有存储器230中并且之后复制到共享存储器250的替代解决方案,来自a1的输出操作数280可以直接存储回共享存储器250而不是存储器复制。但是,此替代解决方案仍可能会使程序变慢。由于单个处理单元(例如处理单元242)每个周期只能完成一个乘加运算,例如Xi*Wl_ij,因此“a”的每个运算会在多个周期内执行。为此,在每个周期中仅从私有存储器230读出W1_ij的一个操作数,因此从共享存储器250只需要一个“X”。因此,每个存储器模块的通用设计是每周期单读/单写。当在最后周期中多个处理单元同时生成所有“a”时,共享存储器250可能无法将它们全部写回。

在一些实施例中,引入写缓冲器260以允许共享存储器250有更多的时间来分别消耗这些输出操作数280。然而,当处理单元240的输出速度快于写缓冲器260的宽度、例如A的大小大于X时,写缓冲器260可能传播背压,迫使处理单元阵列240变慢,导致整体程序执行变慢。

图4A示出了包括存储器模块的统一组织的示例性硬件系统400的示意图。硬件系统400包括统一存储介质405以及处理单元242、244、246和248。统一存储介质405包括一个或多个存储模块410,每个存储模块包括配置为存储输入操作数270、输出数据280的存储单元430。多个存储模块410可以合并到单个介质中以形成统一存储介质405。每个存储模块410可以包括私有存储模块412和共享存储模块414。应当理解,在一些示例实施例中,存储器模块可以是单个同质介质。

硬件系统400可以包括多个处理单元242、244、246和248。处理单元阵列240的多个处理单元中的每一个被配置为与一个或多个存储模块通信。例如,处理单元242可以从私有存储模块412接收私有输入操作数272。处理单元242也可以从一个或多个共享存储模块414接收共享输入操作数274。在一些实施例中,处理单元阵列240被配置为从私有存储模块412接收私有输入操作数272,从共享存储模块414接收共享输入操作数274,并基于私有输入操作数272和共享输入操作数274生成输出操作数280。

如图4B所示,每个存储单元430可以由唯一标识符440唯一地标识。唯一标识符440可以是包括高阶位442和低阶位444的位地址,或者是包括高阶字节和低阶字节的字节地址,或其组合。在计算中,高阶位442可以是最高有效位(MSB)。由于将更高有效数字更向左写入的位置计数法约定,MSB也可称为最左位。另一方面,低阶位444被称为最右位置中的位。例如,在具有位地址“2_E5”的唯一标识符440中,高阶位442是指最左边的位,即“2”,低阶位444是指右边的位,即“E5”。

根据一些示例实施例,片上或片外存储器可以被表征为私有或共享(例如,广播)存储器。例如,私有存储器可以是专用于为多个并行处理元件中的每个单个处理元件提供数据的存储器,而共享存储器可以指专用于为所有并行处理元件(例如,核的所有处理元件)提供数据的存储器。根据一些示例实施例,存储器可以是单个存储器单元。

在一些实施例中,存储单元430是私有存储单元432或共享存储单元434。私有存储单元432可以位于私有存储模块412内。共享存储单元434可以位于共享存储模块414内。唯一标识符440的高阶位442被配置为指示针对操作数(270、280)的目标存储模块,并且唯一标识符440的低阶位444被配置为指示针对操作数(270、280)的目标存储模块内的目标存储单元。例如,具有位地址“2_E5”的唯一标识符440是指存储模块“2”,以及存储模块“2”内的存储单元“E5”。换句话说,高阶位442还可以指示存储模块“私用”于的处理单元,而低阶位444指示存储模块内的位置。

应当理解,私有存储单元432和共享存储单元434是物理上无法区分的存储单元,并且没有这样被预先标记。存储单元的“私有”和“共享”属性是基于编译器生成的为寻址数据而编程的指令确定的。例如,数据可以存储在任何单元中。在读步骤中,如果编译器生成的指令将数据称为“私有”,则可以并行读出数据作为私有输入操作数272。另选地,如果编译器生成的指令将数据称为“共享”,则数据可以作为共享输入操作数274读出。

在一些实施例中,唯一标识符440包括其他字符,例如,可由软件寻址模式寻址的数字字符、字母数字字符、十六进制数字(例如,图4A所示)、八进制数字等。

返回参考图4A,处理单元阵列240或多个处理单元中的每一个可以生成输出数据280。输出数据280可以是私有输出数据282或共享输出数据284,由神经网络处理器的多层算法的下一层中的操作确定。如图4A所示,由于输出数据280在每个存储模块410中被并行写回统一存储介质,因此可以将其视为私有输出数据282。

在图4A的示例性实现中,处理单元阵列的一个操作数来自私有数据,而另一个来自广播到所有处理单元的数字(例如,来自共享存储器)。应当理解,如果单个op2或共享操作数274被检测为特定数,则可以简化整个阵列的操作。

根据一些示例实施例,处理单元单元240包括至少一个用于检测特定数的存在的检测器。计算强度可以由设备快速执行操作的能力来定义。

在数学中,可以将特定数定义为在操作中产生预期结果的数值。通过利用诸如0、1等的特定数,可以简化基于这些特定数的操作。例如:Any_Number*0=0;The_Number*1=The_Number;The_Number+0=The_Number;min(Range_Min,Any_Number)=Range_Min;max(Range_Max,Any_Number)=Range_Max;等等。当面对特定数时,计算设备中的硬件可以执行一些简化操作,而不是常规操作。例如,结果=0;什么都不做;结果=另一个操作数;等等。因此,能够识别特定数可以有助于简化操作,导致提高操作速度,因此提高计算强度。

图5示出了与本公开的实施例一致的示例性多管道流水线架构的框图。图5的架构示出了多流水线的作为Pipeline_A 501的一部分和作为Pipeline_B 503的半部分,这两者都是核的一部分。为了简单起见,根据乘法运算来说明该架构,其中:结果=opA*opB。应该注意,图5中所示的操作不限于具有2个操作数的乘法,而是可以扩展为可以针对特定数简化的具有任何数量的操作数的任何操作。例如,可以在基于加、减、乘和除的操作(除此之外,可以包括乘法累加操作)中使用多流水线配置。在这样的操作中,数字0可以被识别为特定数。

存储器单元505可以包括如关于图2A所讨论的共享存储器250和私有存储器230。一个操作数被广播或从共享存储器中读取,而另一个操作数可能是私有的并从私有存储器中读取。应当理解,本文提出的示例实施例也可以应用于以同质存储单元为特征的存储器单元。

每个操作数具有不同的流水线阶段,并且由于存在并发运行的2个流水线,即Pipeline_A和Pipeline_B,因此该架构被称为多管道流水线。此外,虽然可以理解,流水线可以接收两个以上的操作数,但是为了简化起见,本申请的其余部分更多集中在接收两个操作数的多管道流水线上。

由于单个操作在同一时刻需要至少两个操作数,因此在操作开始之前通过检测器507执行特定数的检测。应当理解,检测器507可以位于核(例如,图1的核116)内,并且可以位于系统内的任何其他处理单元或处理器内。

根据一些实施例,甚至在从存储器中读出另一个操作数(或任何其他操作数)之前,经由检测器507检测特定数。为了实现这一点,实现多管道流水线,其中一个管道用于操作数1,另一管道用于操作数2。在图5提供的示例中,使用流水线508从存储器505中读出第一操作数opB。流水线509_1-509_n用于从存储器505中读出第二操作数opA。用于操作数1的流水线比用于操作数2的流水线提前至少一个周期操作,以允许在从存储器中读出操作数2之前检测到特定数。

在操作中,根据本示例,流水线503的第一部分具有4个用于执行的阶段。这些阶段从阶段1到阶段4。

在阶段1中,首先,经由例如指令获取单元(图5中未示出)来获取指令。根据一些示例实施例,指令与要执行的计算有关。此后,可以经由例如指令解码器(图5中未示出)对接收到的指令进行解码。根据一些示例实施例,指令解码器可以包括地址生成器,用于针对第一操作数opB基于从核获取和解码的指令来生成存储器地址。

在阶段2中,从存储器505中读出数据。根据一些示例实施例,使用用于从存储器505中读出第一操作数opB的流水线508从存储器中读出数据。根据一些示例实施例,可以从共享或广播存储器中读出第一操作数opB。根据一些示例实施例,可以从单个同质的存储器单元中读出第一操作数。

可以包括在核或处理单元阵列中的检测器507确定在第一操作数opB中特定数的存在。在本乘法示例中,可以针对数字0进行第一检测。如果检测器在数据中发现形式为0的特定数;则核将停止针对第二操作数opA的地址的生成(例如,该操作步骤被阻止或跳过)被更新到阶段之间的触发器510_1-510_n中,从而不读取opA。

在阶段3中,根据处理单元操作为乘法器的当前乘法示例,可以进行检测以确定数据中是否包含另一个特定数,例如以1的形式。第二检测可以由位于核或处理单元阵列中的相同或不同的检测器进行。在图5所示的示例中,利用第二检测器511。

第一检测和第二检测的结果通过触发器512_1和512_2推入下一阶段。基于检测到的相关特定数,结果是预定或可预测的。如果没有检测到特定数(即在本示例中为0或1),则数据本身(opB)将被更新到触发器512_3中。

在阶段4中,根据当前乘法器(MUL),示例有条件地如下工作:

结果=0,如果opB为0;或者

结果=opA,如果opB为1;或者

结果=结果,即opA*opB。

在操作中,并且根据本乘法示例,与第二操作数opA相关联的操作(由多流水线501的第二部分执行)具有4个执行阶段。

这些阶段中的某些阶段可能类似于与第一操作数opB相关联的阶段,而某些阶段可能不同。例如,在阶段1中,基于从核获取和解码的指令来生成用于读取第二操作数opA的存储器地址。在本示例中,如果第一操作数opB未被检测为特定数0,则数据将被更新到触发器512-1或512-3中用于下一阶段。

在阶段2中,经由第二流水线509_1-509_n从存储器505中读出与第二操作数opA相关联的数据。

在阶段3中,如以上关于第一操作数opB的阶段4所说明的,经由处理单元执行条件运算。

而在阶段4中,针对每个数据通道509_1-509_n,核将结果存储回存储器。

图6示出了与本公开的实施例一致的图5中描述的操作。在图6中,垂直虚线表示图5的多管线配置的不同操作周期C,其中图6的周期编号对应于关于图5描述的阶段编号。图6的上部分B表示被配置为对第一操作数opB操作的流水线架构的部分503所采取的操作。图6的下部分A表示被配置为对第二操作数opA操作的流水线架构的部分501所采取的操作。散列部分和点部分一个接一个显示两个不同的乘法。每个操作依次经过4阶段多管道流水线,如关于图5描述的。

如图6所示,被配置为对操作数opB进行操作的流水线架构的部分503在被配置为对第二操作数opA进行操作的部分502之前一个周期开始。因为部分503在部分502之前一个周期开始,所以可以防止多流水线配置的部分501内的不必要操作。例如,在阶段2/周期2中,从存储器读取第一操作数opB,并执行特定数检测。在本乘法示例中,针对数字0执行第一检测。在检测到第一操作数opB包括数字0时,停止为获得第一操作数opA的存储器中地址的生成。因此,也可以停止将发生的任何后续操作(例如,阶段和周期3和4),并且可以存储与识别的特定数(0)关联的预定或可预测结果,并且可以开始新的操作(周期la-4a)。

图7是描绘图5的多流水线配置在具有多流水线架构的计算设备中利用特定数检测提供计算时可采取的示例操作的流程图。计算设备包括存储指令的存储器和执行指令的一个或多个核。

应当理解,图7包括以实线边框示出的一些操作和以虚线边框示出的一些操作。实线边框中包括的操作是最广泛的示例实施例中包括的操作。虚线边框中包括的操作是边框示例实施例中可以包括的示例实施例,或是其一部分,或是其操作之外可以采取的进一步操作。应当理解,这些操作不需要按顺序执行。此外,应当理解,并非所有操作都需要执行。示例操作可以以任何顺序和任何组合来执行。

操作包括针对来自存储器的数据并发地运行710第一流水线和第二流水线。第一流水线被配置同时为从存储器接收第一操作数,第二流水线被配置为从存储器接收第二操作数,其中第一操作数比第二流水线提前至少一个周期操作。核可以被配置为提供第一流水线和第二流水线的并发运行。

如图5和图6所示,对至少一个操作数执行特定数检测。对于执行这种检测的操作数,使用单独的流水线从存储器中读取操作数。该单独的流水线比系统中的任何其他流水线提前至少一个周期操作。这种布置的示例优点是能够在系统中发生任何其他操作之前检测到特定数的存在。特定数在操作中产生预定或可预测结果。因此,在检测到特定数的存在时,无需执行完整操作就可以获得操作结果。这种操作优化的示例在图6中示出,其中特定数(0)的检测无需执行其余周期3和4的操作就提供结果。

此后,操作包括经由获取单元从指令缓冲器获取指令。指令可以与要执行的计算有关。

操作还包括解码所获取的指令。解码可以由解码器或核执行。此后,操作可以进一步包括针对第一操作数在存储器中生成712存储器地址。核或地址生成器可针对第一操作数在存储器中生成存储器地址。根据一些示例实施例,可以基于所获取和解码的指令来生成地址。

在图6中,在周期1中示出了该操作。在图5中,关于阶段1相对于第一流水线503描述该操作。应当理解,在一些实施例中,存储器可以是公共存储器存储。

在一些实施例中,存储器可以包括多个存储单元,该多个存储单元进一步包括至少一个共享存储器存储单元和至少一个私有存储器单元。根据一些示例实施例,第一操作数可以是存储在共享存储器存储单元中并且被配置为广播到第一流水线的广播操作数。根据这样的示例实施例,第二操作数可以是存储在私有存储器存储单元中并被读取到第二流水线的私有操作数。

操作还可以包括在第一流水线上从生成的存储器地址读取714第一操作数。处理单元可以被配置为从生成的存储器地址向第一流水线读取第一操作数。

在图6中,该操作在周期2中示出,如第一流水线B所执行的。在图5中,关于阶段2相对于第一流水线503描述该操作。

操作还包括经由检测器检测716第一操作数是否是特定数,其中特定数是产生预定或可预测操作结果的数值。检测器可以被包括在核中。

在图6中,该操作在周期2中示出,如第一流水线B所执行的。在图5中,关于阶段2相对于第一流水线503描述该操作。

如果第一操作数被检测为特定数,则操作还包括检索718与检测到的特定数相关联的结果。处理单元可以被配置为检索与检测到的特定数相关联的结果。

由于特定数在操作中产生预定或可预测结果,因此可以在不执行操作的情况下获得该结果。因此,这些预定或可预测结果可以存储在存储器中,并在检测到特定数时被检索。这样的特定数和相应的预定或可预测结果的示例是:(1)任何数字乘以数字0将产生预定或可预测结果0;以及(2)任何数字乘以数字1将产生该数字乘以1的可预测结果。

根据一些示例实施例,要由多流水线配置执行的操作是乘法。根据这样的实施例,检测操作716可以被配置为检测0形式的特定数。根据这样的示例实施例,操作可以进一步包括防止719针对第二操作数生成存储器地址。核可以被配置为停止生成第二操作数。

根据这样的示例实施例,由于与数字0的乘法将产生结果0,所以不需要执行进一步的操作。因此,在检测到时,可以停止周期2-4的操作,并且可以存储预定或可预测结果0。

根据一些示例实施例,要由多流水线配置执行的操作是乘法。根据这样的实施例,检测操作716可以被配置为检测1形式的特定数。根据这样的示例实施例,操作可以进一步包括针对第二操作数生成720存储器地址。核可以被配置为针对第二操作数生成存储器地址。针对第二操作数生成存储器地址可以基于所获取和解码的指令。

根据这样的示例实施例,由于与数字1的乘法将产生数字乘以1的结果,所以可以优化其操作。因此,在检测到时,可以停止周期4的操作,并且可以存储第二操作数的值的预定或可预测结果。

在生成720存储器地址之后,操作可以进一步包括在第二流水线上从生成的存储器地址读取721第二操作数。处理单元可以被配置为在第二流水线上从生成的存储器地址读取第二操作数。

如关于示例操作720所讨论的,在乘法运算中针对检测到的特定数1的预定或可预测结果是数字乘以1。因此,在确定结果时,从存储器读取第二操作数。

生成720和读取721还包括将结果的值分配722为等于第二操作数的值。处理单元可以被配置为将结果的值分配为等于第二操作数的值。

检索718的操作还包括将检索到的结果存储723在针对第一流水线和第二流水线的存储器中。核被配置为将检索到的结果存储在针对第一流水线和第二流水线的存储器中。

如果确定第二操作不是特定数,则操作进一步包括针对第二操作数生成724存储器中的存储器地址。核可以被配置为针对第二操作数生成存储器中的存储器地址。

一旦检测到不存在特定数,将执行关于图5描述的所有阶段和关于图6描述的所有周期。

在生成724地址之后,操作还包括在第二流水线上从生成的存储器地址读取726第二操作数。处理单元可以被配置为在第二流水线上从生成的存储器地址读取第二操作数。

在图6中,该操作在周期3中示出,如第二流水线A所执行的。在图5中,关于阶段2相对于第二流水线501描述该操作。

在读取724第二操作数之后,操作还包括对第一操作数和第二操作数执行728操作。处理单元可以被配置为对第一操作数和第二操作数执行操作。

在图6中,该操作在周期4中示出。在图5中,关于阶段3相对于第一流水线503描述该操作。应当理解,在周期1-3期间,获取被停滞。在周期4中,操作可以进一步包括在计算第一指令的同时获取单元检索第二指令。可以使用第二指令来重复周期1a-4a。

在执行728操作之后,操作进一步包括将执行的操作的结果存储730在针对第一流水线和第二流水线的存储器中。核可以被配置为将执行的操作的结果存储在针对第一操作数和第二操作数的存储器中。

在图6中,该操作在周期1a中示出,如第一流水线B所执行的。在图5中,关于阶段4相对于第一流水线503来描述该操作。

在方法步骤或过程的一般上下文中描述了本文描述的各种示例实施例,该方法步骤或过程可以在一个方面中由体现在计算机可读介质中的计算机程序产品来实现,该计算机程序产品包括计算机可执行指令,例如程序代码,由网络环境中的计算机执行。计算机可读介质可以包括可移除和不可移除存储设备,包括但不限于只读存储器(ROM)、随机存取存储器(RAM)、光盘(CD)、数字通用光盘(DVD)等。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、关联的数据结构和程序模块代表用于执行本文公开的方法的步骤的程序代码的示例。这样的可执行指令或关联的数据结构的特定序列表示用于实现在这样的步骤或过程中描述的功能的相应动作的示例。

在前述说明书中,已经参考了可以随实现而变化的许多具体细节描述了实施例。可以对所描述的实施例进行某些调整和修改。通过考虑本文公开的发明的说明书和实践,其他实施例对于本领域技术人员而言可以是显而易见的。说明书和示例旨在仅被认为是示例性的,本发明的真实范围和精神由所附权利要求指示。图中所示的步骤顺序也旨在仅用于说明目的,并且不旨在限于任何特定的步骤顺序。这样,本领域技术人员可以理解,在实现相同方法时,可以以不同次序执行这些步骤。

在附图和说明书中,已经公开了示例性实施例。然而,可以对这些实施例进行许多变化和修改。因此,尽管采用了特定的术语,但是它们仅在一般性和描述性意义上使用,而不是出于限制的目的,实施例的范围由所附权利要求限定。

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:机器人应用管理装置、系统、方法及程序

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!