矩阵数据广播架构的制作方法

文档序号:25780612发布日期:2021-07-09 09:22阅读:113来源:国知局
矩阵数据广播架构的制作方法

1.本发明涉及计算机领域,具体地,涉及矩阵数据广播架构。


背景技术:

2.任务的并行化用于增加计算系统的吞吐量。为此,编译器从程序代码中提取并行化的任务,以在系统硬件上并行执行。处理器核(core)包括配置为执行多线程的深管线。为了进一步增加硬件上的并行执行,多核架构包括多个处理器核。计算系统将特定任务转移到专用硬件上,从而克服了常规通用核的性能限制。一些类型的专用硬件包括单指令多数据(simd)并行架构,其他类型包括现场可编程门阵列(fpga),而另外的其他类型则包括其他专用类型的处理核。当架构包含不同类型的多个核时,其被称为异构多核架构。对于诸如图形渲染、神经网络训练、密码学等特定任务,异构多核架构提供的指令吞吐量比同构多核架构更高。
3.设计人员使用多种类型的并行计算平台和应用程序编程接口(api)模型之一来开发用于异构计算的软件应用程序。这些平台中的函数调用称为“计算内核(kernel)”,或简称为“内核”。诸如操作系统调度程序之类的软件将这些软件内核与一个或多个数据记录(例如数据项)进行匹配,以产生一个或多个计算工作单元。一般而言,执行此类数据并行工作负载时,simd架构可提供良好的计算性能和成本效率。但是,当存储带宽受到限制并且应用程序具有很高的数据重用性时,性能会降低,从而导致对同一数据的多次存储器访问。
4.鉴于上述情况,期望有通过减少存储器访问的数量来并行执行处理器中的多个工作单元的有效系统和装置。


技术实现要素:

