一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

使用处理元件阵列的转置运算的制作方法

2022-02-22 10:58:49 来源:中国专利 TAG:

使用处理元件阵列的转置运算


背景技术:

1.加速器是优化用于执行计算的集成电路装置(例如,神经网络计算),否则可以由通用处理器执行。将存储在计算系统的主存储器中的数据复制或映射到加速器内的存储器位置中,以使得能够更快地存取数据以由加速器的执行引擎执行计算。在一些情况下,基于要由执行引擎执行的计算,可以利用加速器的架构来提高计算速度。
附图说明
2.将参考附图描述根据本公开的各个实施例,在附图中:
3.图1是展示了根据本公开的各方面的编译器可以在其上执行的主机系统的实例的框图;
4.图2是展示了根据本公开的各方面的集成电路装置的实例的框图;
5.图3是展示了根据本公开的各方面的使用处理元件阵列运算来转置矩阵的过程的简化实例的图;
6.图4是展示了根据本公开的各方面的张量转置运算的一般化实例的图;
7.图5是展示了根据本公开的各方面的用于对分解的张量块执行转置运算的方法的实例的流程图;
8.图6是展示了根据本公开的各方面的加速引擎的实例的框图;
9.图7包含展示了根据本公开的各方面的主机系统的实例的框图;并且
10.图8包含根据本公开的各方面的示例网络的图。
具体实施方式
11.加速引擎可以包含一个或多个加速器以使用处理引擎阵列来执行计算。处理引擎阵列可以执行复杂的计算,如矩阵乘法计算或其它计算。加速器还可以包含存储器子系统。存储器子系统可以包含一个或多个存储数据的缓冲存储器,例如,要由处理引擎阵列处理的神经网络权重和数据,以及由处理引擎阵列执行的计算的中间和/或最终结果。
12.对于各种处理引擎阵列计算,呈张量形式的数据可以从主机存储器(如,动态随机存取存储器(dram))中检索并且存储在缓冲存储器中。在实际应用中,张量中的数据元素的数量可以远大于缓冲存储器一次可以存储和/或处理引擎阵列一次能够处理的数据元素的数量。因此,张量可以被分解成多个合适大小的数据元素块,以便存储在缓冲存储器中。另外,存储在缓冲存储器中的分解的张量的数据元素的数量可能太大而使处理引擎阵列无法一次处理。因此,存储在缓冲存储器中的数据元素块可以被再次分解,以便由处理引擎阵列进行处理。
13.在一些情况下,可能需要更改张量映射到缓冲存储器的方式。例如,在不同大小的权重和输入的矩阵乘法的情况下,计算可能需要矩阵转置。执行矩阵转置运算的一种方式是将矩阵数据从缓冲存储器复制到主机存储器(如,dram)中,并且然后将矩阵数据从主机存储器写回到转置位置处的缓冲存储器中。然而,这种技术可能导致显著的外部存储器存
取延迟,并且可能需要占用主机处理器周期的主机处理器干预。为了减少处理引擎阵列执行如矩阵转置运算等计算时的延迟,可以使用内部处理引擎阵列运算来执行矩阵转置运算,而无需向主机存储器写入矩阵数据和从所述主机存储器读取矩阵数据。
14.在以下说明中,将描述各个实例。出于解释的目的,阐述了具体配置和细节,以便提供对实例的透彻理解。然而,对于本领域的技术人员来说还将显而易见的是,可以在没有具体细节的情况下实践实例。此外,可以省略或简化众所周知的特征以免混淆正在描述的实施例。
15.本公开的各方面提供了使用脉动阵列运算,对存储在加速器的缓冲存储器中的数据元素执行矩阵转置的系统和方法。编译器生成的指令可以将多维张量的数据元素分解成超过脉动阵列的维度的一组二维(2d)矩阵。可以使用恒等矩阵对所述一组2d矩阵中的每一个执行乘法累加脉动阵列运算。由编译器生成的另外的指令可能导致恒等乘法的结果要存储在缓冲存储器中作为2d矩阵中的每一个的转置。
16.图1是展示了根据本公开的各方面的如本文所描述的编译器130可以在其上执行的主机系统100的实例的框图。所展示的主机系统100是计算装置的实例,并且包含处理器102、处理器存储器104、至少一个存储装置106、各种输入/输出(i/o)装置108和至少一个网络接口110。在图1的实例中,主机系统100还包含加速引擎112,所述加速引擎是可以加速由主机系统100执行的某些运算或计算的集成电路装置。在各个实例中,主机系统100可以实施为数据中心、台式计算机、膝上型计算机、平板计算机或智能手机中的服务器,以及其它实例。在一些实例中,下文所讨论如在主机系统100中执行或包含在其内的运算或组件可以在其它计算机装置中执行或包含在其内。例如,当加速引擎112定位于不同的主机系统处时,编译器130可以在主机系统100上执行。
17.处理器102是可以以指令的形式执行程序代码的集成电路装置。程序代码可以用于各种软件应用程序或工具,如运算系统120或所展示的编译器130。当处理器102正在执行程序时,程序的指令可以存储在处理器存储器104中。指令还可以存储在其它地方,如存储在存储装置106上,并且可以在处理器102需要时加载到处理器存储器104中。处理器102还可以使用处理器存储器104,以用于临时存储处理器102运算的其它数据。在各个实例中,可替代地或另外,虽然非易失性存储器类型可以用于处理器存储器104,但处理器存储器104是易失性存储器类型,如随机存取存储器类型。
18.存储装置106是可以包含非易失性存储器的装置的实例。例如,存储装置106可以是磁盘驱动器、固态驱动器或光驱,以及其它实例。存储装置106可以进一步是非暂态的,使得当存储装置106未通电时,存储装置106上存储的程序代码和其它数据仍然存在。
19.存储装置106是外围装置的一个实例。外围装置是可以耦接到主机系统100以向主机系统100添加功能的组件。外围装置的其它实例包含输入/输出装置108和网络接口110。输入/输出装置108可以包含用户输入和输出装置,如键盘、鼠标、触摸屏、麦克风、显示屏、扬声器、打印机和扫描仪,以及其它实例。可以使用网络接口卡来实施的网络接口110可以提供对一个或多个网络的存取。网络接口110可以包含例如用于连接网络电缆和/或无线天线以与wi-fi和/或蜂窝网络通信的物理端口。网络接口110也可以被描述为i/o装置。
20.加速引擎112也是另一种类型的外围装置或i/o装置。加速引擎112是一种专门用于执行某些运算的装置,这些运算可以由处理器102执行,但是可以由加速引擎112执行得
更快。例如,加速引擎112可以是神经网络加速器,并且如此能够比由处理器102执行计算时更高效地执行神经网络的大规模并行计算。作为另一个实例,加速引擎112可以是图形处理单元(gpu),并且可以被优化以执行图形渲染所需的计算。可以由加速引擎112实施的装置的其它实例包含密码加速器、压缩和解压缩加速器、3-d加速器、正则表达式加速器、安全加速器等。
21.在各个实例中,加速引擎112可以实施程序代码以执行某些运算。例如,当加速引擎112是神经网络加速器时,加速引擎112可以被编程以执行特定的神经网络,如执行图像识别的神经网络或执行机器翻译的神经网络。作为另外的实例,为了支持神经网络的执行,加速引擎112可以被编程以执行运算,如将神经网络的数据从处理器存储器104(例如)复制到加速引擎112中,将神经网络的输入数据从处理器存储器104复制到加速引擎112中,和/或将来自加速引擎112的结果复制到处理器存储器104中,以及其它实例。
22.为了生成加速引擎112的程序代码,在各个实例中,主机系统100可以执行编译器130。通常,编译器是将以人类可读语言编写的程序代码翻译成可以由集成电路装置读取和处理的格式(例如,机器指令)的软件程序。在图1的实例中,加速引擎112是神经网络加速器,并且编译器130用于将神经网络描述编译为要由加速引擎112执行的指令。当加速引擎112实施不同类型的加速器时,可以使用另一个编译器。
23.例如,当运算系统120从输入/输出装置108接收键盘、鼠标、触摸屏、语音命令或其它输入时,编译器130可以被激活。输入可以进一步包含用于编译器130的参数,如用于编译的输入代码142和用于编译过程的配置选项。一旦编译器130被激活,处理器102可以将编译器130的指令加载到处理器存储器104中,并且可以执行指令。
24.在图1的实例中,编译器130包含第一级132、第二级136和第三级140,每个级各自执行不同的运算以产生经编译的代码144。在其它实例中,编译器130可以将第一级132、第二级136和/或第三级140的运算组合成更少的级,或者可以将所述级中的一个级的运算划分成多个级。
25.第一级132可以接收和处理输入代码142。输入代码142可以用高级编程语言描述程序,如java、c 或tensorflow以及许多其它实例。输入代码142可以描述例如执行图像识别、语音识别、机器翻译或其它运算的步骤。可以例如从存储装置106获得输入代码142。可替代地,虽然此处未展示,输入代码142可以定位于处理器存储器104中,或者可以使用网络接口110从网络位置获得。输入代码142的处理可以包含将输入代码142中所描述的运算分类成层,其中一层的输出提供到下一层的输入。处理还可以包含识别要由处理器102,而不是由加速引擎112执行的步骤。例如,通过执行驱动程序122,处理器102可能需要执行如配置直接存储器存取(dma)描述符以将数据移入加速引擎112或从所述加速引擎移出的步骤,以及其它实例。
26.第一级132的输出134可以被组织例如在神经网络的层、节点和节点之间的连接中。第二级136可以对此输出134执行中间处理。例如,在任何一层中或在层中的任何一个节点处执行的运算对于加速引擎112来说可能太多而无法同时执行。加速引擎112可以例如具有用于计算所需的数据的有限数量的区域存储空间,或者计算可以比加速引擎112一次能够执行的计算更多。在此实例中,第一级132可以将层或节点的运算分解成更小的运算,所述运算可以适合加速引擎的本地存储器和/或可以适合加速引擎112的计算能力。对第一级
132的输出134进行的处理可以包含其它步骤,如调度或确定加速引擎112和/或处理器102将执行运算的顺序,以及其它实例。
27.在各个实例中,第二级136的输出138包含要由加速引擎112的组件按照要执行的步骤的顺序执行的各个步骤。输出138可以表示为例如数据流程图,其中图中的节点表示存储器运算、计算和其它运算,并且节点之间的边缘或连接表示节点之间的依赖性,如数据依赖性、内存依赖性或运算依赖性,以及其它实例。
28.第三级140可以对第二级136的输出138进行运算,并且在产生要由加速引擎112执行的指令之前执行各个步骤。这些步骤可以包含例如去除冗余依赖性、通过将同步指令插入到代码中来解决或处理节点之间的依赖性、标识存储器使用或存储器带宽使用中的可能优化以及其它运算。在一些实例中,第三级140可以包含数据调度器150。
29.第三级140的输出是经编译的代码144,所述经编译的代码可以包含二进制格式的机器指令。在一些实例中,经编译的代码144可以存储在处理器存储器104中。可替代地或另外,经编译的代码144可以复制到存储装置106或复制到网络位置。如上所述,加速引擎112可以定位于不同的主机系统处,在这种情况下,经编译的代码144可以通过网络接口110发送到另一个主机系统。
30.在图1的实例中,主机系统100可以执行管理加速引擎112的驱动程序122,所述驱动程序也可以被称为装置驱动程序或运行时间驱动程序。驱动程序122可以提供对主机系统100(或另一主机系统)执行的应用程序与加速引擎112之间的接口。例如,驱动程序122可以提供应用程序接口(api),所述api定义用于将输入数据馈送到加速引擎112并且定义对输入数据执行的运算的功能。在此实例和其它实例中,驱动程序122可以配置加速引擎112来执行运算。例如,驱动程序122可以标识加速引擎112要执行的神经网络,以及针对神经网络的经编译的代码144在处理器存储器104中或存储装置106上的位置。驱动程序122可以进一步加载到加速引擎112中或使加速引擎112加载经编译的代码144,可以加载或使加速引擎112加载神经网络将要运算的输入数据,和/或可以使加速引擎112执行输入数据。一旦加速引擎112已经完成,加速引擎112可以通知驱动程序122,并且驱动程序122可以将结果递送回请求结果的应用程序。
31.图2是展示了根据本公开的各方面的集成电路装置的实例的框图,所述集成电路装置可以包含用于将张量重新映射到状态缓冲器的处理引擎阵列。图2的实例展示了加速器202。在各个实例中,对于一组输入数据(如输入数据250),加速器202可以使用处理引擎阵列210、激活引擎216和/或池化引擎218来执行计算。在一些实例中,示例加速器202可以是处理器的集成电路组件,如神经网络处理器。处理器可以具有其它集成电路组件,包含另外的加速器引擎。
32.在各个实施方案中,存储器子系统204可以包含多个存储体214。在这些实施方案中,每个存储体214可以是可独立存取的,这意味着一个存储体的读取不依赖于另一个存储体的读取。类似地,写入到一个存储体不会影响或限制写入到不同的存储体。在一些情况下,可以同时读取和写入每个存储体。可以使用各种技术来具有可独立存取的存储体214。例如,每个存储体可以是地址空间是单独的并且独立于每个其它存储体的地址空间的物理上分离的存储器组件。在此实例中,每个存储体可以具有至少一个读取通道,并且可以具有至少一个可以同时使用的单独的写入通道。在这些实例中,存储器子系统204可以允许同时
对多个存储体的读取通道或写入通道进行存取。作为另一个实例,存储器子系统204可以包含仲裁逻辑,使得例如多个存储体214的输出之间的仲裁可以产生使用多于一个存储体的输出。在这些和其它实例中,虽然由存储器子系统204全局管理,但是每个存储体可以独立于任何其它存储体进行运算。
33.使存储体214可独立存取可以提高加速器202的效率。例如,可以同时读取多个值,并且将其提供给处理引擎阵列210的每一行,使得整个处理引擎阵列210可以在一个时钟周期内使用。作为另一个实例,可以在将由处理引擎阵列210计算的结果写入到存储器子系统204的同时读取存储体214。相比之下,单个存储器可能一次只能服务一次读取或写入。在单个存储器的情况下,在可以启动处理引擎阵列210之前,例如对于读取处理引擎阵列210的每一行的输入数据,可能需要多个时钟周期。
34.在各个实施方案中,存储器子系统204可以被配置成同时服务多个客户端,包含处理引擎阵列210、激活引擎216、池化引擎218和通过通信结构220对存储器子系统204进行存取的任何外部客户端。在一些实施方案中,能够服务多个客户端可以意味着存储器子系统204的存储体至少与客户端一样多。在一些情况下,处理引擎阵列210的每一行都可以算作单独的客户端。在一些情况下,处理引擎阵列210的每一列都可以输出结果,使得每一列都可以算作单独的写入客户端。在一些情况下,来自处理引擎阵列210的输出可以被写入到存储体214中,然后可以随后为处理引擎阵列210提供输入数据。作为另一个实例,激活引擎216和池化引擎218可以包含多个执行通道,所述执行通道中的每个执行通道可以是单独的存储器客户端。可以例如使用静态随机存取存储器(sram)来实施存储体214。
35.在各个实施方案中,存储器子系统204可以包含控制逻辑。控制逻辑可以例如跟踪存储体214中的每个存储体的地址空间,标识要从其读取或向其写入的存储体214,和/或存储体214之间移动数据。在一些实施方案中,存储体214可以硬连线到特定客户端。例如,可以将一组存储体214硬连线以向处理引擎阵列210的行提供值,其中一个存储体服务于每一行。作为另一个实例,一组存储体可以硬连线以从处理引擎阵列210的列接收值,其中一个存储体接收每一列的数据。
36.处理引擎阵列210是示例加速器202的计算矩阵。处理引擎阵列210可以例如执行并行集成、卷积、相关性和/或矩阵乘法等。处理引擎阵列210包含按行和列排列的多个处理引擎211,使得由一个处理引擎211输出的结果可以直接输入到另一个处理引擎211中。因此,不位于处理引擎阵列210的外边缘上的处理引擎211可以从其它处理引擎211而不是从存储器子系统204接收数据以进行运算。
37.在各个实例中,处理引擎阵列210使用脉动执行,在所述脉动执行中,数据以规则间隔从不同方向到达每个处理引擎211。在一些实例中,输入数据可以从左侧流入处理引擎阵列210并且可以在顶部加载权重值。在一些实例中,权重和输入数据可以从左侧流动,并且部分总和可以从上到下流动。在这些和其它实例中,乘法和累加运算以对角波前移动通过处理引擎阵列210,其中数据跨阵列向右和向下移动。控制信号可以和权值同时输入到左侧处,并且可以与计算一起流过并向下流动。
38.在各个实施方案中,处理引擎阵列210中的列数确定处理引擎阵列210的计算能力,并且行数确定实现处理引擎阵列210的最大利用所需的存储器带宽。处理引擎阵列210可以例如具有64列和428行,或一些其它数量的列和行。
39.在图2中以插图展示了处理引擎211的实例。如此实例所展示的,处理引擎211可以包含乘法器-累加器电路。来自左侧的输入可以包含例如输入数据i和权重值w,其中输入数据是从一组输入数据或一组中间结果中获取的值,并且权重值来自将神经网络的一层连接到下一层的一组权重值。一组输入数据可以是例如提交用于标识或对象识别的图像、提供用于语音识别的音频剪辑、用于自然语言处理或机器翻译的文本字符串,或者需要分析以确定下一步移动的游戏的当前状态等。在一些实例中,将输入数据和权重值向右输出,以用于输入到下一个处理引擎211。
40.在所展示的实例中,来自上面的输入可以包含部分和p_in,其由另一个处理引擎211或由处理引擎阵列210的前一轮计算提供。当开始对一组新输入数据进行计算时,处理引擎阵列210的顶行可以接收p_in的固定值,如0。如此实例所展示的,i和w相乘,并且结果与p_in求和以产生新的部分和p_out,所述p_out可以输入到另一个处理引擎211中。处理引擎211的各个其它实施方案是可能的。
41.来自处理引擎阵列210中的最后一行的输出可以临时存储在结果缓冲器212中。结果可以是中间结果,可以将所述中间结果写入到存储体214,以提供给处理引擎阵列210用于另外的计算。可替代地,结果可以是最终结果,一旦将其写入到存储体214,就可以通过通信结构220从存储器子系统204读取,所述最终结果要由系统输出。
42.在一些实施方案中,加速器202包含激活引擎216。在这些实施方案中,激活引擎216可以将来自处理引擎阵列210的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可以将来自多个通道的卷积求和以产生单个通道的输出激活。在其它实例中,可能需要将来自处理引擎阵列210中的一列或多列的结果累加以为神经网络中的单个节点产生输出激活。在一些实例中,可以绕过激活引擎216。
43.在各个实例中,激活引擎216可以包含多个单独的执行通道。在这些实例中,执行通道可以对应于处理引擎阵列210的列,并且可以对列的输出执行运算,其结果可以存储在存储器子系统204中。在这些实例中,激活引擎216可以能够执行介于1次与n次之间的并行计算,其中n等于处理引擎阵列210中的列数。在一些情况下,可以同时执行计算中的一种或多种计算。每个执行通道可以执行的计算的实例包含指数、平方、平方根、恒等式、二进制阶跃、双极阶跃、s形和斜坡,以及其它实例。
44.在一些实施方案中,加速器202可以包含池化引擎218。池化是处理引擎阵列210的列的输出的组合。组合可以包含例如计算最大值、最小值、平均值、中值、求和、乘法或另一逻辑或数学组合。在各个实例中,池化引擎218可以包含多个执行通道,所述多个执行通道可以对处理引擎阵列210的对应列的值进行运算。在这些实例中,池化引擎218可以能够执行介于1次与n次之间的并行计算,其中n等于处理引擎阵列210中的列数。在各个实例中,池化引擎218的执行通道可以并行和/或同时进行运算。在一些实例中,可以绕过池化引擎218。
45.在本文中,激活引擎216和池化引擎218可以统称为执行引擎。处理引擎阵列210是执行引擎的另一个实例。执行引擎的另一个实例是直接存储器存取(dma)引擎,其可以定位于加速器202之外。
46.输入数据250可以通过通信结构220到达。通信结构220可以将加速器202连接到处理器的其它组件,如可以从输入/输出(i/o)装置、存储驱动器或网络接口获得输入数据250
的dma引擎。输入数据250可以是例如一维数据,如字符串或数字序列,或二维数据,如图像的像素值阵列或音频信号随时间的频率值和振幅值。在一些实例中,输入数据250可以是三维的,如可以是例如由自动驾驶汽车使用的情境信息或虚拟现实数据的情况。在一些实施方案中,存储器子系统204可以包含用于输入数据250的单独的缓冲器。在一些实施方案中,当加速器202接收到输入数据250时,输入数据250可以存储在存储体214中。
47.在一些实例中,加速器202可以实施神经网络处理引擎。在这些实例中,对于一组输入数据250,加速器202可以执行神经网络以执行神经网络针对其训练的任务。对一组输入数据执行神经网络可以被称为推理或执行推理。
48.神经网络的权重可以与神经网络将执行运算的输入数据250一起存储在存储器子系统204中。神经网络还可以包含指令,所述指令可以对处理引擎阵列210进行编程,以便对权重和输入数据执行各种计算。指令也可以存储在存储器子系统204、存储体214或单独的指令缓冲器中。处理引擎阵列210可以输出中间结果,所述中间结果表示神经网络的各个层的输出。在一些情况下,激活引擎216和/或池化引擎218可以被启用以进行神经网络的某些层所要求的计算。加速器202可以将中间结果存储在存储器子系统204中,以用于输入到处理引擎阵列210中以计算神经网络下一层的结果。处理引擎阵列210可以进一步从神经网络的最后一层输出最终结果。最终结果可以存储在存储器子系统204中,并且然后复制到主机处理器存储器或另一个位置。
49.加速器202可以使用处理引擎阵列来执行计算,例如,脉动阵列。处理引擎阵列可以使用脉动执行,在所述脉动执行中,数据以规则间隔从不同方向到达处理引擎阵列的每个处理引擎。例如,参考图2,输入数据可以从左侧流入到处理引擎阵列中(如,通过数据总线),并且权重值可以从顶部加载(如,通过不同的数据总线)。处理引擎阵列在本文中也可以被称为处理元件阵列。处理元件阵列可以具有固定大小,例如,128行乘以64列的处理元件或另一大小的阵列。处理元件阵列可以执行如矩阵乘法和/或其它计算等计算。
50.加速器还可以包含集成电路上的存储器子系统(本文中也称为片上存储器)。片上存储器可以包含存储数据的缓冲存储器,例如,如图2所展示的状态缓冲器。缓冲存储器可以存储数据,例如,神经网络权重和要由处理元件阵列处理的数据,以及由处理元件阵列执行的计算的中间和/或最终结果。缓冲存储器可以具有固定大小,例如,128行乘以128列的存储器元素或另一大小的阵列。缓冲存储器的分区可以被定义为缓冲存储器的一行。因此,具有128行的缓冲存储器可以具有128个分区,每个分区的元素数量等于缓冲存储器中的列数。每个分区是存储器的独立于缓冲存储器的其它部分的逻辑部分。
51.对于各种处理元件阵列计算,呈张量形式的数据可以从主机存储器(如,动态随机存取存储器(dram))中检索并且存储在缓冲存储器中。张量是多维阵列。二维(2d)矩阵可以被认为是简单的张量,但通常,张量可以具有任何数量的维度。当处理元件阵列加载数据以执行计算时,将张量存储在加速器的缓冲存储器中以减少延迟。
52.在实际应用中,张量中的数据元素的数量可以远大于一次可以存储在缓冲存储器中的数据元素的数量。在这种情况下,编译器可能导致张量被分解成较小的数据元素块,其大小小于或等于缓冲存储器的维度。例如,其中缓冲存储器的维度是p行乘以q列,张量的维度是m行乘以n列,其中m》p并且n》q,所述张量可以由编译器分解成k个数据元素块,其中块数k由等式1给出:
53.k=[(m-1)//128 1]
·
[(n-1)//128 1]
ꢀꢀꢀ
(1)
[0054]
其中“//”表示整数或向下取整除法。编译器可以将分解的张量的每个数据元素块映射到缓冲存储器的p个分区(即,行),每个分区中有q个数据元素。
[0055]
存储在缓冲存储器中的分解的张量块中的数据元素的数量可以大于处理元件阵列一次能够处理的数据元素的数量。例如,缓冲存储器的大小可以为128行乘以128列,而处理元件阵列的大小可以为128行乘以64列。在这种情况下,编译器可以进一步将数据块分解成两个128行乘以64列的数据子块。每个子块可以分别加载到处理元件阵列中并且由所述处理元件阵列处理。
[0056]
在一些情况下,例如,当处理元件阵列计算的中间结果存储在缓冲存储器中时,需要改变张量映射到缓冲存储器的方式以供后续计算使用。例如,可能需要转置矩阵之一中的数据元素以执行矩阵乘法。根据本公开的各方面,可以通过使用处理元件阵列运算来改变张量(如,矩阵)映射到缓冲存储器的方式来提高计算过程的速度。使用处理阵列元素运算可以避免由于以下而导致的延迟问题:将数据从缓冲存储器上传到主机存储器,并且然后以适当映射的形式将数据重新加载到缓冲存储器。
[0057]
作为实例,形状为m行、n列的2d张量(即,矩阵)a可以映射到具有p《m行和q《n列的缓冲存储器。如上文所描述的,为了使矩阵a成为矩阵乘法的左运算数(如,a
×
b=c),矩阵a可以分解成k个数据元素块。然后,可以将每个块映射到跨p个分区的缓冲存储器,每个分区中有q个元素。在矩阵a需要转置(即,a
t
)以成为矩阵乘法的左运算数的情况下,每个块k可以被转置,使得每个块映射到跨q个分区的缓冲存储器,每个分区中有p个元素。矩阵a可以是例如存储回缓冲存储器的来自处理元件阵列的先前计算的结果。
[0058]
图3是展示了根据本公开的各方面的使用处理元件阵列运算来转置矩阵的过程的简化实例的图。矩阵转置运算可以由加速器执行(如,图2中的加速器202)。在图3中,为了便于解释,展示了使用方阵的实例,然而,矩阵转置运算不限于方阵。应当理解,虽然本发明实例是用2d矩阵来解释的,但2d矩阵可以是更大的分解的多维张量的数据元素块或子块。
[0059]
参考图3,形成2d矩阵a 311的分解的张量的数据元素可以映射到缓冲存储器中的位置,例如,状态缓冲器310。状态缓冲器310可以是用于加速器的片上存储器。在图3的实例中,矩阵a 311的数据元素可以映射到状态缓冲器310的分区0-3 312。状态缓冲器310的每个分区312可以是存储器的独立于其它部分的逻辑部分。在图3中,状态缓冲器310的每个分区312可以是状态缓冲器310的一行,其列数等于状态缓冲器310的列维度。矩阵a 311的数据元素1、2、3和4可以映射到状态缓冲器310的从第一地址(如,地址0)开始的分区0。矩阵a 311的数据元素5-8可以映射到状态缓冲器310的分区1,矩阵a 311的数据元素9-12可以映射到状态缓冲器310的分区2,并且矩阵a 311的数据元素13-16可以映射到状态缓冲器310的分区3。存储在状态缓冲器310中的分解的张量的数据元素可以是例如神经网络权重,所述神经网络权重是来自由pe阵列320执行的先前计算的结果。
[0060]
存储在状态缓冲器310中的矩阵a 311的数据元素1-16可以加载到pe阵列320中。pe阵列320是脉动阵列,并且数据元素1-16可以作为权重加载到脉动阵列中。参考图2,数据元素1-16可以从顶部加载到pe阵列中(如,通过第一数据总线)。由编译器生成的指令,例如加载权重指令可以使数据元素中的每个数据元素按顺序加载到pe阵列320中的不同处理元件中。来自状态缓冲器310中的每个分区312的数据元素可以加载到pe阵列320的对应行中。
例如,状态缓冲器310的分区0中的数据元素1-4可以加载到pe阵列320的行0,状态缓冲器310的分区1中的数据元素5-8可以加载到pe阵列320的行1,状态缓冲器310的分区2中的数据元素9-12可以加载到pe阵列320的行2,并且状态缓冲器310的分区3中的数据元素13-16可以加载到pe阵列320的行3。因此,矩阵a 311的数据元素1-16可以以与其存储在状态缓冲器310中相同的行-列格式加载到pe阵列320中,其中pe阵列320的每一行中的数据元素对应于状态缓冲器310中的分区。
[0061]
在矩阵a 311的数据元素(例如,权重)加载到pe阵列320的处理元件中之后,可以使用恒等矩阵330由脉动阵列执行矩阵乘法运算。矩阵乘法运算可以将恒等矩阵的列中的数据元素与pe阵列元素的列中的权重逐元素相乘,并且将乘法的结果累加(即,求和)。恒等矩阵330也可以存储在状态缓冲器310中。可替代地,恒等矩阵330可以由编译器从存储在状态缓冲器310中的“0”数据元素和“1”数据元素构建。恒等矩阵330可以从左侧流入到pe阵列320中(如,通过第二数据总线)。
[0062]
在以下描述中应注意,仅为了解释方便,为psum缓冲器340标识行0 341到行3 344。为psum缓冲器340标识的行0 341到行3 344与状态缓冲器310中的行分区不对应。在恒等矩阵330从状态缓冲器310通过第二数据总线流入到pe阵列320中时,在脉动阵列的第一周期期间,恒等矩阵330的列3 334将乘以pe阵列320的列0 322,并且在结果缓冲器(如,psum缓冲器)340中对乘法的结果求和(即,累加)。pe阵列320的列0 321中的第一元素(例如,权重)将乘以恒等矩阵330的列3 334中的第一元素,列0 321pe阵列320中的第二元素将乘以恒等矩阵330的列3 334中的第二元素,列0 321pe阵列320中的第三元素将乘以恒等矩阵330的列3 334中的第三元素,列0 321pe阵列320中的第四元素将乘以恒等矩阵330的列3 334中的第四元素,并且将在psum缓冲器340的分区0在行0 341处对乘法的结果求和。psum缓冲器340的分区可以按列排列而不是像状态缓冲器310中那样按行排列。psum缓冲器340的分区可以对应于脉动阵列pe阵列320的列。由于恒等矩阵330的列3 334中的第一元素是“1”并且其余元素是“0”,因此存储在psum缓冲器340中的分区0的行0 341中的乘法的总和将是1。
[0063]
在脉动阵列的第二周期期间,恒等矩阵330的列3 334将乘以pe阵列320的列1 322,并且恒等矩阵的列2 333将乘以pe阵列320的列0 321,并且可以在psum缓冲器中对乘法的结果求和(即,累加)。pe阵列320的列1 322中的第一元素将乘以恒等矩阵330的列3 334中的第一元素,pe阵列320的列1 322中的第二元素将乘以恒等矩阵330的列3 334中的第二元素,pe阵列320的列1 322中的第三元素将乘以恒等矩阵330的列3 334中的第三元素,列1 322pe阵列320中的第四元素将乘以恒等矩阵330的列3 334中的第四元素,并且将在psum缓冲器340的分区1的行0 341中对乘法的结果求和。由于恒等矩阵330的列3 334中的第一元素是“1”并且其余元素是“0”,因此存储在psum缓冲器340中的分区1的行0 341中的乘法的总和将是2。
[0064]
类似地,在脉动阵列的第二周期期间,pe阵列320的列0 321中的第一元素将乘以恒等矩阵330的列2 333中的第一元素,pe阵列320的列0 321中的第二元素将乘以恒等矩阵330的列2 333中的第二元素,pe阵列320的列0 321中的第三元素将乘以恒等矩阵330的列2 333中的第三元素,pe阵列320的列0 321中的第四元素将乘以恒等矩阵330的列2 333中的第四元素,并且将在psum缓冲器340中的分区0的行1 342中对乘法的结果求和。由于恒等矩
333中的第三元素,pe阵列320的列2 323中的第四元素将乘以恒等矩阵330的列2 333中的第四元素,并且将在psum缓冲器340中的分区2的行1 342中对乘法的结果求和。由于恒等矩阵330的列2 333中的第二元素是“1”并且其余元素是“0”,因此存储在psum缓冲器340中的分区2的行1 342中的乘法的总和将是7。
[0072]
此外,在脉动阵列的第四周期期间,pe阵列320的列1 322中的第一元素将乘以恒等矩阵330的列1 332中的第一元素,pe阵列320的列1 322中的第二元素将乘以恒等矩阵330的列1 332中的第二元素,pe阵列320的列1 322中的第三元素将乘以恒等矩阵330的列1 332中的第三元素,pe阵列320的列1 322中的第四元素将乘以恒等矩阵330的列1 332中的第四元素,并且将在psum缓冲器340中的分区1的行2 343中对乘法的结果求和。由于恒等矩阵330的列1 332中的第三元素是“1”并且其余元素是“0”,因此存储在psum缓冲器340中的分区1的行2 343中的乘法的总和将是10。
[0073]
最后,在脉动阵列的第四周期期间,pe阵列320的列0 321中的第一元素将乘以恒等矩阵330的列0 331中的第一元素,pe阵列320的列0 321中的第二元素将乘以恒等矩阵330的列0 331中的第二元素,pe阵列320的列0 321中的第三元素将乘以恒等矩阵330的列0 331中的第三元素,pe阵列320的列0 321中的第四元素将乘以恒等矩阵330的列0 331中的第四元素,并且将在psum缓冲器340中的分区-0的行3 344中对乘法的结果求和。由于恒等矩阵330的列0 331中的第四元素是“1”并且其余元素是“0”,因此存储在psum缓冲器340中的分区0的行3 344中的乘法的总和将是13。
[0074]
所述过程继续进行恒等矩阵330跨pe阵列320传播,直到恒等矩阵330的所有列都乘以pe阵列320中的所有数据元素列(例如,权重),从而产生显示在psum缓冲器340中的值。在psum缓冲器340的列分区0-3中累加的数据元素可以例如通过激活引擎(图2中的元素216)或池化引擎(图2中的元素218)传送回状态缓冲器310。
[0075]
加速器硬件配置能够将数据元素从psum缓冲器340中的列分区346映射到状态缓冲器310的行分区314。当psum缓冲器340中的数据元素传送到状态缓冲器310时,可以将psum缓冲器340中的列分区0到列分区3 346中的数据元素分别映射到在状态缓冲器310的第二地址处(例如,地址n)的行分区0到行分区3 314中。因此,状态缓冲器310的行分区0含有数据元素1、5、9和13(来自psum缓冲器340的列分区0),状态缓冲器310的行分区1含有数据元素2、6、10和14(来自psum缓冲器340的列分区1),状态缓冲器310的行分区2含有数据元素3、7、11和15(来自psum缓冲器340的列分区2),并且状态缓冲器310的行分区3含有数据元素4、8、12和16(来自psum缓冲器340的列分区3)。因此,矩阵a 311可以重新映射到状态缓冲器310中作为转置矩阵a
t
314。
[0076]
图4是展示了根据本公开的各方面的张量转置运算的一般化实例的图。在此实例中,分解的张量的数据元素块具有128行
×
64列的维度,并且被转置成具有64行
×
128列维度的数据元素块。在图4中,分解的张量410的块410可以从第一存储器地址(例如,地址0)处开始存储在加速器(例如,图2中的加速器202)的片上缓冲存储器420中。存储在缓冲存储器420中的分解的张量块410的数据元素可以是例如神经网络权重,所述神经网络权重是来自由脉动阵列430执行的先前计算的结果。分解的张量块410的数据元素可以映射到缓冲存储器420的128行(即,128个分区422)中,其中每一行具有64个元素(即,64列)。因此,分解的张量块410可以占据缓冲存储器420的128行(即,行0-127)乘以64列(即,列0-63)。分解的张量
444相乘的乘积累加将仅产生数据元素a
1,0
。累加的乘积(即,a
1,0
)可以存储在结果缓冲器450中的分区0的行1 454处。随着乘法累加运算随每个处理周期期间移动通过脉动阵列430,脉动阵列430的执行乘法-累加运算的每一列的累加乘积存储在与脉动阵列430的特定列相对应的分区中的后续行中。例如,在脉动阵列430的第一处理周期期间,累加乘积a
0,0
存储在结果缓冲器450的分区0的行0中,在脉动阵列430的第二处理周期期间,累加乘积a
1,0
存储在结果缓冲器450的分区0的行1中,依此类推。
[0082]
在脉动阵列430的最后一个处理周期期间,脉动阵列430的列63 436中的数据元素乘以恒等矩阵440的列0 446中的元素。由于所有其它乘积为0,因此乘法的累加乘积仅产生a
127,63
,并且累加乘积a
127,63
存储在结果缓冲器450中的分区63的行127 456中。因此,使用脉动阵列430的乘法累加运算,将加载到脉动阵列430的处理元件中的分解的张量410的块410的数据元素以与其加载到脉动阵列430中的相同的行/列排列方式传送到结果缓冲器450,但是分区按列排列而不是按行排列。
[0083]
一旦将分解的张量块410的数据元素存储在结果缓冲器450的列分区458中,编译器生成的指令可以使数据元素a
0,0-a
127,63
通过加速器的另一个硬件执行引擎,例如池化引擎或激活引擎从第二存储器地址(例如,地址n)处开始传送回缓冲存储器420。加速器的硬件可以被配置成使得结果缓冲器450中的列分区458映射到缓冲存储器420的行分区422。例如,从缓冲存储器420中的地址n处开始,分解的张量块410的数据元素a
0,0
可以映射到分区0 423的列0 424,分解的张量块410的数据元素a
1,0
可以映射到分区0 423的列1 426,依此类推,直到分解的张量块410的数据元素a
127,0
可以映射到缓冲存储器420的分区0 423的列127 428。
[0084]
类似地,分解的张量块410的数据元素a
0,63
可以映射到分区63 427的列0 424,分解的张量块410的数据元素a
1,63
可以映射到分区63 427的列1 426,依此类推,直到分解的张量块410的数据元素a
127,63
可以映射到缓冲存储器420的分区63 427的列127 428。因此,使用脉动阵列430的乘法-累加运算,最初映射到缓冲存储器420的具有64列的128行分区中的分解的张量块410可以在缓冲存储器420中转置成映射到具有128列的64行分区的张量块。
[0085]
在一些实施方案中,在累加乘积(即,分解的张量块410的数据元素)跨结果缓冲器450中所有列分区填充一行时,编译器可以生成指令以将每个列分区中的一个数据元素映射到缓冲存储器中的由编译器确定的对应的行分区。在一些实施方案中,在所有累加乘积(即,分解的张量块410的所有数据元素)已经存储在结果缓冲器450的列分区中之后,编译器可以生成指令以将结果缓冲器450的每个列分区中的所有数据元素映射到缓冲存储器420中的由编译器确定的对应的行分区。
[0086]
图5是展示了根据本公开的各方面的用于对分解的张量块执行转置运算的方法500的实例的流程图。这些方法可以由上述系统实施,例如,图1所展示的编译器和图2所展示的加速器。
[0087]
参考图5,在块510处,编译器可以接收程序代码以使得执行引擎执行一组运算。例如,程序代码可以使执行引擎的各个元素(如,脉动阵列、缓冲存储器、结果缓冲器等)执行数据处理运算。
[0088]
在块515处,可以确定数据处理运算包含矩阵转置运算。在一些实施方案中,为了
执行矩阵转置运算,可能需要将多维张量分解成维度与执行引擎的缓冲存储器的维度兼容的更小的数据元素块。
[0089]
在块520处,编译器可以生成用于使执行引擎执行数据处理运算的指令。例如,编译器可以生成一组指令以将多维张量分解成维度与缓冲存储器的维度兼容的数据元素块,并且使执行引擎(即,加速器)对分解的多维张量块执行矩阵转置运算。编译器还可以生成指令以使用恒等矩阵乘法实施矩阵转置运算。
[0090]
从块525处开始,可以执行由编译器生成的指令。多维张量可以分解成更小的数据元素块。张量可以是最初存储在主机存储器(例如,dram)中的多维张量。在实际应用中,张量中的数据元素的数量可以远大于一次可以存储在集成电路,例如加速器中的缓冲存储器中的数据元素的数量。编译器可以生成指令以将张量分解成大小与缓冲存储器兼容的较小块。例如,其中缓冲存储器的维度是p行乘以q列,张量的维度是m行乘以n列,其中m》p并且n》q,所述张量可以通过编译器生成的指令分解成k个块,其中块数k由上文的等式1给出。在一些情况下,数据元素块可以是存储在缓冲存储器中的先前计算的结果。
[0091]
在块530处,分解的张量的一个或多个块可以映射到缓冲存储器的行分区中。缓冲存储器可以被配置成具有与缓冲存储器中的存储行相对应的分区。每个分区是存储器的独立于缓冲存储器的其它部分的逻辑部分。例如,缓冲存储器的维度可以为128行乘以128列。缓冲存储器的每一行可以是一个分区,并且每个分区可以包含128列。具有相同或更小维度的分解的张量块可以映射到缓冲存储器中。
[0092]
在块535处,分解的张量块可以从缓冲存储器加载到脉动阵列中。在一些情况下,存储在缓冲存储器中的分解的张量块中的数据元素的数量可以大于处理元件阵列一次能够处理的数据元素的数量。例如,缓冲存储器的大小可以为128行乘以128列,而处理元件阵列的大小可以为128行乘以64列。在这种情况下,编译器可以生成指令以进一步将数据块分解成两个128行乘以64列的数据子块。
[0093]
分解的张量块或子块的数据元素可以通过编译器生成的指令通过第一数据总线加载到脉动阵列的处理元件中,以使得在一次运算中加载分解的张量块的所有数据元素。分解的张量块的每个数据元素可以加载到脉动阵列的不同处理元件中,使得脉动阵列中的数据元素的行/列位置对应于如最初存储在缓冲存储器中的数据元素的行/列位置。因此,缓冲存储器的每一行(即,分区)中的数据元素可以加载到脉动阵列的对应行中。
[0094]
在块540处,可以对恒等矩阵执行矩阵乘法运算,并且在结果缓冲器中将乘积累加。对于每个处理周期,在恒等矩阵在第二数据总线上流入脉动阵列中时,脉动阵列可以在恒等矩阵的一列或多列与存储在脉动阵列的处理元件中的一列或多列数据元素之间执行乘法。由于恒等矩阵的每一列只在一个位置含有“1”,并且在所有其它位置含有0,列乘法可能只产生一个非零乘积,所述乘积是与恒等矩阵的列中的“1”位置相对应的数据元素。
[0095]
在块545处,将累加乘积存储在结果缓冲器的列分区中。结果缓冲器的分区可以按列排列,而不是像在缓冲存储器中那样按行排列。结果缓冲器的每个列分区可以对应于脉动阵列的一列。随着乘法累加运算随每个处理周期期间移动通过脉动阵列,脉动阵列的执行乘法-累加运算的每一列的累加乘积存储在与脉动阵列的特定列相对应的分区中的后续行中。
[0096]
例如,参考图4,在脉动阵列的第一处理周期期间,脉动阵列中的数据元素的列0乘
以恒等矩阵的列127的累加乘积可以是数据元素a
0,0
。数据元素a
0,0
可以存储在结果缓冲器中的分区0的行0中。在脉动阵列的第二处理周期期间,脉动阵列的列1中的数据元素乘以恒等矩阵的列127中的元素,并且脉动阵列的列0中的数据元素乘以恒等矩阵的列126中的元素。由于所有其它乘积是0,脉动阵列的列1与恒等矩阵的列127相乘的乘积累加将仅产生数据元素a
0,1
,。累积的乘积(即,a
0,1
)可以存储在结果缓冲器中的分区1的行0处。由于所有其它乘积为0,脉动阵列的列0与恒等矩阵的列126相乘的乘积累加将仅产生数据元素a
1,0
。累加的乘积(即,a
1,0
)可以存储结果缓冲器中的分区0的行1处。所述过程可以继续进行直到恒等矩阵的所有列都传播通过,并且乘以脉动阵列中的所有数据元素列。使用脉动阵列的乘法累加运算,将加载到脉动阵列的处理元件中的分解的张量块的数据元素以与其加载到脉动阵列中相同的行/列排列方式传送到结果缓冲器,但是在分区按列排列而不是按行排列。
[0097]
返回图5,在块550处,所存储的乘积可以从结果缓冲器的列分区的映射到缓冲存储器的行分区。一旦将分解的张量块的数据元素存储在结果缓冲器的列分区中,编译器生成的指令可以使数据元素通过加速器的另一个硬件执行引擎,例如池化引擎或激活引擎从第二存储器地址(如地址n)处开始映射回缓冲存储器。加速器的硬件可以被配置成使得将结果缓冲器中的列分区转置成缓冲存储器的行分区。因此,使用脉动阵列的乘法累加运算,最初存储在缓冲存储器中的具有64列的128行分区的分解的张量块可以在缓冲存储器中转置成具有128列的64行分区的张量块。
[0098]
在一些实施方案中,在结果缓冲器中的每个分区变满时,即,数据元素占据列分区中的所有行时,编译器可以生成指令以将列分区中的数据元素映射到缓冲存储器中的由编译器确定的行分区。通过在如上文所描述的执行引擎内使用恒等矩阵乘法运算来实施矩阵转置运算,可以在不必将数据写入到主机存储器(例如,dram)和从主机存储器读回数据的情况下执行矩阵转置运算。换言之,使用上述技术,可以在执行矩阵转置运算时绕过主机存储器。因此,与需要使用主机存储器的实施方案相比,可以减少执行矩阵转置运算的计算时间。此外,矩阵转置运算可以在执行引擎内进行,以释放主机处理器的处理周期。
[0099]
应当理解,图5所展示的具体步骤提供了根据实施例的用于对分解的张量块执行转置运算的特定方法。根据替代性实施例,也可以执行其它步骤顺序。例如,替代性实施例可以以不同的顺序执行上文概述的步骤。此外,图5中展示的各个步骤可以包含多个子步骤,可以按照适合于各个步骤的各种顺序来执行所述子步骤。此外,取决于特定的应用,可以添加或去除另外的步骤。本领域的技术人员将认识到很多变化、修改和替代方案。
[0100]
用于对分解的张量块执行转置运算的方法可以在本领域技术人员已知的非暂时性计算机可读介质上具体化,已经在其中存储了包含用于使处理器、计算机或其它可编程装置执行方法的运算的计算机可执行指令的程序。
[0101]
图6是展示了根据本公开的各方面的加速引擎600的实例的框图。加速引擎600是可以包含一个或多个加速器602a-602n的集成电路的实例,所述加速器可以类似于图2所展示的加速器。
[0102]
在图6的实例中,加速引擎600包含多个加速器602a-602n,加速器中的每个加速器可以执行一组运算。在各个实例中,加速器602a-602n用于特定类型的运算,使得加速器602a-602n可以比由通用处理器执行类似运算时快得多的速度执行这些运算。在各个实例中,为了执行一组运算,要对其执行运算的输入数据必须首先移动到加速器602a-602n中。
另外,在一些情况下,程序代码也被移动到加速器602a-602n中,所述程序代码对加速器602a-602n将对数据执行的运算进行编程。在所展示的实例中,加速引擎600包含n个加速器602a-602n。可以包含在加速引擎600中的加速器的实例包含图形加速器、浮点加速器、神经网络加速器等。在各个实例中,加速器602a-602n可以各自相同(例如,每个都是图形加速器)或可以不同(例如,加速器602a-602n包含图形加速器、浮点加速器和神经网络加速器)。
[0103]
示例加速引擎600进一步包含与外部存储器通信的dram控制器642a-642k。在此实例中,外部存储器是使用dram 630实施的。在所展示的实例中,加速引擎600包含k个dram控制器642a-642k,其中每个dram控制器可以能够与一组独立的dram存取体通信。在其它实例中,其它类型的ram技术可以用于外部存储器。dram控制器642a-642k也可以被称为存储器控制器。
[0104]
在各个实例中,加速器602a-602n的输入数据和/或程序代码可以存储在dram 630中。不同的程序可以使加速器602a-602n执行不同的运算。例如,当其中一个加速器是神经网络加速器时,一个程序可以将神经网络加速器配置成执行语音识别,而另一个程序可以将神经网络加速器配置成执行图像识别。在各个实例中,不同的加速器602a-602n可以用不同的程序进行编程,使得每个加速器执行不同的一组运算。在各个实例中,处理器648a-648s可以管理程序代码从dram 630到加速器602a-602n的移动。
[0105]
示例加速引擎600进一步包含与系统中的i/o装置632通信的i/o控制器644a-644p。加速引擎600可以通过例如处理器总线与i/o装置通信。在一些实例中,处理器总线可以使用外围组件互连(pci)和/或pci总线协议的变体来实施。处理器总线可以将加速引擎600连接到i/o装置,例如,输入和输出装置、存储器控制器、存储装置和/或网络接口卡等。在一些实例中,i/o控制器644-644p可以使加速引擎600充当主机处理器的i/o装置。例如,加速引擎600可以是来自主机处理器的输入数据和指示要对输入数据执行的运算(例如,特定计算或分析)的命令的接收者。在所展示的实例中,加速引擎600包含p i/o控制器644a-644p,每个控制器可以包含单独的根复合体并且可以与一组单独的i/o装置632通信。在其它实例中,如超路径互连(upi)等其它标准化总线协议可以用于主机总线。在其它实例中,可以使用专有总线协议。
[0106]
加速引擎600中的数据移动可以由一个或多个处理器648a-648s管理,所述处理器也可以被称为数据管理处理器。在图6的实例中,加速引擎600包含并入到装置中(例如,在同一硅片上)的s个处理器648a-648s。在其它实例中,处理器648a-648s可以在加速引擎600的外部(如,在不同的管芯上和/或在不同的封装体中)。在一些实例中,处理器648a-648s可以管理数据从i/o装置632到加速器602a-602n或dram 630的移动。例如,输入数据可以定位于i/o装置632处或定位于处理器存储器中,并且处理器648a-648s可以将输入从i/o装置632或处理器存储器移动到加速器或dram 630中。作为另一个实例,加速器602a-602n的程序代码可以定位于i/o装置632上或定位于处理器存储器中。
[0107]
示例加速引擎600进一步包含可以在加速器602a-602n、dram控制器642a-642k和i/o控制器644a-644p之间移动数据的dma引擎646a-646d。在所展示的实例中,加速引擎600包含d个dma引擎646a-646d。在一些实施方案中,dma引擎646a-646d可以分配有特定任务,如将数据从dram控制器642a-642d移动到加速器602a-602n,或在i/o控制器644a-644p与加速器602a-602n之间移动数据。例如,可以通过将描述符与dma引擎646a-646d排队来分配这
些任务,其中描述符标识数据块的地址和要执行的运算(例如,读取或写入)。例如,描述符可以管理dma引擎以指导dma控制器从dram 630读取数据块。作为另外的实例,描述符可以指示dma引擎将由dma控制器读取的数据写入到加速器。另外的描述符可以用于将数据从加速器移动到dram 630。
[0108]
在各个实例中,处理器648a-648s中的每个处理器可以负责管理不同加速器的数据移动。在一些实例中,处理器可以管理多于一个加速器的数据移动。类似地,在各个实例中,处理器648a-648s中的每个处理器可以被分配给一个或多个dma引擎646a-646d。在这些和其它实例中,处理器648a-648s、加速器602a-602n和dma引擎646a-646d之间的关联由每个相应处理器执行的程序代码确定。
[0109]
在示例加速引擎600中,各个组件可以通过芯片互连件620进行通信。芯片互连件620主要包含在加速引擎600的组件之间用于路由数据的布线。在一些情况下,芯片互连件620可以包含最少量的逻辑,如控制数据方向的多路复用器、用于处理时钟域交叉的触发器和时序逻辑。
[0110]
图7包含展示根据本公开的各方面的主机系统700的实例的框图,其中在主机系统中可以使用加速引擎760。图7的加速引擎760是可以包含如图6所展示的一个或多个加速器的装置的实例。图7的示例主机系统700包含加速引擎760、主机处理器772、dram 730或处理器存储器、i/o装置732和支持系统774。在各个实施方案中,主机系统700可以包含此处未展示的其它硬件。
[0111]
主机处理器772是能够执行程序指令的通用集成电路。在一些实例中,主机处理器772可以包含多个处理核。多核处理器可以在同一处理器内包含多个处理单元。在一些实例中,主机系统700可以包含多于一个主机处理器772。在一些实例中,主机处理器772和加速引擎760可以是一个芯片,如同一封装体内的一个或多个集成电路。
[0112]
在各个实例中,主机处理器772可以通过一个或多个通信信道与主机系统700中的其它组件通信。例如,主机系统700可以包含主机处理器总线,主机处理器772可以使用例如所述主机处理器总线与dram 730通信。作为另一个实例,主机系统700可以包含i/o总线,如基于pci的总线,主机处理器772可以通过例如所述i/o总线与加速引擎760和/或i/o装置732通信。在各个实例中,可替代地或另外,主机系统700可以包含其它通信通道或总线,如串行总线、电源管理总线、存储装置总线等。
[0113]
在一些实例中,对主机处理器772执行的软件程序可以接收或生成要由加速引擎760处理的输入。在一些实例中,程序可以选择合适的神经网络来执行给定输入。例如,程序可以用于语言翻译,并且可以选择一个或多个能够进行语音识别和/或机器翻译的神经网络。在这些和其它实例中,程序可以用神经网络配置加速引擎760来执行,和/或可以在加速引擎760上选择先前被配置成执行期望神经网络的神经网络处理引擎。在一些实例中,一旦加速引擎760开始对输入数据进行推断,主机处理器772就可以管理数据(如权重、指令、中间结果、条件层的结果和/或最终结果)移入到加速引擎760中或从所述加速引擎移出。
[0114]
在一些实例中,使用加速引擎760进行推断的软件程序可以从来自加速引擎760的条件层和/或从如dram 730中的存储位置读取结果。在这些实例中,程序可以确定神经网络接下来应该采取什么行动。例如,程序可以决定终止推断。作为另一个实例,程序可以确定改变推断的方向,所述程序可以由较低级别的代码和/或神经网络处理器翻译到下一层来
执行。在这些和其它实例中,神经网络的执行流程可以通过软件进行协调。
[0115]
dram 730是由主机处理器772使用的存储器,以用于存储主机处理器772正在执行的程序代码以及要运算的值。在一些实例中,神经网络的数据(例如,权重值、指令和其它数据)可以全部或部分存储在dram 730中。dram是处理器存储器的通用术语,并且虽然dram是易失性存储器,但处理器存储器可以是易失性和/或非易失性的。虽然此处未展示,主机系统700可以包含用于其它目的的其它易失性存储器和非易失性存储器。例如,主机系统700可以包含只读存储器(rom),其存储在通电时引导主机系统700的引导代码和/或基本输入/输出系统(bios)代码。
[0116]
虽然此处未展示,dram 730可以存储各种程序的指令,所述指令可以加载到主机处理器772中并且由其执行。例如,dram 730可以存储用于运算系统、一个或多个数据存储区、一个或多个应用程序、一个或多个驱动程序和/或用于实施本文所公开的特征的服务的指令。
[0117]
运算系统可以管理和编排主机系统700的整体运算,如调度任务、执行应用程序,和/或控制器外围装置的整体运算以及其它运算。在一些实例中,主机系统700可以托管一个或多个虚拟机。在这些实例中,每个虚拟机可以被配置成执行其自身的运算系统。运算系统的实例包含unix、linux、windows、mac os、ios、android等。可替代地或另外,运算系统可以是专有运算系统。
[0118]
数据存储区可以包含由运算系统、应用程序或驱动程序使用和/或运算的永久数据或临时数据。此类数据的实例包含网页、视频数据、音频数据、图像、用户数据等。在一些实例中,数据存储区中的信息可以通过网络提供给用户装置。在一些情况下,数据存储区可以另外或可替代地包含所存储的应用程序和/或驱动程序。另外或可替代地,数据存储区可以存储标准和/或专有软件库,和/或标准和/或专有应用程序用户接口(api)库。存储在数据存储区中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
[0119]
驱动程序可以包含提供主机系统700中的组件之间的通信的程序。例如,一些驱动程序可以提供运算系统与外围装置或i/o装置732之间的通信。可替代地或另外,一些驱动程序可以提供应用程序与运算系统之间的通信,和/或主机系统700可存取的应用程序与外围装置之间的通信。在许多情况下,驱动程序可以包含提供易于理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态装置驱动程序等)。在其它情况下,驱动程序可以提供专有或专门的功能。
[0120]
i/o装置732可以包含连接到用户输入和输出装置的硬件,如键盘、鼠标、笔、平板电脑、语音输入装置、触摸输入装置、显示器或监测器、扬声器和打印机,以及其它装置。i/o装置732还可以包含用于连接到网络780的存储驱动器和/或网络接口。例如,在各个实例中,主机系统700可以使用网络接口与存储装置、用户终端、其它计算装置或服务器和/或其它网络进行通信。
[0121]
在各个实例中,i/o装置732中的一个或多个i/o装置可以是存储装置。在这些实例中,存储装置包含非易失性存储器,并且可以存储程序指令和/或数据。存储装置的实例包含磁存储设备、光盘、固态盘、闪速存储器和/或磁带存储设备等。存储装置可以与主机系统700容纳在同一机架中或者可以位于外置硬盘盒中。存储装置可以是固定的(例如,通过螺钉连接)或可移除的(例如,具有物理释放机构和可能的热插拔机构)。
[0122]
存储装置、dram 730和主机系统700中的任何其它存储器组件是计算机可读存储介质的实例。计算机可读存储介质是能够以可以由如主机处理器772等装置读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可以在介质未通电时保留其上存储的数据。非暂时性计算机可读介质的实例包含rom装置、磁盘、磁带、光盘、闪存装置和固态驱动器等。如本文所使用的,计算机可读存储介质不包含计算机可读通信介质。
[0123]
在各个实例中,存储在计算机可读存储介质上的数据可以包含程序指令、数据结构、程序模块、库、其它软件程序组件、和/或可以在数据信号内传输的其它数据,如载波或其它传输。另外或可替代地,计算机可读存储介质可以包含文档、图像、视频、音频和可以通过使用软件程序运算或操纵的其它数据。
[0124]
在各个实例中,i/o装置732中的一个或多个i/o装置可以是基于pci的装置。在这些实例中,基于pci的i/o装置包含与主机系统700通信的pci接口。术语“pci”或“基于pci”可以用于描述pci总线协议家族中的任何协议,包含原始pci标准、pci-x、加速图形端口(agp)和pci-express(pcie)或任何其它基于本文所讨论的pci协议的改进或派生协议。基于pci的协议是用于将如本地外围装置等装置连接到主机装置的标准总线协议。标准总线协议是其规范已被各种制造商定义和采用的数据传输协议。制造商确保兼容装置与实施总线协议的计算系统兼容,并且反之亦然。如本文所使用的,基于pci的装置还包含使用快速非易失性存储器(nvme)进行通信的装置。nvme是用于对连接到使用pcie的计算系统的非易失性存储介质进行存取的装置接口规范。
[0125]
基于pci的装置可以包含一个或多个功能。“功能”描述了可以由基于pci的装置提供的运算的硬件和/或软件。功能的实例包含大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密与解密控制器等。在一些情况下,基于pci的装置可以包含多于一个功能。例如,基于pci的装置可以提供大容量存储控制器和网络适配器。作为另一个实例,基于pci的装置可以提供两个存储控制器,以控制两个不同的存储资源。在一些实施方案中,基于pci的装置可以具有至多八个功能。
[0126]
在一些实例中,基于pci的装置可以包含单根i/o虚拟化(sr-iov)。sr-iov是可以包含在基于pci的装置中的扩展功能。sr-iov允许物理资源(例如,单个网络接口控制器)显示为多个虚拟资源(例如,六十四个网络接口控制器)。因此,提供某种功能的基于pci装置(例如,网络接口控制器)对于使用基于pci装置的装置来说,可能看起来是提供相同功能的多个装置。支持sr-iov的存储适配器装置的功能可以分类为物理功能(pf)或虚拟功能(vf)。物理功能是指装置中的可以发现、管理和操纵的功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置相同的配置地址空间和存储器地址空间。物理功能可以具有多个与之相关的虚拟功能。虚拟功能与物理功能类似,但是属于轻量级功能,通常可能缺乏配置资源,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以分配给在主机装置上运行的相应执行线程(例如,虚拟机)。
[0127]
在各个实施方案中,支持系统774可以包含用于协调加速引擎760的运算的硬件。例如,支持系统774可以包含协调加速引擎760的活动的微处理器,包含在加速引擎760上四处移动的数据。在此实例中,微处理器可以是可以执行微代码的集成电路。微代码是可以使
集成电路在集成电路可以执行的运算中具有一定灵活性的程序代码,但是由于程序代码使用有限的指令组,微处理器可能具有比主机处理器772更有限的能力。在一些实例中,由微处理器执行的程序存储在微处理器的硬件上,或存储在主机系统700中的非易失性存储器芯片上。在一些实例中,微处理器和加速引擎760可以在芯片上,如在同一管芯上和同一封装体中的一个集成电路。
[0128]
在一些实例中,当对主机处理器772执行的程序请求执行神经网络时,支持系统774可以负责从主机处理器772获取指令。例如,主机处理器772可以向支持系统774提供一组输入数据和要对所述一组输入数据执行的任务。在此实例中,支持系统774可以标识可以执行任务的神经网络,并且可以对加速引擎760进行编程以对所述一组输入数据执行神经网络。在一些实例中,支持系统774只需要选择神经网络处理器的合适的神经网络处理引擎。在一些实例中,在加速引擎760可以开始执行神经网络之前,支持系统774可能需要将神经网络的数据加载到加速引擎760上。在这些和其它实例中,支持系统774可以进一步接收执行神经网络的输出,并且将输出提供回主机处理器772。
[0129]
在一些实例中,支持系统774的运算可以由主机处理器772处理。在这些实例中,支持系统774可能不需要,并且可以从主机系统700中省略。
[0130]
在各个实例中,主机系统700可以包含表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和i/o机架的组合。
[0131]
用户装置可以包含用于对应用程序(例如,网络浏览器或移动装置应用程序)进行存取的计算装置。在一些实例中,应用程序可以由计算资源服务或服务提供商托管、管理和/或提供。应用程序可以使用户能够与服务提供商计算机交互以例如对网络内容(例如,网页、音乐、视频等)进行存取。用户装置可以是计算装置,例如,移动电话、智能电话、个人数字助理(pda)、膝上型计算机、上网本计算机、台式计算机、薄型终端装置、平板计算机、电子书(e-book)阅读器、游戏机等。在一些实例中,用户装置可以通过一个或多个网络与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式作为其一部分的分布式系统的一部分。
[0132]
主机系统700还可以表示一个或多个服务提供商计算机。服务提供商计算机可以提供被配置成在用户装置上运行的本地应用程序,用户可以与所述本地应用程序交互。在一些实例中,服务提供商计算机可以提供计算资源,如但不限于客户端实体、低延迟数据存储、持久数据存储、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机也可以可操作以提供网络托管、数据库、计算机应用程序开发和/或实施平台、前述的组合等。在一些实例中,服务提供商计算机可以提供作为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可以包含一个或多个快速提供和释放的计算资源。这些计算资源可以包含计算、网络和/或存储装置。托管计算环境也可以称为云计算环境。服务提供商计算机可以包含一个或多个服务器,可能以集群的形式布置,作为服务器群,或者作为彼此不相关的单独服务器,并且可以托管应用程序和/或基于云的软件服务。这些服务器可以被配置成集成的分布式计算环境的一部分。在一些情况中,另外或可替代地,服务提供商计算机可以包含计算装置,例如,移动电话、智能电话、个人数字助理(pda)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、薄型终端装置、平板计算机、游戏机等。在一些实例中,服务提供商计算机可以与一个或多个第三方计算机通信。
[0133]
图8包含根据本公开的各方面的示例网络800的图,所述示例网络可以包含一个或多个主机系统,如图7所展示的主机系统。例如,图8的示例网络800包含多个节点802a-802h,其中所述多个节点中的一个或多个节点可以是如图7所展示的主机系统。节点802a-802h中的其它节点可以是其它计算装置,每个计算装置至少包含用于存储程序指令的存储器、用于执行指令的处理器和用于连接到网络800的网络接口。
[0134]
在各个实例中,网络800可以用于处理数据。例如,输入数据可以在节点802a-802h之一处接收或从网络800可以与其通信的其它网络808接收。在此实例中,输入数据可以被引导到包含加速引擎的网络800中的节点,以用于加速引擎运行并且生成结果。然后,可以将结果传输到接收输入数据的节点或其它网络。在各个实例中,输入数据可以从各种来源累积,包含节点802a-802h中的一个或多个节点和/或定位于其它网络808中的计算装置,并且累积的输入数据可以被引导到网络800中的一个或多个主机系统。然后,可以将来自主机系统的结果分发回收集输入数据的来源。
[0135]
在各个实例中,节点802a-802h中的一个或多个节点可以负责以下运算:如累积输入数据供主机系统运算、跟踪哪些主机系统忙碌与哪些主机系统可以接受更多工作、确定主机系统是否正确和/或最高效地进行运算、监测网络安全和/或其它管理运算。
[0136]
在图8的实例中,节点802a-802h使用具有点对点链路的交换架构彼此连接。交换架构包含多个交换机804a-804d,其可以布置在如clos网络的多层网络中。在局域网(lan)区段之间过滤和转发数据包的网络装置可以被称为交换机。交换机通常在开放系统互连(osi)参考模型的数据链路层(第2层)处进行运算,并且有时网络层(第3层)处进行运算,并且可以支持若干种数据包协议。图8的交换机804a-804d可以连接到节点802a-802h,并且提供任何两个节点之间的多条路径。
[0137]
网络800还可以包含一个或多个用于与其它网络808连接的网络装置,如路由器806。路由器使用报头和转发表来确定转发数据包的最佳路径,并且使用如互联网控制消息协议(icmp)等协议彼此通信,并且配置任何两个装置之间的最佳路由。图8的路由器806可以用于连接到其它网络808,如子网、lan、广域网(wan)和/或因特网。
[0138]
在一些实例中,网络800可以包含许多不同类型的网络中的任何一种或组合,如有线网络、互联网、无线网络、蜂窝网络和其它私有网络和/或公共网络。如果存在,互连的交换机804a-804d和路由器806可以被称为交换结构810、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“结构”和“网络”在本文中可以互换使用。
[0139]
节点802a-802h可以是表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和i/o机架的任何组合。
[0140]
用户装置可以包含用于对应用程序832(例如,网络浏览器或移动装置应用程序)进行存取的计算装置。在一些方面中,应用程序832可以由计算资源服务或服务提供商托管、管理和/或提供。应用程序832可以允许用户能够与服务提供商计算机交互以例如对网络内容(例如,网页、音乐、视频等)进行存取。用户装置可以是计算装置,例如,移动电话、智能电话、个人数字助理(pda)、膝上型计算机、上网本计算机、台式计算机、薄型终端装置、平板计算机、电子书(e-book)阅读器、游戏机等。在一些实例中,用户装置可以通过其它网络808与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式作为其一部分的分布式系统的一
部分。
[0141]
图8的节点还可以表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可以提供被配置成在用户装置上运行的本地应用程序,用户可以与所述本地应用程序交互。在一些实例中,服务提供商计算机可以提供计算资源,例如但不限于客户端实体、低延迟数据存储、持久数据存储、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机也可以可操作以向用户提供网络托管、数据库、计算机应用程序开发和/或实施平台、前述的组合等。在一些实例中,服务提供商计算机可以提供作为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可以包含一个或多个快速提供和释放的计算资源。这些计算资源可以包含计算、网络和/或存储装置。托管计算环境也可以称为云计算环境。服务提供商计算机可以包含一个或多个服务器,可能以集群的形式布置,作为服务器群,或者作为彼此不相关的单独服务器,并且可以托管应用程序832和/或基于云的软件服务。这些服务器可以被配置成集成的分布式计算环境的一部分。在一些方面中,另外或可替代地,服务提供商计算机可以包含计算装置,例如,移动电话、智能电话、个人数字助理(pda)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、薄型终端装置、平板计算机、游戏机等。在一些情况下,服务提供商计算机可以与一个或多个第三方计算机通信。
[0142]
在一种示例配置中,节点802a-802h可以包含至少一个存储器818和一个或多个处理单元(或处理器820)。处理器820可以以硬件、计算机可执行指令、固件或其组合来实施。处理器820的计算机可执行指令或固件实施方案可以包含以任何合适的编程语言编写的用于执行所描述的各种功能的计算机可执行指令或机器可执行指令。
[0143]
在一些情况下,硬件处理器820可以是单核处理器或多核处理器。多核处理器可以在同一处理器内包含多个处理单元。在一些实例中,多核处理器可以共享某些资源,如总线和二级缓存或三级缓存。在一些情况下,单核处理器或多核处理器中的每个核还可以包含多个执行逻辑处理器(或执行线程)。在此类核中(例如,具有多个逻辑处理器的核),也可以共享执行管道的若干个级以及较低级别的缓存。
[0144]
存储器818可以存储可在处理器820上加载和执行的程序指令以及在这些程序执行期间生成的数据。根据节点802a-802h的配置和类型,存储器818可以是易失性的(如ram)和/或非易失性的(如rom、闪速存储器等)。存储器818可以包含运算系统828、一个或多个数据存储区830、一个或多个应用程序832、一个或多个驱动程序834和/或用于实施本文所公开的特征的服务。
[0145]
运算系统828可以支持节点802a-802h的基本功能,如调度任务、执行应用程序和/或控制器外围装置。在一些实施方案中,服务提供商计算机可以托管一个或多个虚拟机。在这些实施方案中,每个虚拟机可以被配置成执行其自身的运算系统。运算系统的实例包含unix、linux、windows、mac os、ios、android等。运算系统828也可以是专有运算系统。
[0146]
数据存储区830可以包含由运算系统828、应用程序832或驱动程序834使用和/或运算的永久数据或临时数据。此类数据的实例包含网页、视频数据、音频数据、图像、用户数据等。在一些实施方案中,数据存储区830中的信息可以通过网络808提供给用户装置。在一些情况下,另外或可替代地,数据存储区830可以包含所存储的应用程序和/或驱动程序。另外或可替代地,数据存储区830可以存储标准和/或专有软件库,和/或标准和/或专有应用
程序用户接口(api)库。存储在数据存储区830中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
[0147]
驱动程序834包含可以在节点中的组件之间提供通信的程序。例如,一些驱动程序834可以提供运算系统828与另外的存储设备822、网络装置824和/或i/o装置826之间的通信。可替代地或另外,一些驱动程序834可以提供应用程序832与运算系统828之间的通信,和/或服务提供商计算机可存取的应用程序832与外围装置之间的通信。在许多情况下,驱动程序834可以包含提供易于理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序和固态装置驱动程序)。在其它情况下,驱动程序834可以提供专有或专门的功能。
[0148]
服务提供商计算机或服务器还可以包含另外的存储设备822,其可以包含可移除存储设备和/或不可移除存储设备。另外的存储设备822可以包含磁存储设备、光盘、固态盘、闪速存储器和/或磁带存储设备。另外的存储设备822可以与节点802a-802h容纳在同一机架中或者可以位于外置硬盘盒中。存储器818和/或另外的存储设备822及其相关联的计算机可读介质可以为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实施方案中,存储器818可以包含多种不同类型的存储器,如sram、dram或rom。
[0149]
可移除和不可移除的存储器818和另外的存储设备822为计算机可读存储介质的实例。例如,计算机可读存储介质可以包含在用于存储信息的方法或技术中实施的易失性或非易失性可移除或不可移除介质,信息包含例如计算机可读指令、数据结构、程序模块或其它数据。存储器818和另外的存储设备822是计算机存储介质的实例。可以存在于节点802a-802h中的另外类型的计算机存储介质可以包含但不限于pram、sram、dram、ram、rom、eeprom、闪速存储器或其它存储技术、cd-rom、dvd或其它光存储装置、磁带盒装置、磁带装置、磁盘存储装置或其它磁存储装置、固态驱动器或一些可以用于存储期望信息并且可以由节点802a-802h存取的其它介质。计算机可读介质还包含上述介质类型中的任何介质类型的组合,包含一种介质类型的多个单元。
[0150]
可替代地或另外,计算机可读通信介质可以包含计算机可读指令、程序模块或在数据信号内传输的其它数据,如载波或其它传输。然而,如本文所使用的,计算机可读存储介质不包含计算机可读通信介质。
[0151]
节点802a-802h还可以包含i/o装置826,如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点802a-802h还可以包含一个或多个通信信道836。通信信道836可以提供一种介质,节点802a-802h的各个组件可以通过所述介质进行通信。一个或多个通信信道836可以采用总线、环、交换结构或网络的形式。
[0152]
节点802a-802h还可以含有允许节点802a-802h与所存储的数据库、另一个计算装置或服务器、用户终端和/或网络800上的其它设备通信的网络装置824。
[0153]
在一些实施方案中,网络装置824是外围装置,如基于pci的装置。在这些实施方案中,网络装置824包含用于与主机装置通信的pci接口。术语“pci”或“基于pci”可以用于描述pci总线协议家族中的任何协议,包含原始pci标准、pci-x、加速图形端口(agp)和pci-express(pcie)或任何其它基于本文所讨论的pci协议的改进或派生协议。基于pci的协议是用于将如本地外围装置等装置连接到主机装置的标准总线协议。标准总线协议是其规范
已被各种制造商定义和采用的数据传输协议。制造商确保兼容装置与实施总线协议的计算系统兼容,并且反之亦然。如本文所使用的,基于pci的装置还包含使用快速非易失性存储器(nvme)进行通信的装置。nvme是用于对连接到使用pcie的计算系统的非易失性存储介质进行存取的装置接口规范。例如,总线接口模块可以实施nvme,并且网络装置824可以使用pcie接口连接到计算系统。
[0154]
基于pci的装置可以包含一个或多个功能。“功能”描述可以由网络装置824提供的运算。功能的实例包含大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密与解密控制器等。在一些情况下,基于pci的装置可以包含多于一个功能。例如,基于pci的装置可以提供大容量存储控制器和网络适配器。作为另一个实例,基于pci的装置可以提供两个存储控制器,以控制两个不同的存储资源。在一些实施方案中,基于pci的装置可以具有至多八个功能。
[0155]
在一些实施方案中,网络装置824可以包含单根i/o虚拟化(sr-iov)。sr-iov是可以包含在基于pci的装置中的扩展功能。sr-iov允许物理资源(例如,单个网络接口控制器)显示为多个资源(例如,六十四个网络接口控制器)。因此,提供某种功能的基于pci装置(例如,网络接口控制器)对于使用基于pci装置的装置来说,可能看起来是提供相同功能的多个装置。支持sr-iov的存储适配器装置的功能可以分类为物理功能(pf)或虚拟功能(vf)。物理功能是指装置中的可以发现、管理和操纵的功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置相同的配置地址空间和存储器地址空间。物理功能可以具有多个与之相关的虚拟功能。虚拟功能与物理功能类似,但是属于轻量级功能,通常可能缺乏配置资源,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以分配给在主机装置上运行的相应执行线程(例如,虚拟机)。
[0156]
可以鉴于以下条款描述本公开的实施例:
[0157]
条款1.一种用于使用处理元件阵列运算来转置张量的方法,所述方法包括:
[0158]
将所述张量的数据元素块映射到集成电路的状态缓冲器的多个行分区,每个行分区具有多列;
[0159]
将所述数据元素加载到所述集成电路的处理元件阵列中的对应的处理元件行和列中;
[0160]
使用恒等矩阵执行一系列乘法运算,使得所述恒等矩阵的每一列依次与所述处理元件阵列中的每一数据元素列相乘;
[0161]
在每次乘法运算之后,对所述处理元件阵列的每一列与所述恒等矩阵的一列进行乘法运算所得的乘积求和;
[0162]
将针对执行乘法运算的所述处理元件阵列的每一列的求和的乘积存储在结果缓冲器的对应列分区中,所述结果缓冲器的列分区的数量与所述处理元件阵列中的列数相同,其中将用于后续乘法运算的所述求和的乘积存储在每个对应列分区的后续行中,并且其中所述结果缓冲器的行数与所述处理元件阵列的行数相同;以及
[0163]
将存储在所述结果缓冲器中的所述列分区中的所述求和的乘积加载到所述状态缓冲器中的对应数量的行分区。
[0164]
条款2.根据条款13所述的方法,其进一步包括将所述张量分解成多个数据元素块,每个数据元素块的大小对应于所述状态缓冲器的大小。
[0165]
条款3.根据前述条款中任一项所述的方法,其中存储在所述结果缓冲器中的每个求和的乘积对应于存储在所述处理元件阵列中的所述数据元素之一。
[0166]
条款4.根据前述条款中任一项所述的方法,其中在将所述张量的所述数据元素块加载到所述处理元件阵列中时,对所述结果缓冲器的所述列分区中的所述乘积求和在所述结果缓冲器中的相同行位置和相同列位置中再现所述数据元素块。
[0167]
条款5.一种计算机实施的方法,其包括:
[0168]
由编译器接收要由执行引擎执行的一组运算;
[0169]
由所述编译器确定所述一组运算包含对张量执行矩阵转置运算;
[0170]
由所述编译器将所述矩阵转置运算转换为恒等矩阵乘法运算;以及
[0171]
由所述编译器生成一组指令,所述一组指令能操作以通过以下来转置所述张量:将所述张量的数据元素从所述执行引擎的缓冲存储器加载到所述执行引擎的脉动阵列中;对所述脉动阵列中的所述数据元素执行恒等乘法;将所述恒等乘法的结果存储在所述执行引擎的结果缓冲器中;并且将所述结果从所述结果缓冲器加载到所述缓冲存储器中。
[0172]
条款6.根据条款5所述的计算机实施的方法,其中加载所述张量的所述数据元素包括响应于所述一组指令中的第一指令而通过第一数据总线将所述数据元素加载到所述脉动阵列中。
[0173]
条款7.根据条款5或6所述的计算机实施的方法,其中执行所述恒等乘法包括通过所述一组指令中的第二指令在所述脉动阵列的每个处理周期期间通过第二数据总线将恒等矩阵的列从所述缓冲存储器一次一列地传播到所述脉动阵列中。
[0174]
条款8.根据条款5到7中任一项所述的计算机实施的方法,其中所述结果缓冲器包括一组列分区,并且所述结果缓冲器中的每个列分区对应于所述脉动阵列中的一列处理元件。
[0175]
条款9.根据条款5到8中任一项所述的计算机实施的方法,其中:
[0176]
所述缓冲存储器包括一组行分区,并且
[0177]
所述一组指令中的第一指令将所述结果缓冲器中的每个列分区映射到所述缓冲存储器的行分区。
[0178]
条款10.根据条款5到9中任一项所述的计算机实施的方法,其中所述恒等乘法包括将存储在所述脉动阵列的一组处理元件列中的每一列中的所述张量的数据元素乘以恒等矩阵的每一列,并且
[0179]
其中所述张量的一列数据元素与所述恒等矩阵的一列相乘生成至多一个非零值。
[0180]
条款11.根据条款5到10中任一项所述的计算机实施的方法,其中所述将所述恒等乘法的所述结果存储在所述结果缓冲器中包括对来自由所述脉动阵列执行的每一列乘法的乘积求和,并且
[0181]
其中每个求和的乘积的值等于所述张量的与所述恒等矩阵的所述列中的非零元素相对应的数据元素。
[0182]
条款12.根据条款5到11中任一项所述的计算机实施的方法,其中在将所述张量的所述数据元素加载到所述执行引擎中时,将所述恒等乘法的所述结果存储在所述结果缓冲器中在所述结果缓冲器中的相同行位置和相同列位置中再现所述数据元素。
[0183]
条款13.根据条款5到12中任一项所述的计算机实施的方法,其进一步包括:
[0184]
在转置所述张量之前,通过由所述编译器生成的所述一组指令将所述张量分解成所述张量的维度不超过所述缓冲存储器的维度的数据元素块;以及
[0185]
将数据元素块存储在所述缓冲存储器中。
[0186]
条款14.根据条款5到13中任一项所述的计算机实施的方法,其中所述计算机实施的方法进一步包括:
[0187]
通过由所述编译器生成的所述一组指令将存储在所述缓冲存储器中的所述张量的所述数据元素块分解成维度不超过所述脉动阵列的维度的数据元素子块;以及
[0188]
将数据元素子块加载到所述脉动阵列中。
[0189]
条款15.根据条款5到14中任一项所述的计算机实施的方法,其中:
[0190]
所述缓冲存储器包括一组行,
[0191]
所述缓冲存储器的每一行包括分区,
[0192]
将所述张量的所述子块中的所述数据元素映射到所述缓冲存储器中的所述分区,并且
[0193]
将存储在所述缓冲存储器中的每个分区中的所述数据元素加载到所述脉动阵列中的对应行中。
[0194]
条款16.根据条款5到15中任一项所述的计算机实施的方法,其中所述张量的所述数据元素是由所述执行引擎执行的计算的中间结果。
[0195]
条款17.一种非暂时性计算机可读介质,其中存储有指令,所述指令在由一个或多个处理器执行时使得所述一个或多个处理器执行编译器,所述编译器执行包含以下的运算:
[0196]
接收要由执行引擎执行的一组运算;
[0197]
确定所述一组运算包含对张量执行矩阵转置运算;
[0198]
将所述矩阵转置运算转换为恒等矩阵乘法运算;以及
[0199]
生成一组指令,所述一组指令能操作以通过以下来转置所述张量:将所述张量的数据元素从所述执行引擎的缓冲存储器加载到所述执行引擎的脉动阵列中;对所述脉动阵列中的所述数据元素执行恒等乘法;将所述恒等乘法的结果存储在所述执行引擎的结果缓冲器中;并且将所述结果从所述结果缓冲器加载到所述缓冲存储器中。
[0200]
条款18.根据条款17所述的非暂时性计算机可读介质,其中所述结果缓冲器包括一组列分区,并且所述结果缓冲器中的每个列分区对应于所述脉动阵列中的一列处理元件;
[0201]
所述缓冲存储器包括一组行分区,并且
[0202]
所述一组指令中的第一指令将所述结果缓冲器中的每个列分区映射到所述缓冲存储器的行分区。
[0203]
条款19.根据条款17或18所述的非暂时性计算机可读介质,其进一步包含指令,所述指令在由所述一个或多个处理器执行时使得所述编译器执行包含以下的运算:
[0204]
在转置所述张量之前,将所述张量分解成所述张量的维度不超过所述缓冲存储器的维度的数据元素块;以及
[0205]
将数据元素块存储在所述缓冲存储器中。
[0206]
条款20.根据条款17到19中任一项所述的非暂时性计算机可读介质,其进一步包
含指令,所述指令在由所述一个或多个处理器执行时使得所述编译器执行包含以下的运算:
[0207]
将存储在所述缓冲存储器中的所述张量的所述数据元素块分解成维度不超过所述脉动阵列的维度的数据元素子块;以及
[0208]
将数据元素子块加载到所述脉动阵列中。
[0209]
条款21.一种集成电路装置,其包括:
[0210]
状态缓冲器;
[0211]
处理元件阵列,所述处理元件阵列耦接到所述状态缓冲器;以及
[0212]
结果缓冲器,所述结果缓冲器耦接到所述处理元件阵列,
[0213]
其中所述集成电路装置被配置成:
[0214]
将张量的数据元素块接收到集成电路的所述状态缓冲器的多个行分区,每个行分区具有多列;
[0215]
将所述数据元素加载到所述集成电路的所述处理元件阵列中的对应处理元件行和列中;
[0216]
使用恒等矩阵执行一系列乘法运算,使得所述恒等矩阵的每一列依次与所述处理元件阵列中的每一数据元素列相乘;
[0217]
在每次乘法运算之后,对所述处理元件阵列的每一列与所述恒等矩阵的一列执行乘法运算所得的乘积求和;
[0218]
将针对执行乘法运算的所述处理元件阵列的每一列的求和的乘积存储在结果缓冲器的对应列分区中,所述结果缓冲器的列分区的数量与所述处理元件阵列中的列数相同,其中将用于后续乘法运算的所述求和的乘积存储在每个对应列分区的后续行中,并且其中所述结果缓冲器的行数与所述处理元件阵列的行数相同;并且
[0219]
将存储在所述结果缓冲器中的所述列分区中的所述求和的乘积加载到所述状态缓冲器中的对应数量的行分区。
[0220]
条款22.根据条款21所述的集成电路装置,其中存储在所述结果缓冲器中的每个求和的乘积对应于存储在所述处理元件阵列中的所述数据元素之一。
[0221]
条款23.根据条款21或22所述的集成电路装置,其中在将所述张量的所述数据元素块加载到所述处理元件阵列中时,对所述结果缓冲器的所述列分区中的所述乘积求和在所述结果缓冲器中的相同行位置和相同列位置中再现所述数据元素块。
[0222]
本文所描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以在非暂时性计算机可读介质上具体化并且由本文所描述的计算机系统中的任何计算机系统的处理器处理。应注意,所描述的过程和架构可以在任何用户交互之前实时或以异步模式执行。可以以前述附图中建议的方式配置模块,和/或本文所描述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文所描述的模块功能可以分布在多个模块之上。
[0223]
因此,说明书和附图应该被视为说明性的而非限制性的。然而,显而易见的是,在不脱离权利要求中所阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。
[0224]
其它变型处于本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替
代构造,但是其某些展示的实例在附图中示出并且已经在上文中进行了详细描述。然而,应该理解的是,并非旨在将本公开限制于所公开的一种或多种具体形式,而是相反,其目的在于涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等同物。
[0225]
除非本文中另外指明或明显与上下文相矛盾,否则在描述所公开的实例的上下文中(特别是在以下权利要求的上下文中)使用的术语“一个/一种(a/an)”和“所述(the)”以及类似的指代词应被解释为涵盖单数和复数两者。术语“包括(comprising)”、“具有(having)”、“包含(including)”以及“含有(containing)”应被解释为开放式术语(即,意指“包含但不限于”),除非另外指明。术语“连接”应被解释为部分或全部地包含在内、附接到或接合在一起,即使在存在中间物的情况下也是如此。除非本文中另有指示,否则对本文中的值的范围的叙述仅旨在用作单独地提及落入所述范围内的每个单独值的速记方法,并且每个单独值并入本说明书中,如同所述单独值在本文中单独地叙述一样。除非本文中另有指示或明显与上下文相矛盾,否则本文所述的所有方法均可以以任何合适的顺序执行。除非另外声明,否则本文所提供的任何和所有实例或示例性语言(例如,“如”)的使用仅旨在更好地说明本公开的实例,而不对本公开的范围构成限制。本说明书中的任何语言都不应解释为将任何未要求保护的元件指示为是实践本公开必不可少的。
[0226]
除非另有明确说明,否则如短语“x、y或z中的至少一个”等析取语言旨在在如通常用于表达项、术语等可以是x、y或z或其任何组合(例如,x、y和/或z)的上下文中进行理解。因此,此类析取语言通常不旨在并且不应暗示某些实例要求x中的至少一个、y中的至少一个或z中的至少一个各自都存在。
[0227]
本文中描述了本公开的各个实例,包含诸位发明人已知的用于实施本公开的最佳模式。在阅读上述说明之后,本领域普通技术人员可以清楚这些实例的变型。诸位发明人预期技术人员可以在适当时采用此类变型,并且诸位发明人旨在使本公开以与本文具体描述的方式不同的其它方式来进行实践。因此,在适用法律允许的情况下,本公开包含所附权利要求书中叙述的主题的所有修改和等同物。此外,除非本文另有指示或明显与上下文相矛盾,否则本公开涵盖上述要素在其所有可能变型中的任何组合。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献