5.在一个方面,一种计算系统可以包括:处理器,其包括多个计算单元,每个计算单元被配置为处理指令;控制块;并且,其中所述控制块被配置为响应于检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,传送针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求,以及响应于接收到所述共享数据,将所述共享数据广播到所述多个计算单元。
6.在一实施方案中,所述单个访问请求可以被传送到第一高速缓存控制器,并且从第二高速缓存控制器接收所述共享数据。
7.在一实施方案中,所述合格条件可以是针对所述共享数据的访问请求的计数等于需要所述共享数据的计算单元的数量。
8.在一实施方案中,所述控制块可以被配置为响应于检测到针对所述共享数据的访问请求而增加访问请求的计数。
9.在一实施方案中,所述控制块可以被配置为存储包括以下项中的一项或多项的用于所述共享数据的广播特性:广播标识符,其标识所述共享数据;和基地址,所述基地址指定存储所述共享数据的开头的存储位置。
10.在一实施方案中,所述控制块可以被配置为在所述广播特性中存储等于所述给定计算单元和所述一个或多个其他计算单元之和的数量。
11.在一实施方案中,所述控制块可以被配置为在所述单个访问请求中插入以下一项或多项:广播标识符;和标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
12.在一实施方案中,所述第一高速缓存控制器可以被配置为:通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及通过转换所述单个访问请求中的所述广播标识符来确定所述掩码。
13.在一实施方案中,所述第一高速缓存控制器可以被配置为:存储所述掩码;以及在将所述共享数据广播到所述多个计算单元的过程中,将所述掩码传送到所述第二处理器。
14.在一实施方案中,所述第二处理器利用所述掩码来选择用于接收所述共享数据的所述多个计算单元。
15.在另一方面,一种方法可以包括:响应于检测来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,由处理器的控制块向第一高速缓存控制器传送针对共享数据的单个访问请求,该共享数据由所述处理器的多数个计算单元中的多个计算单元共享;以及通过所述第一高速缓存控制器从所述第二高速缓存控制器将所述共享数据广播到所述多个计算单元。
16.在一实施方案中,所述多个计算单元中没有计算单元接收来自所述多个计算单元中的任何一个的共享所述共享数据的指示。
17.在一实施方案中,所述方法还可以包括:通过所述控制块接收来自所述第二处理器的访问请求;通过所述控制块,针对从所述第二处理器接收的针对共享数据的每个访问请求,增加访问请求的计数;以及响应于确定所述计数等于所述给定计算单元和所述一个或多个其他计算单元之和,由所述控制块确定满足所述合格条件。
18.在一实施方案中,所述方法还可以包括通过所述控制块存储包括以下项中的一项或多项的用于所述共享数据的广播特性:广播标识符,其标识所述共享数据;和基地址,所述基地址指定存储所述共享数据的开头的存储位置。
19.在一实施方案中,所述方法还可以包括通过所述控制块在所述单个访问请求中插入以下一项或多项:所述广播标识符;以及标识所述给定计算单元和所述一个或多个其他计算单元的掩码。
20.在一实施方案中,所述方法还可以包括:通过所述第一高速缓存控制器确定通过接收所述单个访问请求中的所述掩码来确定所述掩码;以及通过所述第一高速缓存控制器,经由转换所述单个访问请求中的所述广播标识符来确定所述掩码。
21.在另一方面,一种装置可以包括:第一接口,其被配置为与包括多个计算单元的处理器进行通信,每个计算单元被配置为处理指令;第二接口,其被配置为与第一高速缓存控制器通信;以及电路;并且其中,所述第一接口被配置为接收由执行多个计算内核的所述多数个计算单元生成的访问请求;其中,所述电路被配置为响应于经由所述第一接口,接收来自所述多个计算单元中的一个的针对所述共享数据的第一访问请求以及确定满足合格条件,将针对由所述多数个计算单元中的多个计算单元请求的共享数据的单个访问请求传送给所述第一高速缓存控制器。
22.在一实施方案中,所述多个计算单元中没有计算单元接收来自所述多个计算单元
中的任何一个的共享所述共享数据的指示。
23.在一实施方案中,所述电路可以被配置为:对于从所述处理器接收的、针对所述共享数据的每个访问请求,增加访问请求的计数;以及响应于确定所述计数等于所述给定计算单元与所述一个或多个其他计算单元之和,确定满足所述合格条件。
24.在一实施方案中,所述电路可以被配置为存储所述共享数据的广播特性,所述广播特性包括以下一项或多项:广播标识符,其中所述广播标识符为标识所述共享数据的唯一标识符;以及基地址,所述基地址指定存储所述共享数据的开头的存储位置。
附图说明
25.通过结合附图参考以下描述,可以更好地理解本文所述的方法和机制的优点,其中:
26.图1是矩阵的一个实施方式的框图。
27.图2是矩阵的一个实施方式的框图。
28.图3是矩阵的一个实施方式的框图。
29.图4是矩阵的一个实施方式的框图。
30.图5是用于支持矩阵的共享数据的广播的表的一个实施方式的框图。
31.图6是用于支持矩阵共享数据的广播的计算机程序代码的一个实施方式的框图。
32.图7是支持广播矩阵共享数据的计算系统的一个实施方式的框图。
33.图8是支持广播矩阵共享数据的计算系统的一个实施方案的框图。
34.图9是用于通过减少存储器访问的数量来有效并行执行处理器中的多个工作单元的方法的一个实施方式的流程图。
35.尽管本发明易于进行各种修改和替代形式,但是在附图中通过示例的方式示出了具体的实施方式,并且在此对其进行详细描述。然而,应当理解,附图及其详细描述并非旨在将本发明限制为所公开的特定形式,相反,本发明将覆盖落入如所附权利要求所定义的本发明范围内的所有修改、等同和替代形式。
具体实施方式
36.在以下描述中,阐述了许多具体细节以提供对本文提出的方法和机制的透彻理解。然而,本领域普通技术人员应该认识到,可以在没有这些具体细节的情况下实践各种实施方式。在某些情况下,没有详细示出公知的结构、组件、信号、计算机程序指令和技术,以避免模糊本文所述的方法。应当理解,为了图示的简单和清楚起见,附图中所示的元件未必按比例绘制。例如,一些元件的尺寸可能相对于其他元件被放大。
37.公开了用于通过减少存储器访问的数量来有效并行执行处理器中的多个工作单元的各种系统、装置、方法和计算机可读介质。在各种实施方式中,计算系统包括用于存储操作系统的内存、由设计人员开发的软件应用程序以及软件应用程序的用户数据和结果数据。该计算系统还包括处理单元,该处理单元访问内存并执行操作系统和应用程序的指令。该处理单元包括一个或多个具有单指令多数据(simd)并行架构的处理器核。在一个实施方式中,主板上的加速处理单元除了通用处理器之外还包括simd处理器核。在另一个实施方式中,视频图形卡包括simd处理器核。一个或多个软件应用程序包括用于指导simd核执行
通用矩阵与矩阵乘法(gemm)操作的指令,例如将两个输入矩阵相乘在一起以生成第三输出矩阵。
38.在一个实施方式中,gemm操作用于神经网络应用程序。例如,该应用程序包括用于训练深度神经网络的算法。另一个软件应用程序是图形着色器程序,该程序指导simd处理器核如何渲染像素以控制照明和阴影效果。此外,该应用程序包括用于几何变换的像素插值算法。像素插值从现有数据提取任意坐标处的新像素值。其他软件应用程序还包括用于指导simd核执行gemm操作以用于其他科学和商业用途的指令。软件应用程序指令在行和列的数量在几百到几千范围内的矩阵上运行,这导致数百万到几百亿范围内的数量的浮点运算(flop)。
39.在一些实施方式中,设计者使用并行计算平台和相应的应用程序编程接口(api)模型来使用gemm操作来开发软件应用程序。并行计算平台的一个示例是(开放计算语言)框架。opencl框架(在本文中通常称为“opencl”)包括类c语言。对于视频图形应用程序,该语言的一个示例是glsl(opengl阴影语言)。类c语言的函数调用称为opencl内核、软件内核、计算内核或简称为“内核”。在一些实施方式中,不是使用操作系统的调度器,而是编译器或其他软件代码包括可由处理器执行的指令,以将执行gemm操作的软件应用程序的多个计算内核分配给simd处理器核的多个计算单元。在一些实施方式中,软件应用程序包括代码段,这些代码段包括用于支持共享数据广播协议的指令,其中共享数据被广播到多个计算单元。在共享数据广播协议中,需要共享数据的多个计算单元生成对数据的请求,但是仅生成一次数据提取。当提取的数据(例如从高速缓存、内存等)返回时,其被广播到请求数据的所述计算单元。这样,多个提取请求不会不必要地消耗内存总线带宽。在各种实施方式中,在simd处理器核的计算单元上执行的计算内核不就共享数据彼此通信,并且不从任何其他计算内核接收指定共享数据与任何其他计算单元共享的指示。
40.在多种实施方案中,simd处理器核包括用于支持共享数据广播协议的硬件,诸如电路。simd处理器核存储共享数据的广播特性。所述特性包括广播标识符和基地址,该广播标识符是识别共享数据的唯一标识,该基址指定存储共享数据的开头的存储位置。在一些实施方式中,所述特性还包括使用共享数据的计算单元的总数的总和。当simd处理器核检测到针对共享数据的读取访问请求时,simd处理器核会增加发送针对特定共享数据的读取访问请求的计算单元的数量。当计算单元的针对共享数据的数量等于存储的总和时,simd处理器核将发出针对共享数据的单个访问请求。
41.在其他实施方式中,simd处理器核监视线程组中请求多个计算单元之间的共享数据的线程计数。该总和是来自多个计算单元的线程总和。在一个实施方式中,simd处理器核在计数等于来自四个计算单元中的每一个的32个线程的总和时生成单个访问请求。尽管在一个实施方式中,simd处理器核中的计算单元中的每一个包括用于执行64个线程的64个并行通道,但是在四个计算单元中的每一个生成用于向64个通道的32个通道提供数据的一个或多个读取访问请求之后,simd处理器核生成单个读取访问请求。用于确定何时产生单个读取访问请求的另一数量的总并行通道和总数量中的其他部分的通道是可能的,并且是可预期的。在其他实施方式中,simd处理器核监视由来自多个计算单元的多个读取访问请求所请求的共享数据的数量,而不是计算单元的数量或计算单元中的并行通道的数量。
42.在一个实施方式中,simd处理器核在单个访问请求中插入使用共享数据来标识计
算单元的掩码。在另一个实施方式中,simd处理器核基于广播标识符生成掩码。在这样的实施方式中,单个访问请求包括广播标识符,但是不包括掩码。在其他实施方式中,单个访问请求包括掩码,但不包括广播标识符。当simd处理器核确定存储器子系统返回共享数据时,simd处理器核会将共享数据广播到由掩码标识的计算单元。因此,由于单个访问请求和检索到的共享数据的广播,减少了基于存储器子系统带宽限制的性能下降影响。
43.参照图1,示出了在操作中使用的矩阵100的一个实施方式。如图所示,矩阵a 110和矩阵b 120被输入到矩阵运算130,矩阵运算130产生矩阵c150。矩阵运算130和矩阵110、120和150用于神经网络的训练、视频图形渲染期间的像素插值或其他多种科学和商业应用程序之一。在各种实施方式中,矩阵运算130是通用矩阵与矩阵乘法(gemm)运算。例如,在一些实施方式中,矩阵运算130是用于确定两个输入矩阵的两个值的点积的乘法和累加(mac)运算。在其他实施方式中,矩阵运算130是用于从两个输入矩阵(诸如矩阵a 110和矩阵b 120)生成第三矩阵(诸如矩阵c 150)的另一数学运算。还示出了利用单指令多数据(simd)并行架构来将矩阵110和120的输入数据值分配140到处理器核的计算单元。在一个实施方式中,simd处理器包括16个计算单元,每个计算单元具有64个执行通道。在其他实施方式中,simd处理器核包括另一数量的计算单元和每一计算单元的另一数量的通道。
44.矩阵a 110被示为包括16个标记为a32至a47的块。在一个实施方式中,这16个块中的每一个包括k个数据项,其中k是正的非零整数。在这样的实施方式中,矩阵a 110具有等于16乘以k的数据项的数量。类似地,矩阵b 120被示出为包括标记为b32的1个块。该单个块具有数量等于1乘以k的数据项或k个数据项。值k可以是任何数字,因此矩阵110和120可以非常大。例如,数据项的数量k可以在几十到几百甚至几千的范围内。当范围达到几千时,矩阵运算130的运算数达到几百万至数十亿的范围。在其他实施方式中,值k表示数据的量,所述数据包括多个数据项。例如,如果值k表示64个字节,并且数据项的大小为32位(4个字节),则值k表示(64/4)个数据项或16个数据项。
45.矩阵c 150被示为包括标记为(a32,b32)至(a47,b32)的16x1块。矩阵c 150的每个块包括通过矩阵运算130执行的矩阵a 110的块与矩阵b 120的块b32的组合。因此,矩阵110和120中的数据项通过矩阵运算130以矩阵c 150中通过块标签所示的顺序进行组合。在一些实施方式中,simd处理器核以并发和并行的方式执行矩阵运算130的步骤。在各种实施方式中,计算系统包括用于存储由软件开发者编写的软件应用程序以及软件应用程序的用户数据和结果数据的存储器。在此,用户数据是矩阵a 110和矩阵b 120的数据项,而结果数据是矩阵c 150的数据项。
46.在一个实施方式中,simd处理器核包括如分配140中所示的16个计算单元(cu),但在其他实施方式中,simd处理器核包括另一数量的计算单元。使用分配140,simd处理器核的计算单元0(cu0)使用矩阵运算130的步骤将矩阵a 110的块a32中的数据与矩阵b 120的块b32中的数据进行组合。由软件开发者所写的软件应用程序包括矩阵运算130的步骤。例如,软件应用程序使用具有在特定库中定义的定义的函数调用。软件开发者使用多种类型的并行计算平台和应用程序编程接口(api)模型中的一个来开发软件应用程序。这些平台中的函数调用称为“计算内核”,或简称为“内核”。
47.在各个实施方式中,存储器还存储操作系统的指令。在一些实施方式中,操作系统的指令由计算系统中的通用处理器核执行。在一实施方式中,应用程序或固件将这些软件
内核与一个或多个数据记录(例如数据项)匹配,以产生一个或多个计算工作单元。工作单元被划分为多个工作组,这些工作组也称为“线程组”。每个线程组都有一个分配的唯一标识符(id)。不是由调度程序将线程组分配给计算单元,而是由simd处理器核管理分配。例如,当计算单元具有64个并行执行通道时,应用程序或固件将工作单元划分为64个组,并且simd处理器核将64个工作单元的线程组分配给特定的计算单元。simd处理器核执行计算单元分配140(或分配140)中所示的分配。
48.以类似的方式,simd处理器核的计算单元1(cu1)被分配为使用矩阵运算130的步骤将矩阵a 110的块a33中的数据与矩阵b 120的块b32中的数据进行组合。同样地,simd处理器核的计算单元15(cu15)使用矩阵运算130的步骤将矩阵a 110的块a47中的数据与矩阵b 120的块b32中的数据进行组合,以及对于cu1和cu 15之间的计算单元,依此类推。基于分配140,矩阵110和120的数据根据需要多次加载到simd处理器核的计算单元0-15中。例如,如果k表示256个数据项,每个数据项的大小为4个字节,并且每个计算单元具有64个执行通道,每个通道支持对4字节数据项的操作,则simd处理器核使用(256/64)加载,或4次加载,以用来自块a32和块b32的数据填充64个并行执行通道。
49.一般来说,当执行并行数据工作负载时,simd架构提供了良好的计算性能和成本效率。但是,当存储带宽受到限制并且应用程序具有很高的数据重用性时,性能会降低,从而导致对同一数据的多次存储器访问。如分配140中所示,数据重用在gemm计算中是典型的。例如,每个计算单元cu0-cu15加载并使用矩阵b 120的块b32中的相同的数据。
50.在不修改软件应用程序的执行的情况下,在示出的实施方式中,simd处理器核生成32个数据提取,其中每个计算单元具有2个数据提取。例如,计算单元0(cu0)对块a32和块b32中的数据使用两次数据提取。类似地,计算单元8(cu8)对块a40和相同的块b32中的数据使用两次数据提取。但是,如果将simd处理器核修改为包括重用数据的广播支持,则simd处理器核将生成17次数据提取,而不是32次数据提取。例如,如果软件应用程序包括在块b32中仅支持一次提取数据并且将获取的数据广播到计算单元0-15的指令,则simd处理器核为块a32-a47中的数据生成16次数据提取和为块b32中的数据生成单次数据提取。数据提取的数量从32次数据提取减少到17次数据提取。
51.在一个示例中,存储器子系统中的一个或多个总线小于矩阵b 120的块b32中的数据量。因此,对于块b32中的数据的“单次”数据提取,发生了多次数据提取,而在块b32中传输数据时,总线被多次使用。例如,当到存储在块b32中的数据的存储器的总线的宽度为64字节,但是块b32中的数据量为512字节时,对块b32的数据提取将使用总线上的八个单独的数据传输。当多次提取块b32中的数据时,例如在一个实施方式中对十六个计算单元中的每一个提取16次时,则存储器子系统的资源被大量加载并且延迟增加。使用上面的示例,在没有广播支持的情况下,对于块b32的512字节有(16x8)或128次数据提取。随着延迟的增加,性能会下降。但是,如果simd处理器核支持在块b32中广播数据,并且仅提取一次该数据,而不是针对十六个计算单元中的每一个提取,则相较于128次数据提取,对于块b32的512字节有8次数据提取。因此,不像以前那样加载存储器子系统,延迟减少,性能提高。
52.现在转向图2,示出了在操作中使用的矩阵200的一个实施方式。前文描述的控制逻辑被相同编号。如图所示,矩阵a 210和矩阵b 220被输入到矩阵运算130,矩阵运算130产生矩阵c250。类似于矩阵100,矩阵运算130和矩阵210、220和250用于神经网络的训练、视频
图形渲染过程中的像素插值或其他多种科学和商业应用程序之一。在各种实施方式中,矩阵运算130是通用矩阵与矩阵乘法(gemm)运算。还示出了矩阵210和220的输入数据值到simd处理器核的计算单元的分配240。
53.矩阵a 210被示为包括标记为a32至a39的8个块。在一个实施方式中,这8个块中的每一个包括k个数据项。在这样的实施方式中,矩阵a 210具有数量等于k的8倍的数据项。类似地,矩阵b 220被示为包括标记为b32和b33的2个块。矩阵b 220具有数量等于k的2倍的数据项。如前所述,k是一个正的非零整数。值k可以是任何数,因此矩阵210和220能够非常大。在其他实施方式中,值k表示数据的量,所述数据包括多个数据项。例如,如果值k表示512字节,并且一个数据项的大小为64位(8字节),则值k表示(512/8)个数据项或64个数据项。
54.示出的矩阵c 250包括标记为(a32,b32)和(a32,b33)至(a39,b32)和(a39,b33)的8x 2的块。矩阵c 250的每个块包括通过矩阵运算130执行的矩阵a 210的块与矩阵b 220的块的组合。因此,矩阵210和220中的数据项通过矩阵运算130以矩阵c 250中通过块标检显示的顺序进行组合。在一些实施方式中,simd处理器核以并发和并行的方式执行矩阵运算130的步骤。
55.在一个实施方式中,simd处理器核包括16个计算单元(cu),如计算单元分配240(或分配240)中所示,尽管在其他实施方式中,simd处理器核包括另一数量的计算单元。使用分配240,simd处理器核的计算单元0(cu0)使用矩阵运算130的步骤将矩阵a 210的块a32中的数据与矩阵b 220的块b32中的数据进行组合。simd处理器核的计算单元1(cu1)被分配为使用矩阵运算130的步骤将矩阵a 210的块a33中的数据与矩阵b 220的块b32中的数据进行组合。类似地,计算单元15(simd处理器核的cu15)使用矩阵运算130的步骤将矩阵a 210的块a39中的数据与矩阵b 220的块b33中的数据进行组合,以及对于cu1和cu 15之间的计算单元,依此类推。
56.在一些实施方式中,基于分配240,将矩阵210和220的数据按需要多次加载到simd处理器核的计算单元0-15中。例如,如果k代表64个数据项,每个数据项具有8个字节的大小,并且每个计算单元具有32个执行通道,每个通道支持对8字节数据项的操作,则simd处理器核使用(64/32)加载,或2次加载,用来自块a32和块b32的数据来填充32个并行执行通道。如分配240中所示,在gemm计算中数据重用是典型的。例如,每个计算单元cu0-cu7加载并使用矩阵b 220的块b32中的相同的数据。类似地,每个计算单元cu8-cu15加载并使用矩阵b 220的块b33中的相同的数据。
57.在不对执行矩阵运算130的simd处理器核进行修改的情况下,在所示实施方式中,simd处理器核生成32次数据提取,其中针对16个计算单元的每一个生成2次数据提取。例如,计算单元0(cu0)对块a32和块b32中的数据使用2次数据提取。类似地,计算单元7(cu7)对块a39和相同的块b32中的数据使用2次数据提取。但是,如果将软件应用程序修改为对共享数据广播协议的支持,则软件应用程序将生成18次数据提取,而不是32次数据提取。例如,如果在块b32中的simd处理器核仅提取一次数据并将所提取的数据广播到计算单元0-7的指令,则对于矩阵c 250的最左列,simd处理器核针对块a32-a39中的数据生成8次数据提取,并且针对块b32中的数据生成单次数据提取。矩阵c 250最左边一列的数据提取次数从16次数据提取减少到9次数据提取。
58.如果simd处理器核在框b33中仅提取一次数据并将所提取的数据广播到计算单元
8-15,则对于矩阵c 250的最右列,simd处理器核对于块a32-a39中的数据生成8次数据提取,并且针对块b33中的数据生成单次数据提取。矩阵c 250最右边一列的数据提取次数从16次数据提取减少到9次数据提取。数据提取的总次数从(16+16)次数据提取或32次数据提取减少到(9+9)次数据提取或18次数据提取。如果simd处理器核仅一次提取矩阵a 210的块a32-a39中的共享数据并将所提取的共享数据广播到计算单元0-15,则simd处理器核针对块a32-a39中的数据生成8次数据提取,针对块b32中的数据和块b33中的数据进行单次数据提取,从而提供(8+1+1)次数据提取,或10次数据提取。如先前针对矩阵100所述的,当simd处理器核支持数据广播时,数据仅提取一次,存储器子系统不像以前那样在没有广播支持的情况下加载,从而降低了延迟,并提高了性能。
59.现在转到图3,示出了在操作中使用的矩阵300的一个实施方式。前面描述的控制逻辑被相同编号。如图所示,矩阵a 310和矩阵b 320被输入到矩阵运算130,矩阵运算130产生矩阵c350。类似于矩阵100和200,矩阵运算130和矩阵310、320和350用于神经网络训练、视频图形渲染期间的像素插值、或多种其他科学和商业应用程序之一。在各种实施方式中,矩阵运算130是gemm运算。还示出了矩阵310和320的输入数据值到simd处理器核的计算单元的分配340。
60.矩阵a 310被示为包括标记为a32至a35的4个块。在一个实施方式中,四个块中的每个包括k个数据项。在这样的实施方式中,矩阵a 310具有数量等于k的4倍的数据项。类似地,矩阵b 320被示出为包括标记为b32至b35的4个块。矩阵b 320具有数量等于k的4倍的数据项。如前所述,k是正的非零整数。值k可以是任何数量,因此矩阵310和320能够非常大。在其他实施方式中,值k表示数据的量,所述数据包括多个数据项。
61.矩阵c 350被示为包括4x4的块。矩阵c 350的顶行包括标记为(a32,b32),(a32,b33),(a32,b34)和(a32,b35)的块。矩阵c 250的每个块包括通过矩阵运算130执行的矩阵a 310的块与矩阵b 320的块的组合。因此,矩阵310和320中的数据项通过矩阵运算130以矩阵c 350中的通过块标签示出的顺序进行组合。在一些实施方式中,simd处理器核以并发和并行的方式执行矩阵运算130的步骤。
62.在一个实施方式中,simd处理器核包括16个计算单元(cu),如计算单元分配340(或分配340)中所示的,但在其他实施方式中,simd处理器核包括另一数量的计算单元。如分配340中所示的,在gemm计算中数据重用是典型的。例如,每个计算单元cu0-cu3加载并使用矩阵b 320的块b32中的相同的数据。类似地,每个计算单元cu4-cu7加载并使用矩阵b 320的块b33中的相同的数据,并且以此类推。
63.在不对执行矩阵运算130的simd处理器核进行修改的情况下,在所示的实施方式中,simd处理器核生成32次数据提取,每个计算单元具有2次数据提取。例如,计算单元0(cu0)对块a32和块b32中的数据使用两次数据提取。类似地,计算单元3(cu3)对块a35和相同的块b32中的数据使用两次数据提取。但是,如果将simd处理器核修改为在矩阵b 320中包括重用数据(共享数据)的广播支持,则在一个实施方式中,simd处理器核生成20次数据提取,而不是32次数据提取。例如,如果simd处理器核在块b32中仅提取一次共享数据并将所提取的共享数据广播到计算单元0-3,则对于矩阵c 350的最左列,软件应用程序对于块a32-a35中的数据生成4次数据提取,并且对于块b32中的数据生成单次数据提取。对于矩阵c 250的最左列的数据提取次数从8次数据提取减少到5次数据提取。
64.如果simd处理器核仅一次提取块b33中的共享数据并将所提取的数据广播到计算单元4-7的指令,则对于矩阵c 350的第二最左列,simd处理器核针对块a32-a35中的数据和块b33中的数据生成总共5次的数据提取。如果simd处理器核以与提取和广播块b32和b33中的共享数据类似的方式提取和广播块b34和b35中的共享数据,则总的提取次数为(4x5),或20次数据提取,而不是32次数据提取。如果simd处理器核另外仅一次提取矩阵a 310的块a32-a35中的共享数据并将所提取的数据广播到计算单元0-15,则simd处理器核将针对块a32-a35中的数据生成4次数据提取,针对块b32中的数据生成单次数据提取,以及针对块b33中的数据生成单次数据提取,这将为矩阵c 350的最左的两列提供(4+1+1)次数据提取或6次数据提取。
65.对于矩阵c 350的最右边的两列,执行两次附加的数据提取以提取块b34和b35中的数据。因此,当软件应用程序包括支持广播矩阵a 310和矩阵b 320中的数据的指令时,数据提取的总次数从6次数据提取增加到8次数据提取,以便从矩阵310和320生成矩阵c 350。如果该simd处理器核支持仅广播矩阵b 320中的数据,那么,当从矩阵310和320生成矩阵c 350时,数据提取的次数从32次数据提取减少到20次数据提取。不管何种情况,如之前对于矩阵100和200所述的,当simd处理器核支持数据广播时,存储器子系统在没有广播支持的情况下不会像以前那样加载,从而延迟会降低,并且性能会提高。
66.现在转到图4,示出了在操作中使用的矩阵400的一个实施方式。前面描述的控制逻辑和数据值被相同编号。再次示出了结果矩阵c 350以及输入矩阵310和320。为了减少存储器访问的次数,矩阵b 320的列中的数据与广播标识符(id)相关联。在一个实施方式中,软件应用程序的指令将广播标识符(id)0分配给矩阵b 320的最左列中的数据,该最左列是块b32。分配给块b32中的数据的线程组(tg)也分配给广播标识符0。因此,如广播分配460所示,线程组0-3(tg 0-3)被分配给广播标识符0。
67.线程组0-3使用矩阵b 320的块b32中的数据生成矩阵c 350的最左列。对广播标识符0的分配指示对块b32中的数据进行的数据提取应该发生一次,而不是四次。例如,针对块b32中的特定数据项的数据应该提取一次,而不是四个计算单元0-3(cu 0-3)中的四次逻辑中的每个逻辑都生成对此特定数据项的读取访问请求。在执行gemm软件应用程序的指令时,四个cu 0-3中的每个对于块b32中的相同数据仍生成读取访问请求,但是直到四个读取访问请求中的每个读取访问请求都已生成,才发送读取访问请求到存储器子系统。在另一示例中,每个计算单元cu8-cu11针对块b34中的相同的数据生成一个读取访问请求。但是,直到四个读取访问请求中的每一个都已生成,才发送一个读取访问请求到存储器子系统。
68.一旦四个读取访问请求中的每一个已生成,就生成一个单独的读取访问请求并将其发送到存储器子系统。该单个读取访问请求包括指示,该指示指定该读取访问请求与所请求的数据的广播相关联。在一个实施方式中,该指示是存储断言值以指示所请求的数据的广播的位。单个读取访问请求还包括在广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,单个读取访问请求包括位掩码,该位掩码指定哪些计算单元在广播期间接收所请求的数据。在其他实施方式中,单个读取访问请求包括广播标识符,该广播标识符随后被翻译或解码以确定哪些计算单元在广播期间接收所请求的数据。因此,当从存储器子系统一次检索到块b32的数据时,该数据被同时提供给计算单元cu0-cu3。类似地,当从存储器子系统一次检索到块b34的数据时,该数据被同时提供给计算单元cu8-cu11。
69.尽管仅示出了矩阵b 320的广播标识符,但是要注意,在其他实施方式中,存在矩阵a 310的块a32-a35的广播标识符。在一个实施方式中,被分配给块a32中的数据以及计算单元cu0、cu4、cu8和cu12的线程组(tg)0、4、8和12也被分配给广播标识符4(未示出)。以类似的方式,被分配给块a33中的数据以及计算单元cu1、cu5、cu9和cu13的线程组(tg)1、5、9和13也被分配给广播标识符5(未示出)。在这样的实施方式中,simd处理器核在执行任何一个线程组之前提取每个线程组的数据。例如,当广播标识符同时用于矩阵310和320时,计算单元cu0生成针对块a 32和块b32两者的读取访问请求。然而,直到生成了来自计算单元c1-c3的读取访问请求,才使用广播标识符0生成针对块b32的单个访问请求。类似地,直到生成了来自计算单元c4、c8和c12的读取访问请求,才生成使用广播标识符4(未示出)的对块a32的单个访问请求。
70.现在转向图5,示出了用于支持用于矩阵运算的数据广播的表500的一个实施方式。在一些实施方式中,诸如gemm软件应用程序之类的软件应用程序的指令包括用于设置表500的由simd处理器核执行的指令。在一个实施方式中,特定的计算内核包括所述指令。在另一个实施方式中,该应用程序在用于使用gemm操作定义计算内核的函数调用之前包括表设置指令。表500包括字段512-524,其用于存储在诸如gemm操作之类的矩阵运算期间在共享数据的广播期间使用的信息。表500存储在成组的寄存器、随机存取存储器、内容可寻址存储器或其他中。在一些实施方式中,如所示设置表500,其中每个条目分配给要广播的特定共享数据。在其他实施方式中,每个条目是单独的表。表500提供线程组到计算单元的映射(分配)。
71.字段512存储共享数据的广播标识符。如先前在图4中所示,矩阵b 320的每个块b32-b35具有唯一的广播标识符,其将特定块(例如,b32)的共享数据与另一个块(例如,b35)的共享数据区分开。字段514存储对访问由相应的广播标识符标识的共享数据的线程组的数量的指示。在针对矩阵b 320示出的较早的示例中,十六个计算单元中的四个共享每个块b32-b35的数据。例如,计算单元cu0-cu3共享块b32的数据,计算单元cu4-cu7共享块b33的数据,依此类推。字段516存储迭代大小的指示,该指示用于确定要提取的共享数据的量。对于共享数据的每单个数据提取,都会提取或检索特定数量的共享数据。共享数据的量的指示被指定为共享数据总量的一部分、数据项的数量、数据的绝对量或其他。在一些实施方式中,要提取的共享数据的量是在针对共享数据的原始读取访问请求中指定的。
72.字段518存储用于诸如矩阵b 320的块b32之类的特定块的共享数据的基地址。该基地址指定存储共享数据的开头的存储器位置。如图所示,与广播标识符0相对应的共享数据的基地址为0x04de_8f10。此处,符号“0x”表示十六进制值。基地址也是参考地址。为了获得共享数据中其他数据的绝对地址,将特定的位移(或偏移)值添加到基地址。当第一读取访问请求以共享数据的第一个四分之一为目标时,在第一读取访问请求中使用基地址和指示共享数据的四分之一的大小值。当第二读取访问请求以共享数据的第二个四分之一为目标时,共享数据的四分之一的大小作为对基地址的位移而添加以提供目标地址。另外,在第二读取访问请求中使用指示共享数据的四分之一的大小值。
73.在一个实施方式中,在处理器核上执行的软件应用程序的指令还将读取访问请求的目标地址与字段518中的基地址进行比较。当目标地址在字段518中的基地址的范围内时,相应的读取访问请求以共享数据为目标,并且该读取访问请求应被转换为支持共享数
据的广播的单个读取访问请求。字段520存储针对相应的共享数据的未完成的读取访问请求的数量的计数。如前所述,字段514存储对访问由相应的广播标识符标识的共享数据的线程组的数量的指示。
74.每当软件应用程序的指令使处理器核中的逻辑检测到针对特定共享数据的未完成的读取访问请求时,字段520中的对应计数就被更新。在一个实施方式中,更新存储在字段520中的值包括增加该值。在这样的实施方式中,字段520中存储的初始值为零。在其他实施方式中,初始值等于字段514中存储的值,并且更新字段520中存储的值包括减小该值。当存储在字段520中的值不等于阈值时,软件应用程序的指令使处理器核中的逻辑防止发送针对共享数据的读取访问请求。当更新存储在字段520中的值包括增加该值时,阈值是存储在字段514中的值。当更新存储在字段520中的值包括减少该值时,该阈值是零。
75.在某些实施方式中,当存储在字段520中的值等于阈值时,软件应用程序的指令使处理器核中的逻辑生成用于广播共享数据的单个读取访问请求。在其他实施方式中,处理器核中的电路确定存储在字段520中的值等于阈值,并且在不执行指示电路这样做的特定指令的情况下生成单个读取访问请求。如前所述,在一个实施方式中,该单个读取访问请求包括存储断言值以指示所请求的数据的广播的位。该单个读取访问请求还包括在广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,该单个读取访问请求包括存储在字段512中的广播标识符,该广播标识符随后被转换或解码以确定哪些计算单元在广播期间接收所请求的数据。在其他实施方式中,该单个读取访问请求包括位掩码,该位掩码指定哪些计算单元在广播期间接收所请求的数据。
76.字段522存储指定在广播期间哪些计算单元接收所请求的数据的位掩码。如图所示,与广播标识符0相对应的共享数据包括位掩码0xf000,其指定计算单元cu0-cu3使用该共享数据。对应于广播标识符1的共享数据包括位掩码0x0f00,它指定计算单元cu4-cu7使用共享数据,依此类推。在稍后对广播标识符进行解码以生成位掩码的实施方式中,表500中不使用字段522。在一些实施方式中,表500包括字段524,其存储共享数据的大小。在此示例中,共享数据的大小为2千字节(kb)。在另一个实施方式中,字段524包括共享数据的结束地址,因此字段518和524中的地址提供了共享数据的地址范围。在其他实施方式中,逻辑使用字段516中的迭代大小和字段518中的基地址来确定共享数据的地址范围和/或大小。
77.现在转到图6,示出了利用共享数据的广播支持的源代码600的一个实施方式。在各种实施方式中,计算系统包括用于存储操作系统、由设计者开发的软件应用程序以及软件应用程序的用户数据和结果数据的系统存储器。该计算系统还包括处理单元,该处理单元访问系统存储器,将信息存储在高速缓存存储器子系统中,并执行操作系统和应用程序的指令。该处理单元包括一个或多个具有单指令多数据(simd)并行架构的处理器核。在一个实施方式中,主板上的加速处理单元除了通用处理器之外还包括simd处理器核。在另一个实施方式中,视频图形卡包括simd处理器核。代码600代表存储在系统存储器中的软件应用程序的一个示例。在一些实施方式中,代码600的部分也是存储在除系统存储器或高速缓存存储器子系统之外的存储器(例如可擦除只读存储器或其他随机存取存储器)中的固件的指令。代码600包括用于指导simd处理器核或其他电路以执行gemm操作的指令。代码600还包括用于支持共享数据的广播的代码段610、620和630。
78.在一些实施方式中,软件开发者使用并行计算平台和相应的应用程序编程接口
(api)模型来使用gemm操作来开发软件应用程序。并行计算平台的一个示例是(开放计算语言)框架。opencl框架提高了游戏、娱乐、科学和医疗领域中使用的各种数据并行应用程序的计算性能。opencl框架(在本文中通常称为“opencl”)包括类c语言。对于视频图形应用程序,该语言的一个示例是glsl(opengl阴影语言)。类c语言的函数调用称为opencl内核、软件内核、计算内核或简称为“内核”。
79.在实施方式中,代码600与数据项匹配以形成工作单元和线程组,所述数据项被分配给simd处理器核的计算单元。如先前所示,在一个实施方式中,通过创建表500(图5)来执行分配。代码段610、620和630包括用于支持向多个计算单元广播共享数据的指令。但是,在simd处理器核的计算单元上执行的计算内核没有从任何其他计算内核接收到指示共享数据与任何其他计算单元共享的指示。在各种实施方式中,代码600是包括计算内核和内部函数的集合的计算机程序。软件开发者通常定义计算内核,而内部函数通常在库中定义。
80.在一些实施方式中,代码600在矩阵(例如,先前的矩阵b 320)的特定列上操作。矩阵b 320的列是特定的块,例如,块b32,b33等。每个计算单元(例如先前示例中的cu 0-15)执行代码600的指令,但对不同的数据项进行操作。针对矩阵100、200、300和400示出的较早的示例说明了当共享数据时计算单元被不同地分组。共享基于输入矩阵。代码段610生成线程组到计算单元的映射。例如,代码段610通过构建类似于表500(图5的表)的表来构建一个或多个表以支持共享数据的广播,该表也将线程组分配给特定的计算单元。在一些实施方式中,代码段610被放置在外部循环中,该外部循环包括该循环内的代码600。在一个实施方式中,代码600中的“for loop”的每次迭代在诸如矩阵b 350之类的矩阵的分区或列的子集上进行操作。例如,每次迭代对矩阵b350的块b32中的数据的四分之一进行操作。在一些实施方式中,表500的字段516指定迭代大小。
81.在各个实施方式中,当代码段620检测到对共享数据的读取访问请求的生成时,代码段620生成广播开始消息。在一些实施方式中,代码600包括来自静态编译器的提示,该提示指示哪些读取访问请求以共享数据为目标,并且另外哪个广播标识符对应于共享数据。例如,静态编译器将读取访问请求的目标地址与共享数据的地址范围进行比较。因此,代码段620检测编译器提示。在其他实施方式中,不使用编译器提示,并且代码段620执行读取访问请求的目标地址与共享数据的地址范围的比较。该消息包括指定广播数据的开始的指示、相应的广播标识符和目标地址。
82.在一个实施方式中,代码段620与代码段630之间的代码600的指令获取另一矩阵(例如,先前示例的矩阵a 310或另一矩阵a)的数据。这些指令还将获取的数据存储在相应计算单元的本地数据存储(lds)中。指令针对每个数据项分别执行获取和存储。代码段630检测矩阵b的广播消息的开始,并更新诸如针对相同共享数据的读取访问请求的数量的计数之类的计数。代码段630还将该计数与共享该共享数据的线程组的总数进行比较。此阈值与表500的字段514中存储的阈值相同。当计数等于阈值时,代码段630生成单独的单个读取访问请求,并将其发送到存储器子系统以提取请求的数据。在各种实施方案中,simd处理器核的硬件执行代码段630,其生成开始信号。然后,硬件执行以下步骤:检测广播消息的开始,更新计数,与阈值进行比较并生成单个读取访问请求。这些和其他实施方案是可能的并且是可预期的。
83.所生成的单个读取访问请求包括指定读取访问请求与所请求的数据的广播相关
联的指示。在一个实施方式中,该指示是存储断言值以指示所请求的数据的广播的位。单个读取访问请求还包括在随后的广播期间哪些计算单元接收所请求的数据的指示。在一些实施方式中,单个读取访问请求包括指定在广播期间哪些计算单元接收所请求的数据的位掩码,例如表500的字段522中的位掩码。在其他实施方式中,单个读取访问请求包括广播标识符,之后对其进行翻译或解码,以确定哪些计算单元在广播期间接收请求的数据。因此,当存储器子系统基于单个存储器访问提供请求的共享数据时,该数据会同时提供给指定计算单元的本地数据存储。代码段630之后的代码从本地数据存储中读取数据,并使用该数据执行矩阵运算,例如gemm运算。根据需要重复代码600的“for loop”。
84.现在参考图7,示出了支持用于矩阵的共享数据的广播的计算系统700的一个实施方式。处理节点710包括一个或多个处理单元,例如单元715和单元730。单元715包括一个或多个处理器核712和相关联的高速缓存存储器子系统714。单元730包括一个或多个处理器核732和数据存储缓冲器734。处理节点710还包括存储器控制器720以及接口740a和740b。存储器控制器720包括用于服务于存储器请求和存储器响应以及基于特定通信协议与存储器750通信的逻辑和队列。接口740a-740b也包括用于服务请求和响应以及用于基于适当的通信协议与特定设备进行通信的逻辑和队列。在一个实施方式中,接口740b与视频处理单元760通信。在一个实施方式中,至少处理节点710的所示功能被结合在单个集成电路上。在一些实施方式中,计算系统700的功能被结合在片上系统(soc)上。在其他实施方式中,视频处理单元760的功能被结合在插入主板中的视频图形卡上,该主板还包括处理节点710并连接到存储器750。
85.为了易于说明,未示出诸如锁相环(pll)和其他时钟生成电路的其他组件、电源管理单元、共享的高速缓存存储器子系统等。在一个实施方式中,处理器核712利用通用微架构。处理器核732不是处理器核712的镜像硅图像。相反,处理器核732具有与处理器核712使用的微架构不同的微架构。在一个实施方式中,处理器核732具有为计算密集型任务提供高指令吞吐量的微结构,诸如并行数据架构。在一个实施方式中,处理器核732具有单指令多数据(simd)核。simd核的示例包括图形处理单元(gpu)、数字信号处理(dsp)核或其他。以类似的方式,视频处理单元760的处理器核762也具有simd架构。每个处理器核732和762包括多个计算单元770,每个计算单元具有多个并行的执行通道772。在一实施方式中,处理器核762具有16个计算单元,每个计算单元具有64个并行执行通道。在其他实施方式中,使用另一数量的计算单元和并行执行通道。
86.通常,处理器核712分别针对数据和指令访问高速缓存存储器子系统714。如果在高速缓存存储器子系统714中未找到所请求的块,则处理器核712生成读取访问请求,并将其经由存储器控制器720发送至存储器750。以类似的方式,当在缓冲器734中找不到所请求的数据时,处理器核732生成存储器访问以将其发送至存储器750。在一个实施方式中,高速缓冲存储器子系统714和缓冲器734中的一个或多个包括配置为存储数据块的高速的高速缓冲存储器,并且被实现为高速缓存的层次结构。高速缓存存储器子系统714和缓冲器734都包括高速缓存阵列存储器和相应的高速缓存控制器。
87.通常,包处理逻辑716响应于在处理节点710所耦合的链路上接收到的控制包,以响应于处理器核712和/或高速缓存存储器子系统714而生成控制包,以生成探测命令和响应于由存储器控制器720选择的用于服务的事务的响应包,并通过接口逻辑740a将所述包
(针对这样的包,节点710为中间节点)路由到其他节点。
88.在一些实施方式中,处理器核762在大量对象(顶点或像素)上执行图形密集型应用,例如顶点着色器或像素着色器。由于每个对象都独立于其他对象进行处理,但是使用相同的操作序列,因此使用计算单元770和通道772的simd架构可显著提高性能。在一些实施方式中,处理器核732执行针对神经网络训练的应用程序,其也独立于其他对象处理对象,但是使用相同的操作序列。因此,这些类型的应用程序也受益于使用计算单元770和通道772的simd架构。
89.在各种实施方式中,存储器750包括硬盘驱动器、固态磁盘、其他类型的闪存、便携式固态驱动器、磁带驱动器等中的一个或多个。存储器750存储操作系统752、应用程序754和数据756。尽管示出了单个操作系统和单个应用程序,但是在其他实施方式中,另一数量的这些软件组件被存储在存储器750中。操作系统752包括用于启动处理节点710的启动、将任务分配给硬件电路、管理计算系统700的资源以及托管一个或多个虚拟环境的指令。
90.在一些实施方式中,通用处理器核712执行操作系统752的指令。在一些实施方式中,应用程序754将gemm操作用于神经网络训练、图形渲染期间的像素插值或其他。在一个实施方式中,应用程序754将其软件内核与一个或多个数据记录(例如数据756中的数据项)进行匹配,以产生一个或多个计算工作单元。工作单元被划分为多个线程组,每个线程组都有其自己的分配的唯一标识符(id)。应用程序754还包括用于支持共享数据的广播的代码,例如广播支持代码755。在一个实施方式中,代码755类似于代码600(图6)的代码段610、620和630。当执行应用程序754和代码755时,处理器核732和762中的一个或多个包括用于支持共享数据的广播的电路。
91.编译器、代码755和固件中的一个或多个根据正在处理的应用程序将线程组分配给simd处理器核732和simd处理器核762中的一个或多个中的计算单元770。在一个实施方式中,通过创建表500(图5)来执行分配。在一些实施方案中,处理器核732和762中的一个产生表。例如,在一个实施方式中,应用程序754将用于像素插值的线程组分配给视频处理单元760的simd处理器核762,并且应用程序754将用于神经网络训练的多个线程组分配给单元730的simd处理器核732。针对这些和其他应用程序的其他类型的分配是可能的并且可以预期。当软件应用程序754包括用于支持共享数据的广播的由处理器核732和762中的一个或多个执行的代码755时,共享数据仅被提取一次。当共享数据仅提取一次时,没有广播支持的情况下不加载存储器子系统,延迟会减少,并且系统性能提高。
92.参照图8,示出了支持共享数据广播协议的计算系统800的一个实施方案。前面描述的控制逻辑和电路编号相同。计算系统800包括处理节点710、存储器750和视频处理单元860(或单元860)。在一个实施方案中,计算系统800的所示功能被结合在单个集成电路上。在一些实施方案中,计算系统800的功能被结合在片上系统(soc)上。在其他实施方案中,视频处理单元860的功能被结合在插入母板上的视频图形卡上,该母板也包括处理节点710并连接到存储器750。
93.单元860包括着色器引擎870a-870b、控制器块880a-880b、矩阵数据存储装置882a-882b、高速缓存884和存储器控制器890。其他部件(例如pll、任何电源管理逻辑、总线或架构等等)为了便于说明,未示出。单元860的接口892包括用于服务请求和响应以及用于基于适当的通信协议与处理节点710进行通信的逻辑和队列。类似地,存储器控制器890包
括用于服务于存储器请求和存储器响应以及基于特定通信协议与存储器750通信的逻辑和队列。在一实施方案中,高速缓存884是高速缓存存储器子系统中的二级(l2)高速缓存。然而,在其他实施方案中,高速缓存884是高速缓存存储器子系统中的另一级。在一些实施方案中,矩阵数据存储装置882a-882b仅存储用于矩阵运算的数据,并且一级(l1)高速缓存(未示出)存储用于其他运算的数据。因此,在一些实施方案中,矩阵数据存储器882a-882b包括l1高速缓存控制器的等效物,并且高速缓存884包括l2高速缓存控制器。
94.命令处理器(未示出)基于状态信息将接收到的命令组调度到诸如着色引擎870a-870b之类的计算资源上。状态信息的示例是进程标识符(id)、受保护/不受保护的模式/状态、工作的计算或图形类型等等。着色器引擎870a-870b中的每一个包括多个计算单元770,每个计算单元具有多个并行执行通道872和本地数据存储区874。本地数据存储区874由寄存器、随机存取存储器或其他实现。为了便于说明,现在示出了着色器引擎870a-870b的寄存器文件、其他缓冲器和管线控制逻辑。在一个实施方案中,单元860具有4个着色器引擎,每个着色器引擎具有16个计算单元,并且每个计算单元具有64个并行执行通道。在其他实施方案中,使用了其他数量的着色器引擎、计算单元和并行执行通道。
95.单元860还包括控制器块880a-880b,其由硬件,诸如电路,软件,诸如固件,或硬件与软件的组合来实现。在一些实施方案中,控制器块880a-880b(或控制块880a-880b)阶段化并组织将着色器输入数据加载到着色器引擎870a-870b,并且管理用于执行着色器程序的资源。在一些实施方式中,控制器块880a-880b创建表500(图5),从着色器引擎870a-870b的计算单元接收读取访问请求,维护针对特定共享数据的读取访问请求的计数,生成针对共享数据的单个访问请求,并通过矩阵数据存储装置882a-882b向高速缓存884发出单个访问请求。
96.在一实施方案中,矩阵数据存储装置882a-882b存储接收到的单个访问请求,并基于仲裁逻辑将它们发布到高速缓存884。仲裁逻辑基于优先级、年龄、服务质量参数、源标识符等中的一个或多个来选择要发布到高速缓存884的访问请求。单个访问请求包括如前所述的广播标识符和位掩码中的一个或多个。在一实施方案中,矩阵数据存储装置882a-882b通过从控制器块880a-880b接收位掩码来确定用于标识用于接收共享数据的计算单元的位掩码。在另一实施方案中,矩阵数据存储通过882a-882b通过转换单个访问请求中的广播标识符来确定位掩码。当矩阵数据存储装置882a-882b接收到请求的数据时,矩阵数据存储装置882a-882b将请求的数据发送到多个计算单元,而不是单个计算单元。矩阵数据存储装置882a-882b中的逻辑基于位掩码选择多个计算单元。着色器引擎870a-870b中的选择逻辑(诸如多路复用器或其他)使用位掩码来确定哪些计算单元接收到广播的响应数据。在其他实施方案中,响应数据从矩阵数据存储装置882a-882b被串行地供给而不是同时地提供给计算单元。但是,矩阵数据存储装置882a-882b仍将响应数据提供给多个计算单元,并且响应数据是由单个读取访问请求从高速缓存884访问的,而不是由多个读取访问请求访问的。
97.现在参考图9,示出了用于支持共享数据广播协议的方法900的一实施方案。为了讨论的目的,该实施方案中的步骤以顺序示出。然而,应注意,在所描述的方法的各种实施方案中,所描述的一个或多个元件同时执行,以与所示出的顺序不同的顺序执行,或者被完全省略。还可以根据需要执行其他附加元件。本文描述的各种系统或装置中的任何一种都被配置为实现方法900。
98.软件开发人员设计具有gemm操作的应用程序。在一个实施方案中,并行数据处理器核(或处理器核)的逻辑和电路执行应用程序的指令以执行gemm操作。在一实施方式中,该应用程序包括类似于(图6的)代码600的代码。该应用程序生成多个计算内核。处理器核将共享相同数据的计算内核分配给处理器核的计算单元。处理器核通过将广播的特性加载到表中来支持共享数据的广播(框902)。该应用程序的计算内核与一个或多个数据记录(例如数据项)匹配,以产生一个或多个计算工作单元。工作单元被划分为线程组,每个线程组都有其自己被分配的唯一标识符(id)。处理器核将这些线程组分配给处理器核中的计算单元。在一实施方案中,通过利用在字段512-524中的一个或多个中的信息创建(图5的)表500来执行分配。
99.在一些实施方案中,该应用程序包括来自静态编译器的提示,该提示指示哪些读取访问请求针对共享数据,并且另外,哪个广播标识符对应于共享数据。例如,静态编译器将读取访问请求的目标地址与共享数据的地址范围进行比较。在应用程序的执行期间,如果处理器核未检测到对目标共享数据的存储器访问(条件框904的“否”分支),则应用程序处理计算内核的其他指令(框906)。如果到达计算内核的末尾(条件框908的“是”分支),则方法900完成(框910)。但是,如果未达到计算内核的末尾(条件框908的“否”分支),则方法900的控制流程返回到条件框904,在此处理器核确定是否发生了对共享数据的内存访问。
100.如果处理器核检测到存储器访问检测到共享数据,例如处理器核检测到编译器提示(条件框904的“是”分支),则当执行应用程序或固件的指令时,处理器核的电路增加来自针对相同共享数据的线程组的读取请求的数量的计数(框912)。在一实施方案中,应用程序更新表500的字段520。如果尚未达到来自线程组的读取请求的阈值数量(条件框914的“否”分支),则处理器核防止提取共享数据(框916)。处理器核不会向存储子系统发出读取访问请求。
101.在一实施方案中,处理器核将表500的字段520中的更新值与表500的字段514中的阈值进行比较。如果达到了来自线程组的读取请求的阈值数目(条件框914的“是”分支),然后处理器核重置计数(框918)。处理器核利用单个读取访问请求来提取共享数据(框920)。例如,处理器核将先前用广播标识符和位掩码中的一个或多个描述的单个读取访问请求发送给存储器子系统。当从存储器子系统返回共享数据时,处理器核基于诸如掩码之类的广播特性将共享数据广播至对应的计算单元(框922)。之后,方法900的控制流程返回到条件框904,在此处理器核确定是否发生了对共享数据的存储器访问。
102.在各个实施方式中,软件应用程序的程序指令用于实现先前描述的方法和/或机制。程序指令以高级编程语言(例如c语言)描述硬件的行为。或者,使用硬件设计语言(hdl),例如verilog。程序指令存储在非暂时性计算机可读存储介质上。可以使用多种类型的存储介质。在使用期间,计算系统可访问该存储介质,以将程序指令和附带的数据提供给计算系统以执行程序。该计算系统包括至少一个或多个存储器以及执行程序指令的一个或多个处理器。
103.应该强调的是,上述实施方式仅是实现方式的非限制性示例。一旦完全理解上述公开,许多变化和修改对于本领域技术人员将变得显而易见。目的是将以下权利要求解释为包含所有这样的变化和修改。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1