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

具有可重构指令集的硬件加速器的制作方法

2022-07-16 21:27:52 来源:中国专利 TAG:

具有可重构指令集的硬件加速器


背景技术:

1.人工神经网络是具有基于生物神经网络的架构的计算系统。可以使用训练数据对人工神经网络进行训练,以了解如何针对应用进行某个计算任务。
2.硬件加速器,如神经网络处理器可以通过进行与人工神经网络相关联的各种操作来实施人工神经网络。操作可以包含例如计算操作、存储器存取操作等。硬件加速器通常包含被具体配置成进行和加速这些操作的硬件组件。通常,这些硬件组件可通过指令进行编程,以支持例如不同的神经网络拓扑、神经网络的不同应用等。
附图说明
3.将参考附图描述根据本公开的各个实施例,在附图中:
4.图1展示了使用本文所公开的技术处理数据的分类器装置的实例;
5.图2a-2d是展示了根据本公开的某些方面的使用本文所公开的技术的预测模型和计算的简化框图;
6.图3展示了在计算环境中的神经网络操作的示例序列;
7.图4a-4d展示了根据本公开的某些方面的示例神经网络处理器和其操作;
8.图5a-5d展示了图4a-4d的神经网络处理器的内部组件的实例;
9.图6展示了根据本公开的某些方面的各种形式的指令模式程序;
10.图7a-7c展示了根据本公开的某些方面的由图4a-4d的神经网络处理器支持的不同存储器存取模式的指令的实例;
11.图8a和图8b展示了根据本公开的某些方面的在硬件加速器处进行计算的示例方法;
12.图9包含根据本公开的某些方面的可以使用图4a-4d的神经网络处理器的主机系统的框图;并且
13.图10包含示例网络的图。
具体实施方式
14.本公开的实例涉及硬件加速器,并且更具体地涉及具有可重构指令集的神经网络硬件加速器。
15.硬件加速器,如神经网络处理器可以通过进行与人工神经网络相关联的各种操作来实施人工神经网络。所述操作可以包含计算操作,例如卷积操作、后处理操作,如池化、激活函数处理等,以及支持这些计算操作的存储器存取操作。硬件加速器通常包含被具体配置成进行和/或加速这些操作的硬件组件。例如,硬件加速器可以包含被具体设计成进行某些算术操作(例如,卷积操作)的电路、被具体设计成进行某些池化操作的电路、被具体设计成进行某些激活函数处理操作的电路、被具体设计成进行存储器存取操作、计算操作等的电路。
16.这些硬件组件通常可通过指令进行编程以支持不同的神经网络拓扑和/或用于神
经网络的不同应用。指令可以包含例如输入数据的指示和要由硬件加速器执行的卷积操作的权重、激活函数和/或池化操作的选择、用于控制不同神经网络层之间的数据流的存储器存取操作等。硬件组件可以从指令中提取此信息,并且基于所提取的信息进行操作。
17.硬件组件所支持的指令集可以形成指令集。指令集还具有预定义的指令模式,所述指令模式定义了指令集的每个指令中的操作码和各个操作数的位偏移和位大小。操作码可以定义要进行的具体操作(例如,卷积操作、激活函数处理、池化操作、存储器存取操作等),以及那些操作的操作数(例如,输入数据和权重、要由存储器存取操作存取的地址等)。硬件组件可以基于预定义的指令模式从指令中提取操作码和操作数,并且基于所提取的操作码和操作数进行操作。
18.指令集中的指令可以定义硬件加速器所支持的一系列操作,并且指令集可以定义硬件加速器所支持的一系列神经网络拓扑和其应用。然而,随着神经网络拓扑和其应用的发展,可能需要新操作来支持这些新的拓扑和应用。仅支持固定指令集的硬件加速器可能无法支持那些新操作,并且无法支持新的神经网络拓扑和/或新应用。
19.本公开的实例涉及硬件加速器,并且更具体地涉及具有可重构指令集的神经网络硬件加速器。神经网络硬件加速器包含可编程硬件指令解码器、可编程指令模式映射表、硬件执行引擎和控制器。硬件指令解码器可以进行编程以存储多个操作码与所述操作码的位长度和位偏移的多个定义之间的第一映射。指令模式映射表可以进行编程以存储多个操作码与指令的包含所述操作码的操作数的位偏移和位长度的多个定义之间的第二映射。控制器可以将第一指令转发到硬件指令解码器和执行引擎中的每一个。硬件指令解码器可以基于第一映射从第一指令中找到第一操作码,并将第一操作码输出到指令模式映射表。指令模式映射表可以基于第二映射和第一操作码将操作数的位偏移和位长度的第一定义输出到执行引擎。执行引擎可以基于第一定义从第一指令中提取第一操作数,并且基于第一操作数进行操作。
20.硬件指令解码器和指令模式映射表两者均可以基于指令模式程序进行编程。指令模式程序可以定义硬件加速器所支持的指令集,并且可以定义操作码的位偏移和位长度以及指令集中的每个指令的一个或多个操作数。指令集的操作码在指令之间可以具有相同的位长度或不同的位长度。例如,操作码中的一些操作码可以具有一个字节或更短的位长度,而操作码中的另一些操作码可以具有多于一个字节的位长度。此外,操作码中的一些操作码可以跨越指令的两个或更多个字节。此外,指令之间的操作数的位偏移和位长度还可以不同。此类布置可以在针对不同的指令分配操作码和操作数以支持不同的操作方面提供灵活性,这进而可以增加硬件加速器所支持的指令和操作的数量。
21.存储在硬件指令解码器和指令模式映射表中的操作码和操作数的定义可以对应于硬件加速器所支持的指令集。为了使硬件加速器能够支持指令集中未定义的操作,可以根据第二指令模式程序对硬件指令解码器和指令模式映射表进行编程以存储操作码和操作数的不同定义。
22.硬件加速器可以包含多个执行引擎以进行神经网络的不同类型的操作。执行引擎可以包含例如进行算术操作以生成部分和(例如,权重数据积的)的脉动阵列、累加来自脉动阵列的部分和的求和缓冲器、进行池化操作的池化引擎、进行激活函数处理操作的激活函数引擎等。基于操作码,硬件加速器可以将指令以及操作数的定义路由到目标执行引擎,
然后所述目标执行引擎可以从指令中提取操作数并且基于操作数进行计算操作。操作数可以指示例如算术操作的配置(例如,输入数据的类型、算术操作的精确度等)、后处理操作的配置(例如,池化操作的选择、激活函数的选择等)或其它配置。存储在硬件指令解码器和指令模式映射表中的操作码和操作数的定义可以因此定义硬件加速器所支持的一系列算术操作配置和一系列后处理操作。
23.硬件加速器还可以包含片上存储器以为执行引擎提供临时数据存储。每个执行引擎均可以分配存储器存取电路以对存储器进行存取。存储器存取电路可以基于执行引擎所接收到的指令进行存储器存取操作。所述指令可以包含指示要由执行引擎执行的计算操作的操作数,以及定义要由执行引擎的存储器控制器进行的一系列特定存储器存取操作以支持计算操作的具体的存储器存取模式。一系列存储器存取操作可以包含例如存取存储在存储器中的输入数据以创建用于脉动阵列、激活函数引擎和/或池化引擎的输入数据流,以将来自脉动阵列、激活引擎和/或池化引擎的输出数据存储在存储器处等。
24.硬件加速器的存储器存取电路可以支持不同的计算操作的存储器存取操作的不同序列。例如,存储器存取电路可以通过指令进行编程以读取组织成特定维度的张量(例如,一维向量、多维矩阵等)的输入数据,并将数据提供到脉动阵列以进行卷积操作。根据输入数据的维度,指令可以包含单个维度或多个维度中的每个维度的操作数。操作数可以包含例如基于卷积操作的步幅的步长参数、用于定义要获取/提供到脉动阵列的输入数据元素数量的元素参数数量等。在脉动阵列对多维输入数据进行卷积操作的情况下,指令可以包含定义多个维度中的每个维度的步长和元素数量的操作数。存储器存取电路可以被设计成处理至多某个最大维度(例如,4d)的存储器存取操作。指令可以包含至多所述最大维度或较低维度(例如,1d、2d、3d等)的操作数,以控制根据输入数据的维度获取输入数据/向脉动阵列提供输入数据的存储器存取电路。
25.另外,存储器存取电路可以通过指令进行编程以仅在满足预定条件时对存储器进行写入操作。例如,计算操作可以包含张量的特定维度的数据元素的求和作为张量归约操作的一部分以计算跨张量维度的数据元素的总和。指令可以定义求和缓冲器的存储器存取电路将向量/矩阵的数据元素的总和写入存储器。另一个指令可以定义存储器存取电路将从脉动阵列接收到的每个部分和写入存储器作为累加操作的一部分。
26.要从存储器中读取的输入数据的维度,以及用于在存储器中存储输出数据的条件,可以在针对特定神经网络/应用的特定指令集中定义。硬件指令解码器和指令模式映射表可以基于第一指令模式程序进行编程以支持针对特定维度(例如,1d)的输入数据和/或针对存储输出数据(例如,仅存储1d向量之和)的特定条件的存储器存取操作,以用于特定神经网络和/或特定应用。硬件指令解码器和指令模式映射表然后可以基于第二指令模式程序进行编程以支持针对不同维度(例如,2d、3d、4d等)的输入数据和/或针对存储输出数据(例如,存储不同的部分和作为累加操作的一部分)的不同条件的存储器存取操作,以用于不同的神经网络和/或不同的应用。
27.本公开的实例可以增加硬件加速器所支持的指令的数量。具体地,硬件加速器所支持的指令不再限于当前存储在硬件指令解码器和指令模式映射表中的那些指令的定义,并且可以通过用不同的指令模式程序编程硬件指令解码器和指令模式映射表来扩展。连同具有可变位长度和/或位偏移的操作码和操作数的灵活性,以及选择不同存储器存取模式
的能力,硬件加速器的能力因此可以扩展以使硬件加速器能够支持与新的神经网络拓扑和/或新应用相关联的新操作。此能力可以在不改变加速器设计的情况下进行扩展。
28.在以下说明中,将描述各个实例。出于解释的目的,阐述了具体配置和细节以便提供对实例的透彻理解。然而,对于本领域的技术人员来说还将显而易见的是可以在没有具体细节的情况下实践实例。此外,可以省略或简化众所周知的特征以免混淆正在描述的实施例。
29.图1展示了使用本文所公开的技术处理数据的示例分类器装置100。分类器装置100可以是例如操作软件应用102和预测模型103以预测包含在数据序列中的信息并且基于预测进行预定功能的计算装置。例如,分类器装置100可以是提供用于从图像中识别某些对象(例如,文本、人等)的图像识别服务的一部分。应理解,图像识别服务仅作为说明性实例提供,并且本文所公开的技术可以用于其它数据处理应用,包含例如基于文本的数据处理(例如,搜索查询的处理)、音频数据处理等。此外,分类器装置100可以操作多个不同预测模型以并行处理或在不同的时间处理不同的输入数据。
30.在一些实例中,可以在多租户计算服务系统中提供图像识别服务。多租户计算服务系统通常可以包含多个服务器,所述多个服务器可以托管数据并且由多个客户端或组织用于运行实例,如虚拟机实例或裸机实例(例如,直接在服务器硬件上运行的操作系统)。在大多数实例中,如在裸机或虚拟机实例中,可以将多租户计算服务系统在客户端需要时分配给客户端,并且在客户端不再需要时停止使用,使得可以将资源重新分配给其它客户端。在本公开中,术语“租户”、“客户端”和“顾客”可以互换使用,但是此类术语不一定意味着存在任何特定的业务布置。术语“实例”可以是指例如直接在服务器硬件上执行或作为虚拟机执行的实例。不同类型的实例通常对应于不同的硬件功能和/或硬件布置(例如,不同数量的可用存储器和/或处理硬件)。在图1的实例中,多租户计算服务系统可以在客户端需要时提供图像识别服务,并且在客户端不再需要时停止使用所述服务,使得可以将支持图像识别服务的资源(例如,对软件应用102的存取和用于处理软件应用102的底层硬件资源)重新分配给其它客户端。不同的客户端(或一个客户端)可以要求应用102使用包含预测模型103的相同或不同的预测模型对不同的输入数据进行处理。
31.在图1的实例中,软件应用102可以接收来自用户的图像104的像素数据。图像104可以包含像素阵列。软件应用102可以对像素数据进行分析,并且预测图像104中描绘的一个或多个对象106。分析可以包含例如将像素数据与一组预定的特征数据进行比较。预定特征数据可以包含与一组预定视觉图像特征,例如鼻子对象、嘴巴对象等相关联的数据。预定特征数据还可以包含与非视觉图像特征或视觉图像特征和非视觉图像特征组合相关联的数据。如将在下文更详细地讨论的,软件应用102可以采用预测模型103以基于图像104的像素数据来计算一组评分。所述一组评分可以表示例如图像104包含由特征数据表示的图像特征的可能性。随后软件应用102可以基于评分确定关于图像104的内容的其它信息。例如,基于评分,软件应用102可以确定图像104是例如熊猫、猫或其它对象的图像。
32.预测模型103可以呈人工神经网络的形式。人工神经网络可以包含多个处理节点,其中每个处理节点被配置成处理输入像素数据的一部分,或者被配置成进一步处理来自其它处理节点的中间输出。图1展示了使用本文所公开的技术的预测模型103的实例。在图1中,预测模型103可以是多层神经网络,如深度神经网络(dnn)、卷积神经网络(cnn)等。预测
模型103可以包含输入层207、包含中间层209和211的一组中间层以及输出层(图2a中未示出)。应理解,预测模型103还可以包含其它不同类型的神经网络,包含例如长短期记忆(lstm)、多层感知器(mtp)、多尺度密集网络(msdnet)等。
33.层207可以处理表示图像104的不同部分的像素数据。例如,在图2a的实例中,层207可以处理图像204的像素数据。层207的每个处理节点被分配为接收与图像104内的预定像素相对应的像素值(例如,x0、x1、x2、...、xn),并且向层209传输具有接收到的像素值的一个或多个权重。在预测模型203是dnn的情况下,可以为层207的每个处理节点分配基于矩阵w1定义的一组权重。层207的每个处理节点可以向层209的每个处理节点发送接收到的像素值和所分配的权重。在预测模型103是cnn的情况下,层207的各组处理节点可以共享一组权重,并且每组可以向层209的单个处理节点发送所述一组权重和所述组处理节点接收到的像素值。不同的神经网络模型可以包含不同的拓扑(例如,包含不同多个层、层间的不同连接等)和/或每层包含一组不同的权重。
34.层209可以处理来自层207的经缩放输出以生成一组中间输出。例如,假设层209的处理节点210a连接到层207中的n个处理节点,则处理节点210a可以基于以下等式来生成从层207接收到的经缩放输出的总和:
[0035][0036]
此处,sum
210a
表示由处理节点210a生成的中间输出。w1i×
xi表示由层207的处理节点用相关联的权重(例如,w10)对特定像素值(例如,x0)进行的缩放。在预测模型103是dnn的情况下,层209的每个处理节点可以基于来自层207的每个处理节点的像素值的缩放来生成总和,并且随后通过对经缩放像素值进行求和来生成总和(例如,sum
210a
)。总和还可以表示包括多个元素(例如,像素值)的输入向量与权重向量(例如,w1)之间的点积。在一些实例中,还可以将偏置添加到经缩放的输出以生成中间输出。
[0037]
在预测模型103是cnn的情况下,层209的每个处理节点可以基于对来自层207的一组处理节点的像素值的缩放来生成中间输出。中间输出可以表示一组像素值与包括权重值的滤波器之间的卷积结果。图2b展示了层209可以进行的卷积操作的实例。在图2b中,滤波器230可以包含权重的二维阵列。滤波器230中的权重可以表示要从图像中检测到的某些特征的像素的空间分布。所述二维阵列的高度可以是r行并且宽度可以是s列,并且通常小于高度为h像素和宽度为w像素的输入图像。可以将每个权重映射到像素值的具有相同r行和s列的矩形块中的像素。层209的处理节点(例如,处理节点210a)可以从输入层207的一组处理节点接收与来自对应于滤波器230的第一步幅位置的输入图像的像素的第一矩形块相对应的一组240像素值,并且根据等式1基于对滤波器230的每个权重与组240中的每个对应像素之间的乘法结果的求和来生成卷积输出242,从而生成由滤波器230表示的矩阵与由组240表示的矩阵之间的点积。层209的另一个处理节点还可以从输入层207的另一组处理节点中接收与来自对应于滤波器230的第二步幅位置的输入图像的像素的第二矩形块相对应的一组244像素值,并且根据等式1基于对滤波器230的每个权重与组244中的每个对应像素之间的乘法结果的求和生成卷积输出246,从而生成滤波器230的矩阵与由组240表示的矩阵之间的点积。在一些实例中,图2b中的每个卷积输出(例如,卷积输出242、卷积输出346等)可以对应于层209的处理节点的输出。在一些实例中,输入图像中的像素数据可以被称为用于指示像素由对应于某些特征的相同滤波器(或相同滤波器组)处理的输入特征图。卷
积输出可以被称为用于指示输出是用滤波器处理输入特征图的结果的输出特征图。
[0038]
如在图2b所示,卷积操作可以被布置在滑动窗口中,使得第二矩形块与输入图像中的第一矩形块重叠或者以其它方式与其相邻。例如,在图2b的实例中,d可以是每个卷积操作的滑动窗口的步幅距离(按像素计),使得与组244相对应的像素块可以位于距与组240相对应的像素块的距离d(用像素表示)处,并且下一像素块也可以位于距组244相同的距离d处。层209的其它处理节点也可以接收与其它矩形块相对应的像素组并且生成其它中间输出。卷积输出可以是卷积输出阵列的一部分。与输入图像相比,卷积输出阵列可以具有更小的高度和更小的宽度。卷积输出的矩形块可以被进一步分组,并且可以在卷积输出组与另一组滤波器权重之间的层211处进行卷积操作,以生成另一组卷积输出。
[0039]
在一些实例中,可以在多个图像与多个滤波器之间进行卷积操作。例如,参考图2c,一组c滤波器260可以对应于多个(c)图像270,并且可以在所述一组滤波器260中的每个滤波器与像素块之间对图像270的对应图像进行卷积操作。图像270中的每个图像可以对应于输入通道。可以对每个滤波器图像对的卷积结果进行求和以生成如下的卷积输出:
[0040][0041]
此处,卷积操作涉及图像(或像素阵列)。x
ced r,fd s
可以是指多个(c)图像270内行坐标为ed r并且列坐标为fd s的索引c的图像处的像素的值。对于本公开的剩余部分,元素x
ced r,fd s
的坐标可以以(ed r,fd s)的形式表示。索引c可以表示特定输入通道。d是滑动窗步幅距离,而e和f对应于卷积输出阵列中的数据元素的位置,所述e和f还可以对应于特定滑动窗。进一步地,r和s对应于滑动窗内的特定位置。(r,s)位置处的像素和索引c的图像的像素也可以对应于同一(r,s)位置处的相同索引c的对应滤波器中的权重w
cr,s
。等式2指示为了计算卷积输出o
e,f
,可以将滑动窗口内的每个像素(由(e,f)索引)乘以对应权重o
e,f
。可以计算图像组内的每个图像中的每个滑动窗内的相乘乘积的部分和。并且然后可以计算图像组的所有图像的部分和的总和。
[0042]
此外,在一些实例中,可以使用多组滤波器来对一组图像进行卷积操作以生成一组卷积输出阵列,其中每个卷积输出阵列对应于一组滤波器。每组滤波器可以对应于输出通道。例如,所述多组滤波器可以对应于要从所述一组图像检测的多个特征,并且每个卷积输出阵列可以对应于用于来自所述一组图像的每个特征的检测结果。例如,在将m组滤波器应用于c个图像以生成m个卷积输出阵列的情况下,等式2可以更新如下:
[0043][0044]
此处,卷积输出o
e,fm
和权重o
e,fm
具有与m组滤波器之一相对应的索引m。索引m可以表示特定输出通道。
[0045]
图2d展示了要与m组滤波器(其中m=2)进行卷积的c组输入数据集(其中c=3)的实例。每组输入数据对应于像素阵列的条目。m组滤波器中的每组滤波器包含与c组输入像素阵列相对应的一组c滤波器。卷积操作生成m组输出数据元素,其中每组输出数据元素对应于卷积输出阵列。每个卷积输出阵列对应于将(m组中的)一组滤波器与输入像素阵列进行卷积。例如,可以通过一组像素282与滤波器阵列284之间的点积、一组像素286与滤波器阵列288之间的点积以及一组像素289与滤波器阵列292之间的点积的总和生成o
0,00

[0046]
返回参考图2a,层209的一个处理节点可以被配置成生成一个卷积输出阵列的卷
积输出元素,并且层209的一组m处理节点可以对应于一组m卷积输出阵列。层209的处理节点还可以用激活函数处理每个卷积输出以生成激活输出。激活函数可以将卷积输出转换为是否将卷积输出转发到中间层211的决策以影响分类器决策(类似于触发生物神经元)。激活函数的实例可以是根据以下等式定义的整流线性单位(relu):
[0047][0048]
除了relu之外,还可以使用其它形式的激活函数,包含例如softplus函数(其可以是relu函数的光滑逼近)、双曲正切函数(tanh)、反正切函数(arctan)、sigmoid函数、高斯函数(gaussian function)等。
[0049]
层209的处理节点(例如,处理节点210a)可以用relu函数处理总和以基于以下等式生成层209的第一输出:
[0050]
first_output
210a
=relu(sum
210a
)
ꢀꢀꢀ
(等式5)
[0051]
层211可以通过例如基于不同组的滤波器进行另外的卷积操作来进一步处理来自层209的经缩放中间输出。可以将来自层211的每个处理节点的输出转发到其它较高的中间层,或者转发到输出层(图2a中未示出)。输出层可以形成表示例如图像104中包含某些特征的概率和/或图像204包含熊猫的图像的概率的输出向量。例如,可以将输出向量与同熊猫的鼻子对象相关联的参考向量或与熊猫相关联的参考向量进行比较。可以基于比较结果来确定关于图像104是否是熊猫的图像的决策。
[0052]
图3展示了在计算环境中实施神经网络操作的示例序列300。如图3所示,序列300可以从步骤302开始,其中从存储器中获取神经网络层的输入数据和权重。输入数据可以包含例如图像的像素值、音频数据等,或者来自先前神经网络层的输出数据。在步骤304中,可以基于输入数据和权重进行算术操作以生成中间输出。算术操作可以包含例如如上文在等式1-3中所描述的求和和乘法。算术操作可以通过例如硬件加速器的脉动阵列、通用硬件处理器等来进行。在步骤306中,可以对中间输出进行后处理操作以生成神经网络层的最终输出。后处理操作可以包含例如池化操作、激活函数处理等,如上文在等式4和5中所描述的。在步骤308中,最终输出可以存储在存储器中作为最终输出,其可以表示神经网络的整体输出或者作为下一个神经网络层的输入。
[0053]
步骤302、304、306和308中的每个步骤可以涉及针对不同神经网络拓扑和/或不同应用的不同操作。具体地,在步骤302中,可以获取组织成不同维度(例如,1d、2d、3d、4d等)、大小等的张量的输入数据和权重。例如,音频处理应用可以存取一维输入数据(例如,音频信号的时间序列),而图像处理应用可以存取多维输入数据(例如,不同光谱通道的二维图像)。此外,步骤304中的算术操作可以变化。例如,卷积神经网络(cnn)可以实施如等式3和4中所描述的卷积操作,而全连接神经网络则不能。还可以实施不同的卷积操作(例如,转置卷积操作、扩张卷积操作等)。进一步地,还可以进行其它类型的算术操作,如张量归约操作,以计算跨张量维度的数据元素的总和。对于不同的神经网络拓扑和/或不同的应用,可以在步骤306中实施不同的后处理操作,如不同的激活函数、不同的池化操作等。最后,在步骤308中将输出数据存储在存储器中可能涉及针对不同应用的不同模式的写入操作。例如,一些应用可能要求仅在步骤304中的算术操作完成后才将输出写入存储器,而一些其它应用可能需要在步骤304中的算术操作正在进行中时将部分和写入存储器并在存储器中进行
更新。
[0054]
在计算环境中,步骤302、304、306和308中的每个步骤均可以由要被执行以进行神经网络操作的一个或多个指令来表示。指令可以表示步骤302、304、306和308中的每个步骤的不同操作。例如,读取不同维度和大小的输入数据和权重的存储器可以由不同的指令表示。此外,不同的指令可以表示步骤304中的不同算术操作、步骤306中的不同后处理操作以及步骤308中不同模式的写入操作。为了针对不同应用实施不同的神经网络拓扑,计算环境可能需要支持大量指令以涵盖步骤302、304、306和308中的每个步骤中的不同操作。
[0055]
图4a是展示了可以被配置成进行各种类型的神经网络操作的集成电路装置的实例的框图。图4a的实例展示了加速器402。在各个实例中,对于一组输入数据(例如,输入数据450),加速器402可以使用包含处理引擎阵列410和后处理引擎415的计算电路来执行计算,所述后处理引擎包含激活引擎416和/或池化引擎418。在一些实例中,示例加速器402可以是处理器的集成电路组件,如神经网络处理器。处理器可以具有其它集成电路组件,包含另外的加速器引擎。加速器402可以包含控制器422以控制包含处理引擎阵列410和后处理引擎415的计算电路的操作。
[0056]
在各个实施方案中,存储器子系统404可以包含多个存储体414。在这些实施方案中,每个存储体414可以是可独立存取的,这意味着一个存储体的读取不依赖于另一个存储体的读取。类似地,写入一个存储体不会影响或限制写入不同的存储体。在一些情况下,可以同时读取和写入每个存储体。可以使用各种技术来具有可独立存取的存储体414。例如,每个存储体可以是地址空间是单独的并且独立于每个其它存储体的地址空间的物理上分离的存储器组件。在此实例中,每个存储体可以具有至少一个读取通道并且可以具有至少一个可以同时使用的单独的写入通道。在这些实例中,存储器子系统404可以允许同时对多个存储体的读取通道或写入通道进行存取。作为另一实例,存储器子系统404可以包含仲裁逻辑使得例如多个存储体414的输出之间的仲裁可以使得多于一个存储体的输出被使用。在这些和其它实例中,虽然由存储器子系统404全局管理,但是每个存储体可以独立于任何其它存储体进行操作。
[0057]
使存储体414可独立存取可以提高加速器402的效率。例如,可以同时读取多个值并且将其提供到处理引擎阵列410的每一行,使得整个处理引擎阵列410可以在一个时钟周期内使用。作为另一个实例,可以在将由处理引擎阵列410计算的结果写入存储器子系统404的同时读取存储体414。相比之下,单个存储器可能一次只能服务一次读取或写入。在单个存储器的情况下,在可以启动处理引擎阵列410之前,例如对于读取处理引擎阵列410的每一行的输入数据,可能需要多个时钟周期。
[0058]
在各个实施方案中,存储器子系统404可以被配置成同时服务多个客户端,包含处理引擎阵列410、激活引擎416、池化引擎418和通过通信结构420对存储器子系统404进行存取的任何外部客户端。在一些实施方案中,能够服务多个客户端可以意味着存储器子系统404的存储体至少与客户端一样多。在一些情况下,处理引擎阵列410的每一行都可以算作单独的客户端。在一些情况下,处理引擎阵列410的每一列都可以输出结果,使得每一列都可以算作单独的写入客户端。在一些情况下,来自处理引擎阵列410的输出可以被写入到存储体414中,然后可以随后为处理引擎阵列410提供输入数据。作为另一个实例,激活引擎416和池化引擎418可以包含多个执行通道,所述执行通道中的每个执行通道可以是单独的
存储器客户端。例如,存储体414可以使用静态随机存取存储器(sram)实施。
[0059]
在各个实施方案中,存储器子系统404可以包含控制逻辑。控制逻辑可以例如跟踪存储体414中的每个存储体的地址空间,识别要从其读取或写入其的存储体414,和/或在存储体414之间移动数据。在一些实施方案中,存储体414可以硬连线到特定客户端。例如,可以将一组存储体414硬连线以将值提供到处理引擎阵列410的各行,其中一个存储体服务每一行。作为另一个实例,可以将一组存储体硬连线以从处理引擎阵列410的列接收值,其中一个存储体接收每一列的数据。
[0060]
处理引擎阵列410是示例加速器402的计算矩阵。处理引擎阵列410可以例如执行并行集成、卷积、相关性和/或矩阵乘法等。处理引擎阵列410包含按行和列布置的多个处理引擎411,使得由一个处理引擎411输出的结果可以直接输入到另一个处理引擎411中。因此,不位于处理引擎阵列410的外边缘上的处理引擎411可以从其它处理引擎411而不是从存储器子系统404接收数据以进行操作。
[0061]
在各个实例中,处理引擎阵列410可以包含脉动阵列并且使用脉动执行,在所述脉动执行中,数据以规则间隔从不同方向到达每个处理引擎411。在一些实例中,输入数据可以从左流入到处理引擎阵列410中,并且权重值可以在顶部处加载。在一些实例中,权重和输入数据可以从左侧流动,并且部分和可以从上到下流动。在这些和其它实例中,乘法和累加操作以对角波前移动通过处理引擎阵列410,其中数据跨阵列向右和向下移动。控制信号可以和权重同时输入到左侧处,并且可以与计算一起流过并向下流动。
[0062]
在各个实施方案中,处理引擎阵列410中的列数确定处理引擎阵列410的计算能力,并且行数确定实现处理引擎阵列410的最大利用所需的存储器带宽。处理引擎阵列410可以例如具有64列和428行,或一些其它列数和行数。
[0063]
在图4中以插图展示了处理引擎411的实例。如此实例所展示的,处理引擎411可以包含乘法器-累加器电路。来自左边的输入可以包含例如输入数据i和权重值w,其中输入数据是取自一组输入数据或一组中间结果的值,并且权重值来自将神经网络的一个层连接到下一层的一组权重值。例如,一组输入数据可以是提交以用于识别或对象识别的图像、提供以用于语音识别的音频片段、用于自然语言处理或机器翻译的文本的字符串,或需要分析以确定下一移动的游戏的当前状态等。在一些实例中,输入数据和权重值输出到右边,以用于输入到下一处理引擎411。
[0064]
在所展示的实例中,来自上文的输入可以包含部分和p_in,其由另一个处理引擎411或由处理引擎阵列410的先前一轮计算提供。当开始对一组新输入数据进行计算时,处理引擎阵列410的顶行可以接收p_in的固定值,如零。如此实例所展示的,i和w相乘,并且结果与p_in求和以产生新的部分和p_out,其可以输入到另一个处理引擎411中。处理引擎411的各个其它实施方案是可能的。
[0065]
来自处理引擎阵列410中的最后一行的输出可以临时存储在求和缓冲器412中。结果可以是中间结果,所述结果可以被写入存储体414以提供到处理引擎阵列410以用于另外的计算。可替代地,结果可以是最终结果,一旦将其写入存储体414,就可以通过通信结构420从存储器子系统404读取,所述最终结果要由系统输出。
[0066]
在一些实施方案中,加速器402包含后处理引擎415,所述后处理引擎可以包含激活引擎416和池化引擎418。在这些实施方案中,激活引擎416可以将来自处理引擎阵列410
的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可以将来自多个通道的卷积求和以产生单个通道的输出激活。在其它实例中,可能需要将来自处理引擎阵列410中的一列或多列的结果累加以为神经网络中的单个节点产生输出激活。在一些实例中,可以绕过激活引擎416。
[0067]
在各个实例中,激活引擎416可以包含多个单独的执行通道。在这些实例中,执行通道可以对应于处理引擎阵列410的列,并且可以对列的输出进行操作,其结果可以存储在存储器子系统404中。在这些实例中,激活引擎416可以能够进行介于1次与n次之间的并行计算,其中n等于处理引擎阵列410中的列数。在一些情况下,可以同时进行计算中的一种或多种计算。除其它实例之外,每个执行通道可以进行的计算的实例包含指数、平方、平方根、恒等式、二进制阶跃、双极阶跃、s形和斜坡。
[0068]
在一些实施方案中,加速器402可以包含池化引擎418。池化是处理引擎阵列410的列的输出的组合。组合可以包含例如计算最大值、最小值、平均值、中值、求和、乘法或另一逻辑或数学组合。在各个实例中,池化引擎418可以包含多个执行通道,所述多个执行通道可以对处理引擎阵列410的对应列的值进行操作。在这些实例中,池化引擎418可以能够进行介于1次与n次之间的并行计算,其中n等于处理引擎阵列410中的列数。在各个实例中,池化引擎418的执行通道可以并行和/或同时进行操作。在一些实例中,可以绕过池化引擎418。
[0069]
在本文中,激活引擎416和池化引擎418可以统称为执行引擎。处理引擎阵列410是执行引擎的另一实例。执行引擎的另一个实例是可以定位于加速器402外部的直接存储器存取(dma)引擎。
[0070]
输入数据450可以通过通信结构420到达。通信结构420可以将加速器402连接到处理器的其它组件,如可以从输入/输出(i/o)装置、存储驱动器或网络接口获得输入数据450的dma引擎。输入数据450可以是例如一维数据,如字符串或数字序列,或二维数据,如图像的像素值阵列或音频信号随时间推移的频率值和振幅值。在一些实例中,输入数据450可以是三维的,例如对于自动驾驶汽车所使用的情境信息或虚拟现实数据来说可以是这种情况。在一些实施方案中,存储器子系统404可以包含用于输入数据450的单独的缓冲器。在一些实施方案中,当加速器402接收到输入数据450时,输入数据450可以存储在存储体414中。
[0071]
在一些实例中,加速器402可以实施神经网络处理引擎。在这些实例中,对于一组输入数据450,加速器402可以运行神经网络以进行任务,而所述神经网络已针对所述任务进行了训练。对一组输入数据执行神经网络可以称为推断或进行推断。
[0072]
神经网络的权重可以与神经网络将操作的输入数据450一起存储在存储器子系统404中。存储器子系统404中的权重和输入数据450的地址可以基于或映射到分别在权重数据阵列和输入数据阵列中的权重和输入数据450的坐标,这允许基于从其坐标导出的地址而检索权重和输入数据。神经网络还可以包含可以由控制器422执行以控制处理引擎阵列410对权重和输入数据进行各种计算的指令。f可以由编译器生成并且还可以存储在存储器子系统404、存储体414或单独的指令缓冲器中。处理引擎阵列410可以输出中间结果,所述中间结果表示神经网络的各个层的输出。在一些情况下,激活引擎416和/或池化引擎418可以被启用以进行神经网络的某些层所要求的计算。加速器402可以将中间结果存储在存储器子系统404中,以输入到处理引擎阵列410中以计算神经网络的下一层的结果。处理引擎
阵列410可以进一步从神经网络的最后一层输出最终结果。最终结果可以存储在存储器子系统404中并且随后复制到主机处理器存储器或复制到另一个位置。
[0073]
图4b和图4c展示了加速器402的操作的实例。如图4b所示,存储器子系统404可以被组织成多行,如存储器行425、426等。在一个实例中,输入数据可以被组织成具有由高度h表示的第一维度、由宽度w表示的第二维度、由通道c表示的第三维度的图像数据的三维(2d)矩阵。在图4b的实例中,每个存储器行可以存储特定输入通道c的二维(2d)输入数据元素(跨高度h和权重w)。存储器子系统404还可以存储更高维度的输入数据,如4d矩阵。在一个实例中,存储器子系统404可以在每一行中的不同时间和/或在每一行内的不同位置处存储属于不同第四维度的输入数据。存储器子系统404可以顺序地获取不同第四维度的输入数据。例如,存储器子系统404可以首先将特定第四维度(例如,跨不同行的不同通道c)的三维输入数据获取到处理引擎阵列410,随后是另一个第四维度的输入数据等等。
[0074]
可以控制作为处理引擎阵列410的一部分的存储器存取电路(例如,存储器存取电路427)以基于包含元素的起始地址、步长和元素数量的一组存储器获取参数430而依次将输入数据元素获取到处理引擎阵列410。起始地址参数可以定义要从存储器行读取的第一输入数据元素的位置,步长参数可以定义所获取的输入数据元素之间跳过的输入数据元素的数量,所述输入数据元素可以对应于卷积操作的步幅距离(等式1-3中的参数d),而所获取的元素参数的数量可以定义要获取的输入数据元素的总数量。由于输入数据元素存储在蔓延性空间中,存取电路427可以确定所获取的输入数据元素的地址并且基于步长更新计数器。例如,存取电路427可以开始从起始地址获取第一输入数据元素,将基于步长的地址偏移添加到起始地址以在跳过多个输入数据元素时获取下一输入数据元素,并且重复直至达到获取元素的数量为止。
[0075]
如下文所描述的,参数430可以包含用于存储在存储器子系统404中的输入数据的每个维度的步长参数和获取元素的数量参数。存储器获取参数430可以包含在处理引擎阵列410的指令中以计算一组部分和。指令可以由编译器生成并且由控制器422转发到处理引擎阵列410,所述处理引擎阵列包含解码器(图4b中未示出)以从指令中提取存储器获取参数430。
[0076]
处理引擎阵列410的处理引擎411可以被组织成如行431等行和如列432等列。在一个实例中,处理引擎411的每行可以映射到输入通道(c)并且可以依次接收来自被映射到输入通道的存储器系统404的存储器行的输入数据元素,而处理引擎411的每列可以被映射到输出通道(等式3中的参数m)。输入数据元素存储在连续地址空间中并且遵循基于其在输入数据阵列中的坐标的次序。每个处理引擎411可以存储用于输入通道和处理引擎映射到的输出通道的权重数据元素。处理引擎411的每一列。参考图4a和图4b,引擎内的处理引擎411可以接收输入通道的输入数据元素(例如,图4a的输入数据i),将其与所存储的权重(例如,图4a的权重数据w)相乘以生成乘积,将乘积与输入部分和p_in相加以生成新的部分和p_out,并且将新的部分和p_out传递到相同列下的处理引擎411。列的底部处理引擎411可以生成表示存储在处理引擎411的列中的权重数据元素与从存储器子站404接收的不同输入通道的输入数据元素之间的乘积的总和的部分和。
[0077]
在存储器获取参数430指示起始地址位于每一行的最右边的输入数据元素处,步长一(在此实例中可以指示跳过)以及一定数量的输入数据元素被获取的情况下,在处理引
擎411的第一迭代列432中可以如下基于由存储器子系统404提供的所存储的权重数据元素和输入数据元素生成第一部分和:
[0078]
第一部分和=x
00,0
×w0,00,0
x
10,0
×w1,00,0
... x
c0,0
×wc,00,0
ꢀꢀꢀ
(等式6)
[0079]
在第二迭代中,处理引擎411的列432可以如下基于由存储器子系统404提供的所存储的权重数据元素和输入数据元素生成第二部分和:
[0080]
第二部分和=x
00,1
×w0,00,0
x
10,1
×w1,00,0
... x
c0,1
×wc,00,0
ꢀꢀꢀ
(等式7)
[0081]
处理引擎411的每列可以将在迭代中生成的部分和提供到列求和缓冲器,如列求和缓冲器442、443等,所述列求和缓冲器两者都是求和缓冲器412的部分。部分和是基于与不同输入通道和输出通道相关联的不同滤波器阵列的相同坐标处的权重数据元素生成的,并且部分和对应于不同输出数据元素。
[0082]
每个列求和缓冲器可以继续累加从处理引擎411的每个列中接收到的部分和,直到对所有输入数据元素的算术操作完成为止。累加的部分和可以对应于例如等式3的o
e,fm
。图4c展示了列求和缓冲器的示例内部组件,如列求和缓冲器442和443。如图4c中所示,列求和缓冲器可以包含多个条目,如e
0,0
、e
0,1
、e
0,2
等。每个条目可以具有映射到输出图块的坐标的坐标,所述坐标可以表示输出阵列的区域。每个条目具有允许条目将接收到的部分和与所存储的部分和相加以生成累加的部分和的加法器(在图4c中未示出)。随后所述条目可以存储累加的部分和。列求和缓冲器442和443处的操作可以由包含目的地偏移、步长和写入元素数量的一组缓冲器写入参数452控制。目的地偏移量参数可以指示(第一迭代的)第一部分和要添加到的条目。
[0083]
在根据第一组权重数据元素(其在相应滤波器阵列中的坐标相同但输入通道和输出通道不同)计算部分和之后,处理引擎阵列410可以从不同坐标加载新的一组权重数据元素并且重复部分和计算。可以将新的部分和添加到存储在求和缓冲器412中的根据第一组权重数据元素计算出的部分和。对其余权重数据元素的部分和的计算和累加可以继续下去以生成输出图块的输出数据元素。
[0084]
在生成输出图块的数据元素之后,求和缓冲器412可以将输出图块的数据元素提供到后处理引擎415,所述后处理引擎包含激活函数引擎416和池化引擎418以对输出数据元素进行后处理并且将后处理的输出写回到存储器子系统404。后处理引擎415所进行的后处理操作可以是可编程的。在一些实例中,后处理引擎415可以进行编程以将输出数据元素转发到激活函数引擎416或池化引擎418中的一个以进行后处理。在一些实例中,后处理引擎415可以进行编程以将输出数据元素转发到激活函数引擎416或池化引擎418中的一个以进行第一阶段后处理操作,将第一阶段后处理的输出写回到求和缓冲器412,将来自求和缓冲器412的第一阶段后处理的输出转发到激活函数引擎416或池化引擎418中的另一个以进行第二阶段后处理操作,并且然后将第二阶段后处理的输出写回到存储器子系统404。
[0085]
图4d展示了后处理引擎415的示例内部组件。如图4d所示,除了激活函数引擎416和池化引擎418之外,后处理引擎415还包含求和缓冲器存取电路462和存储器子系统存取电路464。求和缓冲器存取电路462向激活函数引擎416和池化引擎418提供求和缓冲器412的读取存取和写入存取,而存储器子系统存取电路464向激活函数引擎416和池化引擎418提供存储器子系统404的读取存取和写入存取。求和缓冲器存取电路462和存储器子系统存取电路464中的每一个可以分别通过缓冲器写入参数468和存储器写入参数470进行编程。
参数468和470两者均可以由编译器生成并由控制器422转发到后处理引擎416,所述后处理引擎包含从指令中提取参数的解码器(图4d中未示出)。
[0086]
缓冲器写入参数468和存储器写入参数470中的每一个可以包含起始地址或目的地偏移、指示要在每个写入元素之间跳过的后处理的元素的数量的步长、要写入到缓冲器/存储器子系统中的多个元素,以及用于对求和缓冲器/存储器子系统进行写入操作的条件。所述参数可以定义一系列写入操作以将所述多个元素写入到缓冲器/存储器的不同位置中。用于进行写入操作的条件可以应用于池化引擎418,所述池化引擎可以进行特定维度的输出数据元素的求和作为张量归约操作的一部分,并且写入条件可以指示池化引擎418是否存储求和缓冲器412或存储器子系统404的求和操作的最终输出,或者将求和操作期间生成的输出数据元素的部分和写入到求和缓冲器412或存储器子系统404作为累加操作的一部分。在输出数据元素具有多个维度的情况下,缓冲器写入参数468和存储器写入参数470可以包含每个维度的步长、元素数量和每个维度的写入条件。后处理的输出数据可以从存储器子系统404发送到通信结构420和/或被获取到处理引擎阵列410作为后续神经网络层处理的输入数据。
[0087]
图5a-图5e展示了处理电路500的内部组件的另外的实例,如处理引擎阵列410和后处理引擎415。如图5a所示,处理电路500包含可编程硬件指令解码器502、可编程指令模式映射表504、硬件执行引擎506、存储器存取电路508和控制器509。硬件执行引擎506可以包含例如处理引擎411、激活函数引擎416、池化引擎418等。存储器存取电路508可以包含例如图4b的存储器存取电路427、求和缓冲器存取电路462、存储器子系统存取电路464等。硬件执行引擎506和存储器存取电路508中的每一个进一步包含操作数提取电路510(例如,硬件执行引擎506中的510a、存储器存取电路508中的510b)。
[0088]
处理电路500可以接收指令520,所述指令可以包含操作码522,所述操作码可以唯一地识别指令520和/或硬件执行引擎506所进行的操作。指令520还可以包含一个或多个操作数524,所述操作数可以包含配置参数以配置硬件执行引擎506和存储器存取电路508处的操作。操作数可以定义例如处理引擎411的输入数据类型、处理引擎411处的算术操作精确度、激活函数引擎416所使用的激活函数的类型、池化引擎418所进行的池化操作等。操作数可以包含例如配置图4b的存储器存取电路427的存储器获取参数430、图4c的缓冲器写入参数468和存储器写入参数470等,以配置存储器存取电路508以在存储器(例如,存储器子系统414)处进行一系列特定存取操作以支持硬件执行引擎506处的操作。一系列存取操作可以包含例如一系列读取/写入操作以获取/存储一组输入数据元素(例如,从某个目的地地址,在经读取或经写入的每个数据元素之间跳过多个输入数据元素,等等)。一系列存储器存取操作还可以包含例如,当满足特定条件时,如当求和操作完成时或在求和操作期间生成部分和时,在存储器/缓冲器处进行写入操作。可以进行存储器存取操作以支持与指令520相关联的硬件执行引擎506处的操作。在一些实例中,如果指令在硬件执行引擎506处的执行需要来自存储器的读取存取操作和写入存取操作两者,则指令可以定义读取存取操作和写入存取操作两者。
[0089]
控制器509可以控制硬件指令解码器502和可编程指令模式映射表504以解码指令520,并将解码结果提供到存储器存取电路508和硬件执行引擎506以使两者均能够从指令520中提取操作数524。图5b和图5c分别展示了硬件指令解码器502和可编程指令模式映射
表504的示例内部组件。具体地,参考图5b,硬件指令解码器502可以包含进行编程以存储多个操作码542的存储器装置(例如,寄存器),所述操作码可以包含操作码522。硬件指令解码器502可以在指令520中搜索与所述多个操作码中的任一个匹配的操作码,并输出匹配操作码(例如,操作码522)。硬件指令解码器502可以包含多个字节比较器,包含540a、540b、540n等,以进行搜索。为了进行搜索,指令520可以被分割成多个字节543(例如,543a、543b、543n),其中每个字节被馈送到字节比较器540之一以与所述多个操作码542中的每一个进行比较以搜索匹配操作码。在操作码跨越一个或多个分段字节543的情况下,可以将每个操作码的位子集提供到每个字节比较器以搜索操作码的匹配位子集。硬件指令解码器502进一步包含合并电路544,所述合并电路可以包含多路复用器或其它逻辑电路以输出匹配操作码。在操作码完全含在分段字节之一中的情况下,合并电路544可以基于来自所述字节比较器的指示,即操作码是在所述字节比较器所处理的字节中找到的,选择来自字节比较器之一的输出作为匹配操作码。此外,在操作码跨越一个或多个分段字节543的情况下,合并电路544可以合并来自字节比较器的输出,所述字节比较器指示操作码的位子集是在那些字节比较器所处理的字节中找到的。
[0090]
控制器509可以控制可编程硬件指令解码器502以将匹配操作码(例如,操作码522)转发到可编程指令模式映射表504,所述可编程指令模式映射表可以进行编程以存储所述多个操作码与指令的操作数的位偏移和位长度的多个定义之间的映射。图5c展示了可编程指令模式映射表504的示例内部组件。如图5c所示,可编程指令模式映射表504可以包含进行编程以存储多个操作码542与多个定义554之间的映射的存储器装置(例如,寄存器)。每个定义都可以定义一个或多个操作数的位偏移和位长度。定义554的子集(例如,定义554a)所定义的一些操作数可以针对硬件执行引擎506,而定义554的另一子集(例如,定义554b)所定义的一些操作数可以针对存储器存取电路508。返回参考图5a,可编程指令模式映射表504可以从可编程硬件指令解码器502接收操作码(例如,操作码522),并确定映射到操作码522的定义554。控制器509还可以识别针对硬件执行引擎506的定义554的子集(例如,定义554a)和针对存储器存取电路508的定义554的另一子集(例如,定义554b)。然后,控制器509可以控制可编程指令模式映射表504以将定义544b转发到存储器存取电路508的操作数提取电路510a,并将定义544a转发到硬件执行引擎506的操作数提取电路510b。基于接收到的定义,操作数提取电路510a和操作数提取电路510b可以为存储器存取电路508和硬件执行引擎506提取操作数524的相应子集。
[0091]
存储在可编程硬件指令解码器502和可编程指令模式映射表504中的所述多个操作码可以表示处理电路500以及加速器402当前所支持的指令集。在一些实例中,操作码可以在指令的至少一个子集中具有不同的位长度。例如,操作码中的一些操作码可以具有一个字节或更短的位长度,而操作码中的另一些操作码可以具有多于一个字节的位长度。操作数的位位置和位长度以及操作数的数量还可以在指令之间变化。操作码和操作数的长度和位置的灵活性允许加速器402所定义和支持的大量指令。因此,可以在指令中编码更多种类的操作以支持不同的神经网络拓扑和/或应用,这可以扩展加速器402的能力。
[0092]
在另一方面,可编程硬件指令解码器502和可编程指令模式映射表504不需要存储加速器402所支持的指令的所有操作码和操作数定义。相反,可编程硬件指令解码器502和可编程指令模式映射表504可以通过指令模式程序进行编程以仅存储操作码和定义的子
集。所述子集可以被处理电路500(和加速器402)用作加速器402当前所支持的指令集。与操作码和定义的子集相关联的指令可以控制处理电路500以进行具体神经网络和/或应用的操作,包含例如存取特定维度的输入数据、进行一组特定的池化操作、使用一组特定的激活函数等。在所述神经网络和/或应用的操作完成之后,可编程硬件指令解码器502和可编程指令模式映射表504可以通过指令模式程序进行编程以存储另一指令模式程序,以存储操作码和定义的另一子集以向加速器402提供另一指令集。通过此类布置,可以减少存储在可编程硬件指令解码器502和可编程指令模式映射表504中的操作码和定义的数量,这不仅可以减少存储器装置存储操作码和定义所需的存储容量,而且还可以提高操作码和定义的搜索速度以加速解码操作。
[0093]
可编程指令模式映射表504中的操作码和定义的搜索速度可以通过其它技术进一步提高,如使用内容可寻址存储器(cam),所述cam可以将输入搜索数据与所存储的数据表进行比较,并返回匹配数据的地址。图5d展示了可编程指令模式映射表504的内部结构的实例。如图5d所示,可编程指令模式映射表504可以包含cam 560。在cam 560中,每个操作码可以与地址564相关联,所述地址进而与定义相关联。为了进行基于操作码的定义查找,cam 560可以搜索输入操作码(例如,操作码522)。基于匹配操作码,然后可以找到对应地址和定义。与仅允许基于地址进行存取的常规存储器装置相比,图5d的布置允许更快地搜索和检索操作码和定义,这可以进一步加速解码操作。
[0094]
如上文所描述的,可以基于指令模式程序对硬件指令解码器502和可编程指令模式映射表504进行编程以存储操作码和定义。指令模式程序可以呈可以从指令模式文档生成的位流的形式。
[0095]
图6展示了指令模式文档600的实例,所述指令模式文档列出了指令x的操作码(“opcode_1”),以及指令x的每个操作数的位偏移和位长度,如输入数据类型(“input_data_type”)、每个维度的输入数据的步长参数和元素参数的数量(例如,step_x、step_y、step_z、num_element_x、num_element_y、num_element_z等)等。然后可以由例如编译器并且基于关键字“bit_offset”和“bit_length”从指令模式文档600中生成定义操作数的位偏移和位长度的指令模式程序的位流。
[0096]
在一些实例中,指令模式文档600可以从更具人类可读指令定义文档602中生成,所述人类可读指令定义文档可以列出操作码和操作数的顺序,以及每个操作数的可以定义每个操作数的位长度的类型。可以采用脚本以从指令定义文档602中生成指令模式文档600,通过例如查找指令定义文档602中所列出的操作数的类型和次序并填充指令模式文档600中的操作数的位偏移和位长度字段。通过此类布置,可以在更具人类可读指令定义文档602中对指令定义进行编辑以减少人为误差的可能性,同时可以以低误差风险自动且高效地将编辑传播到指令模式文档600。
[0097]
图7a-图7c展示了针对不同存储器存取模式的指令的另外的实例。如图7a和图7b所示,两个不同的指令(y和x)可以包含针对不同维度数据的存储器存取操作数。图7a展示了针对指令y的指令定义文档702和其对应指令模式文档700,而图7b展示了针对图6的指令x的指令定义文档712和其对应指令模式文档710。
[0098]
如图7a所示,指令y包含“mem_access_4d”的操作数722,以用于4d数据的一系列存储器存取操作。“mem_access_4d”操作数包含地址操作数、步长操作数和4d数据的每个维度
的多个元素操作数,如第一维度的step_x和num_element_x、第二维度的step_y和num_element_y、第三维度的step_z和num_element_z以及第四维度的step_t和num_element_t。指令还可以包含定义存取4d数据的起始位置的一个或多个地址。地址、步长和num_element参数可以针对每个维度定义存取存储器(例如,存储器子系统404、求和缓冲器412)的模式。例如,“step_x”参数可以定义沿x维度在两个经存取的数据元素之间要跳过的数据元素的数量,而“num_element_x”参数可以定义沿x维度要存取的数据元素的数量。此外,“step_y”参数可以定义沿x维度(例如,二维张量的行)要在两个经存取的数据元素之间跳过的数据元素的数量,而“num_element_y”可以定义沿y维度要存取的数据元素的数量。“step_y”参数可以基于“step_x”和“num_element_x”参数来定义哪个数据元素开始新的一行,而“num_element_y”元素可以对应二维张量中的行数。“step_z”参数可以定义在二维张量中的每一个之间要跳过的通道的数量(例如,通过跳过存储器子系统404的行),而“num_element_z”参数可以定义通道的总数量(例如,二维张量的总数量)。最后,“step_t”参数可以定义在经存取的两组三维张量之间要跳过的三维张量组(例如,基于确定来自存储三维张量组的存储器子系统404的不同位置之间的地址偏移),而“num_element_t”参数可以定义要存取的三维张量组的总数量。mem_access_4d操作数的位偏移和位长度在指令模式文档700中列出。在通过操作数提取电路510a提取mem_access_4d操作数之后,存储器存取电路508可以进行一系列存储器存取操作以获得基于每个维度的步长和num_element操作数的一组4d数据。
[0099]
另一方面,在图7b中,指令x包含如在图6中的“mem_access_3d”的操作数732以用于3d数据的一系列存储器存取操作。“mem_access_3d”操作数包含步长操作数和3d数据的每个维度的多个元素操作数,如第一维度的step_x和num_element_x、第二维度的step_y和num_element_y以及第三维度的step_z和num_element_z。此外,如图7b所示,在对应指令模式文档710中,第四维度的step_t和num_element_t操作数734可以用零值填充。基于检测位长度和位偏移中的零值,控制器509可以跳过将step_t和num_element_t操作数734的位长度和位偏移发送到存储器存取电路508。
[0100]
图7c展示了可以通过可编程硬件指令解码器502和可编程指令模式映射表504支持的求和指令的实例。如图7c的指令定义文档752所示,求和指令可以包含“mem_write_mode”的操作数754,所述操作数可以定义存储器存取电路508进行写入操作要满足的条件。求和指令可以通过例如池化引擎418执行以进行一系列写入操作以进行张量归约操作。如图7c的指令文件756所示,求和指令762将mem_write_mode操作数754设置为第一值(例如,零值)以指示池化引擎418仅将求和操作的最终输出写回到存储器子系统404,而求和指令764将mem_write_mode操作数754设置为第二值(例如,一值)以指示池化引擎418将求和操作的每个部分和写入到存储器子系统404和/或在池化引擎418处生成部分和时在每个时钟周期处进行写入操作。作为说明性实例,假设池化引擎418接收一组输入数据[1、2、3、4],则指令756的执行可以使得存储器存取电路508仅将求和输出(10)存储在存储器子系统404中,而指令764的执行可以使得存储器存取电路508将部分和1、3(来自1和2的求和)、6(来自1、2和3的求和)和10存储在存储器子系统404中。
[0101]
图8a展示了操作硬件加速器,如图4a的加速器402的方法800。加速器402可以包含一个或多个计算电路,所述一个或多个计算电路包含处理引擎阵列410、求和缓冲器412、后
处理引擎415等。每个计算电路可以包含图5a的处理电路500的组件,其可以执行方法800。处理电路500包含可编程硬件指令解码器502、可编程指令模式映射表504、硬件执行引擎506、存储器存取电路508和控制器509。硬件执行引擎506可以包含例如处理引擎411、激活函数引擎416、池化引擎418等。存储器存取电路508可以包含例如图4b的存储器存取电路427、求和缓冲器存取电路462、存储器子系统存取电路464等。硬件执行引擎506和存储器存取电路508中的每一个进一步包含操作数提取电路510(例如,硬件执行引擎506中的510a、存储器存取电路508中的510b等)。
[0102]
方法800从步骤802开始,其中处理电路500接收包含第一操作码(例如,操作码522)的指令(例如,指令522)。操作码522可以唯一地识别指令520和/或硬件执行引擎506所进行的操作。指令520还可以包含一个或多个操作数524,所述操作数可以包含配置参数以配置硬件执行引擎506和存储器存取电路508处的操作。操作数可以定义例如处理引擎411的输入数据类型、处理引擎411处的算术操作的精确度、激活函数引擎416所使用的激活函数的类型、池化引擎418所进行的池化操作等。
[0103]
在步骤804中,硬件指令解码器502从指令中提取第一操作码。硬件指令解码器502可以包含进行编程以存储多个操作码542的存储器装置(例如,寄存器),所述操作码可以包含操作码522。硬件指令解码器502可以在指令520中搜索与所述多个操作码中的任一个匹配的操作码,并输出匹配操作码(例如,操作码522)。硬件指令解码器502可以包含多个字节比较器,包含540a、540b、540n等,以进行搜索。为了进行搜索,指令520可以被分割成多个字节543(例如,543a、543b、543n),其中每个字节被馈送到字节比较器540之一以与所述多个操作码542中的每一个进行比较以搜索匹配操作码。在操作码跨越一个或多个分段字节543的情况下,可以将每个操作码的位子集提供到每个字节比较器以搜索操作码的匹配位子集。硬件指令解码器502进一步包含合并电路544,所述合并电路可以包含多路复用器或其它逻辑电路以输出匹配操作码。在操作码完全含在分段字节之一中的情况下,合并电路544可以基于来自所述字节比较器的指示,即操作码是在所述字节比较器所处理的字节中找到的,选择来自字节比较器之一的输出作为匹配操作码。此外,在操作码跨越一个或多个分段字节543的情况下,合并电路544可以合并来自字节比较器的输出,所述字节比较器指示操作码的位子集是在那些字节比较器所处理的字节中找到的。
[0104]
在步骤806中,控制器509从指令模式映射表504中并且基于第一操作码获得第一操作数的第一定义,所述指令模式映射表将所述多个操作码映射到多个指令中的操作数的多个定义。可编程指令模式映射表504可以包含进行编程以存储多个操作码542与多个定义554之间的映射的存储器装置(例如,寄存器)。每个定义都可以定义一个或多个操作数的位偏移和位长度。定义554的子集(例如,定义554a)所定义的一些操作数可以针对硬件执行引擎506,而定义554的另一子集(例如,定义554b)所定义的一些操作数可以针对存储器存取电路508。在一些实例中,可编程指令模式表504可以实施作为内容可寻址存储器(cam)以提高基于操作码检索操作数定义的速度。
[0105]
可编程硬件指令解码器502和可编程指令模式映射表504不需要存储加速器402所支持的指令的所有操作码和操作数定义。相反,可编程硬件指令解码器502和可编程指令模式映射表504可以通过指令模式程序进行编程以仅存储操作码和定义的子集。所述子集可以被处理电路500(和加速器402)用作加速器402当前所支持的指令集。与操作码和定义的
子集相关联的指令可以控制处理电路500以进行具体神经网络和/或应用的操作,包含例如存取特定维度的输入数据、进行一组特定的池化操作、使用一组特定的激活函数等。在所述神经网络和/或应用的操作完成之后,可编程硬件指令解码器502和可编程指令模式映射表504可以通过指令模式程序进行编程以存储另一指令模式程序,以存储操作码和定义的另一子集以向加速器402提供另一指令集。通过此类布置,可以减少存储在可编程硬件指令解码器502和可编程指令模式映射表504中的操作码和定义的数量,这不仅可以减少存储器装置存储操作码和定义所需的存储容量,而且还可以提高操作码和定义的搜索速度以加速解码操作。
[0106]
在步骤808中,控制器509将指令和第一定义转发到硬件执行引擎(例如,处理引擎411、激活函数引擎416、池化引擎418之一),以使硬件执行引擎506能够基于第一定义从指令中提取操作数,并且基于操作数进行操作(例如,算术操作、激活函数处理、池化操作等)。控制器509还可以将针对存储器存取指令的指令和操作数的第二定义转发到存储器存取电路508以进行存储器存取指令以支持硬件执行引擎506处的操作。
[0107]
在步骤810中,硬件执行引擎可以基于第一定义从指令中提取操作数,并且然后在步骤812中,通过基于操作数进行操作来执行指令。所述操作可以包含例如基于操作数所指定的精确度的算术操作、使用操作数所指定的激活函数的激活函数处理、操作数所指定的池化操作等。
[0108]
图8b展示了操作硬件加速器,如图4a的加速器402以在存储器处进行存储器存取操作的方法850。存储器可以是片上存储器,如存储器子系统404、求和缓冲器412等。方法850可以由处理电路500的存储器存取电路508执行。
[0109]
方法850从步骤852开始,其中存储器存取电路508接收指令。指令可以由控制器509转发。指令还由硬件指令解码器502解码以获得操作码,并且还可以将操作数定义从指令模式映射表504中获取到存储器存取电路508。
[0110]
在步骤854中,存储器存取电路508从指令中提取指示存储器存取电路所支持的多个存储器存取模式中的第一存储器存取模式的信息。在一些实例中,所述多个存储器存取模式包括存取不同维度的数据,如1d、2d、3d和4d数据。指令还可以包含多个维度数据的每个维度的操作数/参数,如要跳过的数据元素的数量、要存取的数据元素的数量等。在存储器存取模式仅存取多个维度的子集的情况下,未存取的维度的参数可以在指令中清零。
[0111]
在一些实例中,指令与硬件执行引擎处的多个数据元素的求和操作相关联。在一种存取模式下,存储器存取电路可以在求和操作完成时进行写入操作以存储所述多个数据元素的和,而在另一种存储器存取模式下,存储器存取电路可以进行写入操作以在求和操作期间存储所述多个数据元素的每个部分和。
[0112]
在步骤856中,存储器存取电路以第一存储器存取模式对存储器进行存取以支持硬件执行引擎执行指令。例如,存储器存取电路可以对存储器子系统404进行存取以将输入数据获取到脉动阵列以基于指令进行计算,并且可以将脉动阵列的输出数据存储在求和缓冲器412处。
[0113]
本公开的实施例还可以根据以下条款进行描述:
[0114]
1.一种硬件加速器,其包括:
[0115]
可编程硬件指令解码器,所述可编程硬件指令解码器进行编程以存储多个操作
码;
[0116]
可编程指令模式映射表,所述可编程指令模式映射表实施作为内容可寻址存储器(cam),并且进行编程以将所述多个操作码映射到多个指令中的操作数的多个定义;
[0117]
硬件执行引擎;以及
[0118]
控制器,所述控制器被配置成:
[0119]
接收包含所述多个操作码的第一操作码的指令;
[0120]
控制所述硬件指令解码器以从所述指令中提取所述第一操作码;
[0121]
从所述指令模式映射表中并且基于所述第一操作码获得第一操作数的第一定义;并且
[0122]
将所述指令和所述第一定义转发到所述硬件执行引擎以控制所述硬件执行引擎:
[0123]
基于所述第一定义从所述指令中提取所述第一操作数;并且
[0124]
基于所述第一操作数执行所述指令。
[0125]
2.根据条款1所述的硬件加速器,其中所述硬件指令解码器基于指定所述第一操作码的位在所述指令中的位置和大小的操作码编程文件进行编程。
[0126]
3.根据条款1或2所述的硬件加速器,其中所述多个定义中的每个定义指定操作数的位在相应指令中的位置和大小。
[0127]
4.根据条款3所述的硬件加速器,其中所述指令模式映射表可基于指定所述操作数在所述指令中的位位置和位偏移的指令模式编程文件进行编程。
[0128]
5.根据条款1到4中任一项所述的硬件加速器,其中所述cam将所述操作码映射到所述cam中定义的地址;并且
[0129]
其中所述映射基于所述操作码使得能够从所述cam中检索所述第一定义。
[0130]
6.一种硬件加速器,其包括:
[0131]
指令解码器;
[0132]
指令模式映射表;
[0133]
硬件执行引擎;以及
[0134]
控制器,所述控制器被配置成:
[0135]
接收指令;
[0136]
使用所述指令解码器从所述指令中提取操作码;
[0137]
从所述指令模式映射表中并且基于所述操作码获得所述指令的指令模式;并且
[0138]
将所述指令和所述指令模式转发到所述硬件执行引擎以使所述硬件执行引擎能够从所述指令中提取操作数并且基于所述操作数执行所述指令。
[0139]
7.根据条款6所述的硬件加速器,其中所述硬件指令解码器可基于操作码编程文件进行编程,以从所述指令的单个字节或从所述指令的多个字节中提取所述操作码的位;并且
[0140]
其中所述操作码编程文件指定所述操作码的所述位在所述指令中的位置和大小。
[0141]
8.根据条款7所述的硬件加速器,其中所述操作码编程文件指定所述操作码的多个位集在所述指令的多个字节中的位置和大小;并且
[0142]
其中所述硬件指令解码器基于所述操作码编程文件进行编程以从所述指令的所述多个字节中提取所述操作码的所述多个位集,并且组合所述多个位集以提取所述操作
码。
[0143]
9.根据条款6到8中任一项所述的硬件加速器,其中所述指令模式映射表可基于指定操作数在所述指令中的位位置和位偏移的指令模式编程文件进行编程。
[0144]
10.根据条款9所述的硬件加速器,其中所述指令模式映射表可在由所述硬件执行引擎执行包括第一指令和第二指令的指令文件期间进行编程;
[0145]
其中所述指令模式映射表基于第一指令模式编程文件进行编程以将所述第一指令的第一指令模式提供到所述硬件执行引擎;并且
[0146]
其中所述指令模式映射表基于第二指令模式编程文件进行编程以将所述第二指令的第二指令模式提供到所述硬件执行引擎。
[0147]
11.根据条款6到10中任一项所述的硬件加速器,其中所述指令模式映射表是使用内容可寻址存储器(cam)实施的,所述cam将所述操作码映射到所述cam中的多个指令模式的地址,并且使得能够基于所述操作码从所述cam中检索所述指令模式。
[0148]
12.根据条款6到11中任一项所述的硬件加速器,
[0149]
其中所述操作数是第一操作数;
[0150]
其中所述硬件加速器进一步包括存储器存取电路;并且
[0151]
其中所述控制器被配置成:
[0152]
从所述指令模式映射表中并且基于所述操作码获得所述第一操作数的第一定义和第二操作数的第二定义;并且
[0153]
将所述指令和所述第二定义转发到所述存储器存取电路以控制所述存储器存取电路从所述指令中提取所述第二操作数,并且基于所述第二操作数进行存储器存取操作,以支持由所述硬件执行引擎对所述指令的所述执行。
[0154]
13.根据条款12所述的硬件加速器,其进一步包括片上存储器;
[0155]
其中所述硬件执行引擎包括脉动阵列;
[0156]
其中所述操作码控制所述脉动阵列进行计算以生成中间输出;并且
[0157]
其中所述存储器存取操作将输入数据元素和权重元素从所述片上存储器获取到所述脉动阵列以进行所述计算。
[0158]
14.根据条款13所述的硬件加速器,其中所述指令是第一指令;
[0159]
其中所述硬件加速器进一步包括后处理引擎;
[0160]
其中所述控制器被配置成:
[0161]
接收第二指令;
[0162]
使用所述指令解码器从所述第二指令中提取第二操作码;
[0163]
从所述指令模式映射表中并且基于所述第二操作码获得第三操作数的第三定义和第四操作数的第四定义;
[0164]
将所述第二指令和所述第三定义转发到所述后处理引擎以使所述后处理引擎能够从所述第二指令中提取所述第三操作数,并且基于所述第三操作数对所述脉动阵列的所述中间输出进行后处理操作以生成输出;并且
[0165]
将所述第二指令和所述第四定义转发到所述存储器存取电路以将所述输出存储在所述片上存储器处。
[0166]
15.根据条款13或14所述的硬件加速器,其中所述脉动阵列可通过第一指令集编
程以进行第一神经网络的所述计算,并且可通过第二指令集编程以进行第二神经网络的所述计算;
[0167]
其中所述指令模式映射表基于第一指令模式编程文件进行编程以向所述脉动阵列提供指令模式以控制所述脉动阵列进行所述第一神经网络的所述计算;并且
[0168]
其中所述指令模式映射表基于第二指令模式编程文件进行编程以向所述脉动阵列提供指令模式以控制所述脉动阵列进行所述第二神经网络的所述计算。
[0169]
16.一种操作硬件加速器的方法,所述方法包括:
[0170]
接收包含第一操作码的指令;
[0171]
由所述硬件加速器的存储多个操作码的硬件指令解码器从所述指令中提取所述第一操作码;
[0172]
从所述硬件加速器的指令模式映射表中并且基于所述第一操作码获得第一操作数的第一定义,所述指令模式映射表将所述多个操作码映射到多个指令中的操作数的多个定义;
[0173]
将所述指令和所述第一定义转发到所述硬件加速器的硬件执行引擎;
[0174]
由所述硬件执行引擎基于所述第一定义从所述指令中提取所述第一操作数;以及
[0175]
由所述硬件执行引擎基于所述第一操作数执行所述指令。
[0176]
17.根据条款16所述的方法,其进一步包括:
[0177]
基于操作码编程文件对所述硬件指令解码器进行编程,以从所述指令的单个字节或从所述指令的多个字节中提取所述操作码的位;并且
[0178]
其中所述操作码编程文件指定所述操作码的所述位在所述指令中的位置和大小。
[0179]
18.根据条款17所述的方法,其中所述操作码编程文件指定所述操作码的多个位集在所述指令的多个字节中的位置和大小;并且
[0180]
其中所述硬件指令解码器基于所述编程文件进行编程以从所述指令的所述多个字节中提取所述操作码的所述多个位集,并且组合所述多个位集以提取所述操作码。
[0181]
19.根据条款16到18中任一项所述的方法,其进一步包括:
[0182]
基于指定操作数在所述指令中的位位置和位偏移的指令模式编程文件对所述指令模式映射表进行编程。
[0183]
20.根据条款19所述的方法,其进一步包括:
[0184]
在执行指令文件期间对所述指令模式映射表进行编程,所述指令文件包括第一指令和第二指令并且由所述硬件执行引擎执行,
[0185]
其中所述指令模式映射表基于第一指令模式编程文件进行编程以将所述第一指令的第一指令模式提供到所述硬件执行引擎;并且
[0186]
其中所述指令模式映射表基于第二指令模式编程文件进行编程以将所述第二指令的第二指令模式提供到所述硬件执行引擎。
[0187]
21.一种硬件加速器,其包括:
[0188]
硬件指令解码器,所述硬件指令解码器进行编程以存储多个操作码;
[0189]
指令模式映射表,所述指令模式映射表将所述多个操作码映射到多个指令中的操作数的多个定义;
[0190]
硬件执行引擎;
[0191]
存储器存取电路,所述存储器存取电路进行编程以便以多个存储器存取模式对存储器进行存取,每个存储器存取模式定义所述存储器中的一系列特定存取操作;
[0192]
控制器,所述控制器被配置成:
[0193]
接收包含所述多个操作码的第一操作码的指令;
[0194]
控制所述硬件指令解码器以从所述指令中提取所述第一操作码;
[0195]
从所述指令模式映射表中并且基于所述第一操作码获得第一操作数的第一定义和第二操作数的第二定义,所述第一操作数定义所述硬件执行引擎处的计算操作,所述第二操作数设置所述存储器存取电路处的所述多个存储器存取模式的存储器存取模式以支持硬件执行引擎处的所述计算操作;
[0196]
将所述指令和所述第一定义转发到所述硬件执行引擎以控制所述硬件执行引擎:
[0197]
基于所述第一定义从所述指令中提取所述第一操作数;并且
[0198]
基于所述第一操作数进行所述计算操作;并且
[0199]
将所述指令和所述第二定义转发到所述存储器存取电路以控制所述存储器存取电路:
[0200]
基于所述第二定义从所述指令中提取所述第二操作数;并且
[0201]
基于所述第二操作数在所述存储器处进行一系列存储器存取操作以支持所述硬件执行引擎处的所述计算操作。
[0202]
22.根据条款21所述的硬件加速器,其中所述存储器存取电路被配置成进行以下中的至少一项的所述一系列存储器存取操作:将所述计算操作的输入数据提供到所述硬件执行引擎,或者将所述计算操作的输出数据存储在所述存储器处。
[0203]
23.根据条款21或22所述的硬件加速器,其中所述多个存储器存取模式包括第一存储器存取模式和第二存储器存取模式;
[0204]
其中在所述第一存储器存取模式下,所述存储器存取电路进行编程以对针对一维第一数据的所述存储器进行存取;
[0205]
其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以对针对多维第二数据的所述存储器进行存取;并且
[0206]
其中所述对针对所述多维第二数据的所述存储器进行存取包括基于数据元素的维度在所述存储器处对所述第二数据的所述数据元素的一系列存取操作。
[0207]
24.根据条款23所述的硬件加速器,其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以对针对四维(4d)第二数据的所述存储器进行存取。
[0208]
25.根据条款21到24中任一项所述的硬件加速器,其中所述指令与所述硬件执行引擎处的多个数据元素的求和操作相关联;
[0209]
其中所述多个存储器存取模式包括第一存储器存取模式和第二存储器存取模式;
[0210]
其中在所述第一存储器存取模式下,所述存储器存取电路进行编程以在所述求和操作完成时进行写入操作以存储所述多个数据元素的总和;并且
[0211]
其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以进行写入操作以在所述求和操作期间存储所述多个数据元素的每个部分和。
[0212]
26.一种硬件加速器,其包括:
[0213]
硬件执行引擎;以及
[0214]
存储器存取电路,所述存储器存取电路被配置成:
[0215]
接收指令;
[0216]
从所述指令中提取指示所述存储器存取电路所支持的多个存储器存取模式的第一存储器存取模式的信息;并且
[0217]
以所述第一存储器存取模式对存储器进行存取以支持由所述硬件执行引擎执行所述指令。
[0218]
27.根据条款26所述的硬件加速器,其中所述指令包含:
[0219]
操作码,所述操作码指定所述硬件执行引擎处的计算操作;
[0220]
第一操作数,所述第一操作数指定所述第一存储器存取模式;以及
[0221]
第二操作数,所述第二操作数指定在所述第一存储器存取模式下的一个或多个存储器存取操作的参数。
[0222]
28.根据条款27所述的硬件加速器,其中所述第二操作数指定以下中的至少一项:在所述第一存储器存取模式下对所述存储器进行读取操作以将所述计算操作的输入数据获取到所述硬件执行引擎,或者在所述第一存储器存取模式下对所述存储器进行写入操作以存储所述计算操作的输出数据。
[0223]
29.根据条款27或28所述的硬件加速器,其中所述多个存储器存取模式包括所述第一存储器存取模式和第二存储器存取模式;
[0224]
其中在所述第一存储器存取模式下,所述存储器存取电路进行编程以对针对具有第一维度的一维第一数据的所述存储器进行存取;
[0225]
其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以对针对具有多个维度的多维第二数据的所述存储器进行存取;并且
[0226]
其中所述对针对所述多维第二数据的所述存储器进行存取包括基于数据元素的维度在所述存储器处对所述第二数据的所述数据元素的一系列存取操作。
[0227]
30.根据条款29所述的硬件加速器,其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以对针对四维第二数据的所述存储器进行存取。
[0228]
31.根据条款30所述的硬件加速器,其中所述四维第二数据存储在三维第二数据的组中,每个组对应于不同的第四维度;并且
[0229]
其中所述存储器存取电路进行编程以基于所述第二操作数存取所述三维第二数据的所述组中的一个或多个组。
[0230]
32.根据条款29到31中任一项所述的硬件加速器,其中针对所述多个维度的每个维度,所述第二操作数包含以下中的至少一个:指示要在两个经存取的数据元素之间跳过的所述数据元素的数量的第一参数,或者指示要存取的数据元素的总数量的第二参数。
[0231]
33.根据条款32所述的硬件加速器,其中在所述第一存储器存取模式下,除所述第一维度以外的维度的所述第一参数和所述第二参数为零。
[0232]
34.根据条款27到33中任一项所述的硬件加速器,其中所述计算操作包含所述硬件执行引擎处的多个元素的求和操作;
[0233]
其中所述多个存储器存取模式包括所述第一存储器存取模式和第二存储器存取模式;
[0234]
其中在所述第一存储器存取模式下,所述存储器存取电路进行编程以在所述求和
操作完成时进行写入操作以存储所述多个数据元素的总和;并且
[0235]
其中在所述第二存储器存取模式下,所述存储器存取电路进行编程以进行写入操作以在所述求和操作期间存储所述多个数据元素的每个部分和。
[0236]
35.根据条款27到34中任一项所述的硬件加速器,其进一步包括片上存储器;
[0237]
其中所述硬件执行引擎包括脉动阵列;
[0238]
其中所述操作码控制所述脉动阵列进行计算以生成中间输出;并且
[0239]
其中所述一个或多个存储器存取操作将输入数据元素和权重元素从所述片上存储器提供到所述脉动阵列以进行所述计算。
[0240]
36.一种操作硬件加速器的方法,所述方法包括:
[0241]
接收指令;
[0242]
由所述硬件加速器的存储器存取电路并且从所述指令中提取指示所述存储器存取电路所支持的多个存储器存取模式的第一存储器存取模式的信息;以及
[0243]
以所述第一存储器存取模式对存储器进行存取以支持由所述硬件加速器的硬件执行引擎执行所述指令。
[0244]
37.根据条款36所述的方法,其中所述指令包含:
[0245]
操作码,所述操作码指定所述硬件执行引擎处的计算操作;
[0246]
第一操作数,所述第一操作数指定所述第一存储器存取模式;以及
[0247]
第二操作数,所述第二操作数指定在所述第一存储器存取模式下的一个或多个存储器存取操作的参数。
[0248]
38.根据条款37所述的方法,其中所述多个存储器存取模式包括所述第一存储器存取模式和第二存储器存取模式;
[0249]
其中在所述第一存储器存取模式下,所述存储器存取电路对针对具有第一维度的一维第一数据的所述存储器进行存取;
[0250]
其中在所述第二存储器存取模式下,所述存储器存取电路对针对具有多个维度的多维第二数据的所述存储器进行存取;并且
[0251]
其中所述对针对所述多维第二数据的所述存储器进行存取包括基于数据元素的维度在所述存储器处对所述第二数据的所述数据元素的一系列存取操作。
[0252]
39.根据条款38所述的方法,其中针对所述多个维度的每个维度,所述第二操作数包含指示要在两个经存取的数据元素之间跳过的数据元素的数量的第一参数,以及指示要存取的数据元素的总数量的第二参数;并且
[0253]
其中在所述第一存储器存取模式下,除所述第一维度以外的维度的所述第一参数和所述第二参数为零。
[0254]
40.根据条款37到39中任一项所述的方法,其中所述计算操作包含所述硬件执行引擎处的多个元素的求和操作;
[0255]
其中所述多个存储器存取模式包括第一存储器存取模式和第二存储器存取模式;
[0256]
其中在所述第一存储器存取模式下,所述存储器存取电路在所述求和操作完成时进行写入操作以存储所述多个数据元素的求和;并且
[0257]
其中在所述第二存储器存取模式下,所述存储器存取电路进行写入操作以在所述求和操作期间存储所述多个数据元素的每个部分和。
[0258]
图9包含说明其中可以使用加速引擎960的主机系统900的实例的框图。图9的加速引擎960是可以包含一个或多个加速器的装置的实例,如在图4a中所展示。图9的示例主机系统900包含加速引擎960、主机处理器972、dram 930或处理器存储器、i/o装置932和支持系统974。在各个实施方案中,主机系统900可以包含此处未展示的其它硬件。
[0259]
主机处理器972是能够执行程序指令的通用集成电路。在一些实例中,主机处理器972可以包含多个处理核。多核处理器可以在同一处理器内包含多个处理单元。在一些实例中,主机系统900可以包含多于一个主机处理器972。在一些实例中,主机处理器972和加速引擎960可以是一个芯片,如同一封装体内的一个或多个集成电路。
[0260]
在各个实例中,主机处理器972可以通过一个或多个通信信道与主机系统900中的其它组件通信。例如,主机系统900可以包含主机处理器总线,主机处理器972可以使用所述主机处理器总线与例如dram 930通信。作为另一个实例,主机系统900可以包含i/o总线,例如基于pci的总线,主机处理器972可以通过所述i/o总线与例如加速引擎960和/或i/o装置932通信。在各个实例中,可替代地或另外地,主机系统900可以包含其它通信信道或总线,如串行总线、电源管理总线、存储装置总线等。
[0261]
在一些实例中,对主机处理器972执行的软件程序可以接收或生成要由加速引擎960处理的输入。在一些实例中,程序可以选择合适的神经网络来执行给定输入。例如,程序可以用于语言翻译,并且可以选择一个或多个能够进行语音识别和/或机器翻译的神经网络。在这些和其它实例中,程序可以通过要执行的神经网络配置加速引擎960,和/或可以选择加速引擎960上的先前已被配置成执行期望的神经网络的神经网络处理引擎。在一些实例中,一旦加速引擎960已开始对输入数据进行推断,主机处理器972就可以管理数据(如权重、指令、中间结果、条件层的结果和/或最终结果)移入到加速引擎960中或从所述加速引擎移出。
[0262]
在一些实例中,使用加速引擎960进行推断的软件程序可以从来自加速引擎960的条件层和/或从如dram 930中的存储位置读取结果。在这些实例中,程序可以确定神经网络接下来应该采取什么行动。例如,程序可以决定终止推断。作为另一个实例,程序可以确定改变推断的方向,所述程序可以由较低级别的代码和/或神经网络处理器翻译到下一层来执行。在这些和其它实例中,神经网络的执行流程可以通过软件进行协调。
[0263]
dram 930是由主机处理器972使用的存储器,以用于存储主机处理器972正在执行的程序代码以及要操作的值。在一些实例中,神经网络的数据(例如,权重值、指令和其它数据)可以全部或部分存储在dram 930中。dram是处理器存储器的通用术语,并且虽然dram是易失性存储器,但处理器存储器可以是易失性和/或非易失性的。尽管此处未说明,但是主机系统900可以包含用于其它目的的其它易失性和非易失性存储器。例如,主机系统900可以包含只读存储器(rom),其存储在通电时引导主机系统900的引导代码和/或基本输入/输出系统(bios)代码。
[0264]
虽然此处未展示,dram 930可以存储各种程序的指令,所述指令可以加载到主机处理器972中并且由其执行。例如,dram 930可以存储用于操作系统、一个或多个数据存储区、一个或多个应用程序、一个或多个驱动器和/或用于实施本文所公开的特征的服务的指令。
[0265]
操作系统可以管理和编排主机系统900的整体操作,如调度任务、执行应用,和/或
控制器外围装置的整体操作以及其它操作。在一些实例中,主机系统900可以托管一个或多个虚拟机。在这些实例中,每个虚拟机可以被配置成执行其自身的操作系统。操作系统的实例包含unix、linux、windows、mac os、ios、android等。可替代地或另外地,操作系统可以是专有操作系统。
[0266]
数据存储区可以包含由操作系统、应用程序或驱动器使用和/或操作的永久数据或临时数据。此类数据的实例包含网页、视频数据、音频数据、图像、用户数据等。在一些实例中,数据存储区中的信息可以通过网络提供到用户装置。在一些情况下,数据存储区可以另外地或可替代地包含所存储的应用程序和/或驱动器。另外地或可替代地,数据存储区可以存储标准和/或专有软件库,和/或标准和/或专有应用用户接口(api)库。存储在数据存储区中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
[0267]
驱动器可以包含提供主机系统900中的组件之间的通信的程序。例如,一些驱动器可以提供操作系统与外围装置或i/o装置932之间的通信。可替代地或另外地,一些驱动器可以提供应用程序与操作系统之间的通信,和/或主机系统900可存取的应用程序与外围装置之间的通信。在许多情况下,驱动器可以包含提供易于理解的功能的驱动器(例如,打印机驱动器、显示器驱动器、硬盘驱动器、固态装置驱动器等)。在其它情况下,驱动器可以提供专有或专门的功能。
[0268]
i/o装置932可以包含连接到用户输入和输出装置的硬件,如键盘、鼠标、笔、平板计算机、语音输入装置、触摸输入装置、显示器或监视器、扬声器和打印机,以及其它装置。i/o装置932还可以包含用于连接到网络980的存储驱动器和/或网络接口。例如,在各个实例中,主机系统900可以使用网络接口与存储装置、用户终端、其它计算装置或服务器和/或其它网络通信。
[0269]
在各个实例中,i/o装置932中的一个或多个i/o装置可以是存储装置。在这些实例中,存储装置包含非易失性存储器,并且可以存储程序指令和/或数据。存储装置的实例包含磁存储装置、光盘、固态盘、闪速存储器和/或磁带存储装置等。存储装置可以与主机系统900容纳在相同的机箱中,或可以在外部壳体中。存储装置可以是固定的(例如,通过螺钉连接)或可移除的(例如,具有物理释放机构和可能的热插拔机构)。
[0270]
存储装置、dram 930和主机系统900中的任何其它存储器组件是计算机可读存储介质的实例。计算机可读存储介质是能够以可以由如主机处理器972等装置读取的格式存储数据的物理介质。计算机可读存储介质可以是非暂时性的。非暂时性计算机可读介质可以在介质未通电时保留其上存储的数据。非暂时性计算机可读介质的实例包含rom装置、磁盘、磁带、光盘、闪存装置和固态驱动器等。如本文所使用的,计算机可读存储介质不包含计算机可读通信介质。
[0271]
在各个实例中,存储在计算机可读存储介质上的数据可以包含程序指令、数据结构、程序模块、库、其它软件程序组件、和/或可以在数据信号内传输的其它数据,如载波或其它传输。另外地或可替代地,计算机可读存储介质可以包含文档、图像、视频、音频和可以通过使用软件程序操作或操纵的其它数据。
[0272]
在各个实例中,i/o装置932中的一个或多个i/o装置可以是基于pci的装置。在这些实例中,基于pci的i/o装置包含与主机系统900通信的pci接口。术语“pci”或“基于pci”可以用于描述pci总线协议家族中的任何协议,包含原始pci标准、pci-x、加速图形端口
(agp)和pci-快速(pcie)或任何其它基于本文所讨论的pci协议的改进或派生协议。基于pci的协议是用于将如本地外围装置等装置连接到主机装置的标准总线协议。标准总线协议是其规范已由各个制造商对应并采用的数据传送协议。制造商确保兼容装置与实施总线协议的计算系统兼容,并且反之亦然。如本文所使用的,基于pci的装置还包含使用快速非易失性存储器(nvme)通信的装置。nvme是用于对连接到使用pcie的计算系统的非易失性存储介质进行存取的装置接口规范。
[0273]
基于pci的装置可以包含一个或多个功能。“功能”描述了可以由基于pci的装置提供的操作的硬件和/或软件。功能的实例包含大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密与解密控制器等。在一些情况下,基于pci的装置可以包含多于一个功能。例如,基于pci的装置可以提供大容量存储控制器和网络适配器。作为另一个实例,基于pci的装置可以提供两个存储控制器,以控制两个不同的存储资源。在一些实施方案中,基于pci的装置可以具有至多八个功能。
[0274]
在一些实例中,基于pci的装置可以包含单根i/o虚拟化(sr-iov)。sr-iov是可以包含在基于pci的装置中的扩展功能。sr-iov允许物理资源(例如,单个网络接口控制器)显示为多个虚拟资源(例如,六十四个网络接口控制器)。因此,提供某种功能的基于pci装置(例如,网络接口控制器)对于使用基于pci装置的装置来说,可能看起来是提供相同功能的多个装置。支持sr-iov的存储适配器装置的功能可以分类为物理功能(pf)或虚拟功能(vf)。物理功能是指装置中的可以发现、管理和操纵的具有全部特征的功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置相同的配置地址空间和存储器地址空间。物理功能可以具有多个与之相关联的虚拟功能。虚拟功能与物理功能类似,但是属于轻量级功能,通常可能缺乏配置资源,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以分配给在主机装置上运行的相应执行线程(例如,虚拟机)。
[0275]
在各个实施方案中,支持系统974可以包含用于协调加速引擎960的操作的硬件。例如,支持系统974可以包含协调加速引擎960的活动的微处理器,包含在加速引擎960上四处移动的数据。在此实例中,微处理器可以是可以执行微代码的集成电路。微代码是可以使集成电路在集成电路可以执行的操作中具有一定灵活性的程序代码,但是由于程序代码使用有限的指令集,微处理器可能具有比主机处理器972更有限的能力。在一些实例中,由微处理器执行的程序存储在微处理器的硬件上,或存储在主机系统900中的非易失性存储器芯片上。在一些实例中,微处理器和加速引擎960可以在芯片上,如在同一管芯上和同一封装体中的一个集成电路。
[0276]
在一些实例中,当对主机处理器972执行的程序请求执行神经网络时,支持系统974可以负责从主机处理器972获取指令。例如,主机处理器972可以向支持系统974提供一组输入数据以及要对所述一组输入数据进行的任务。在此实例中,支持系统974可以识别可以执行任务的神经网络,并且可以对加速引擎960进行编程以在所述一组输入数据上执行神经网络。在一些实例中,支持系统974仅需要选择神经网络处理器的合适的神经网络处理引擎。在一些实例中,在加速引擎960可以开始执行神经网络之前,支持系统974可能需要将神经网络的数据加载到加速引擎960上。在这些和其它实例中,支持系统974可以进一步接收执行神经网络的输出,并且将输出提供回主机处理器972。
[0277]
在一些实例中,支持系统974的操作可以由主机处理器972处理。在这些实例中,支持系统974可能不需要,并且可以从主机系统900中省略。
[0278]
在各个实例中,主机系统900可以包含表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和i/o机架的组合。
[0279]
用户装置可以包含用于对应用(例如,网络浏览器或移动装置应用)进行存取的计算装置。在一些实例中,应用可以由计算资源服务或服务提供商托管、管理和/或提供。应用可以使用户能够与服务提供商计算机交互以例如对网络内容(例如,网页、音乐、视频等)进行存取。用户装置可以是计算装置,例如移动电话、智能电话、个人数字助理(pda)、膝上型计算机、上网本计算机、台式计算机、薄型终端装置、平板计算机、电子书(e-book)阅读器、游戏机等。在一些实例中,用户装置可以通过一个或多个网络与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式作为其一部分的分布式系统的一部分。
[0280]
主机系统900还可以表示一个或多个服务提供商计算机。服务提供商计算机可以提供被配置成在用户装置上运行的本地应用,用户可以与所述本地应用交互。在一些实例中,服务提供商计算机可以提供计算资源,如但不限于客户端实体、低延迟数据存储装置、持久数据存储装置、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可以可操作以提供网络托管、数据库、计算机应用开发和/或实施平台、前述的组合等。在一些实例中,服务提供商计算机可以提供作为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可以包含一个或多个快速提供和释放的计算资源。这些计算资源可以包含计算、网络和/或存储装置。托管计算环境还可以称为云计算环境。服务提供商计算机可以包含一个或多个服务器,可能以集群的形式布置,作为服务器群,或者作为彼此不相关的单独服务器,并且可以托管应用和/或基于云的软件服务。这些服务器可以被配置为集成的分布式计算环境的一部分。在一些实例中,另外地或可替代地,服务提供商计算机可以包含计算装置,例如移动电话、智能电话、个人数字助理(pda)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、薄型终端装置、平板计算机、游戏机等。在一些实例中,服务提供商计算机可以与一个或多个第三方计算机通信。
[0281]
图10包含示例网络1000的图,所述网络可以包含一个或多个主机系统,如图9中展示的主机系统。例如,图10的示例网络1000包含多个节点1002a-1002h,其中所述多个节点中的一个或多个节点可以是如在图9中所展示的主机系统。节点1002a-1002h的其它节点可以是其它计算装置,每个计算装置至少包含用于存储程序指令的存储器、用于执行指令的处理器和用于连接到网络1000的网络接口。
[0282]
在各个实例中,网络1000可以用于处理数据。例如,输入数据可以在节点1002a-1002h之一处接收或从网络1000可以与其通信的其它网络1008接收。在此实例中,输入数据可以被引导到包含加速引擎的网络1000中的节点,以供加速引擎操作并产生结果。然后,可以将结果传输到接收输入数据的节点或其它网络。在各个实例中,输入数据可以从各种来源累积,包含节点1002a-1002h中的一个或多个节点和/或定位于其它网络1008中的计算装置,并且所累积的输入数据可以被引导到网络1000中的一个或多个主机系统。然后,可以将来自主机系统的结果分发回收集输入数据的来源。
[0283]
在各个实例中,节点1002a-1002h中的一个或多个节点可以负责如累积输入数据
以供主机系统操作、跟踪哪些主机系统忙碌与哪些主机系统可以接受更多工作、确定主机系统是否正确和/或最高效地操作、监测网络安全和/或其它管理操作的操作。
[0284]
在图10的实例中,节点1002a-1002h使用具有点对点链路的交换架构彼此连接。交换架构包含多个交换机1004a-1004d,所述多个交换机可以布置在如clos网络的多层网络中。在局域网(lan)区段之间过滤和转发数据包的网络装置可以被称为交换机。交换机通常在开放系统互连(osi)参考模型的数据链路层(第2层)处进行操作并且有时在网络层(第3层)处进行操作并且可以支持若干种数据包协议。图10的交换机1004a-1004d可以连接到节点1002a-1002h并且提供任何两个节点之间的多条路径。
[0285]
网络1000还可以包含用于与如路由器1006等其它网络1008连接的一个或多个网络装置。路由器使用报头和转发表来确定转发数据包的最佳路径,并且使用如互联网控制消息协议(icmp)等协议彼此通信并且配置任何两个装置之间的最佳路由。图10的路由器1006可以用于连接到其它网络1008,如子网、lan、广域网(wan)和/或因特网。
[0286]
在一些实例中,网络1000可以包含许多不同类型的网络中的任何一种或组合,如有线网络、互联网、无线网络、蜂窝网络和其它私有网络和/或公共网络。如果存在,互连的交换机1004a-1004d和路由器1006可以被称为交换结构1010、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“结构”和“网络”在本文中可以互换使用。
[0287]
节点1002a-1002h可以是表示用户装置、服务提供商计算机或第三方计算机的主机系统、处理器节点、存储子系统和i/o机架的任何组合。
[0288]
用户装置可以包含用于对应用1032(例如,网络浏览器或移动装置应用)进行存取的计算装置。在一些方面,应用1032可以由计算资源服务或服务提供商托管、管理和/或提供。应用1032可以允许用户能够与服务提供商计算机交互以例如对网络内容(例如,网页、音乐、视频等)进行存取。用户装置可以是计算装置,例如移动电话、智能电话、个人数字助理(pda)、膝上型计算机、上网本计算机、台式计算机、薄型终端装置、平板计算机、电子书(e-book)阅读器、游戏机等。在一些实例中,用户装置可以通过其它网络1008与服务提供商计算机通信。另外,用户装置可以是由服务提供商计算机(例如,与服务提供商计算机集成的控制台装置)管理、控制或以其它方式作为其一部分的分布式系统的一部分。
[0289]
图10的节点还可以表示一个或多个服务提供商计算机。一个或多个服务提供商计算机可以提供被配置成在用户装置上运行的本地应用,用户可以与所述本地应用交互。在一些实例中,服务提供商计算机可以提供计算资源如,但不限于客户端实体、低延迟数据存储装置、持久数据存储装置、数据存取、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。服务提供商计算机还可以可操作以向用户提供网络托管、数据库、计算机应用开发和/或实施平台、前述的组合等。在一些实例中,服务提供商计算机可以提供作为在托管计算环境中实施的一个或多个虚拟机。托管计算环境可以包含一个或多个快速提供和释放的计算资源。这些计算资源可以包含计算、网络和/或存储装置。托管计算环境还可以称为云计算环境。服务提供商计算机可以包含一个或多个服务器,可能以集群的形式布置,作为服务器群,或者作为彼此不相关的单独服务器并且可以托管应用1032和/或基于云的软件服务。这些服务器可以被配置为集成的分布式计算环境的一部分。在一些方面中,另外地或可替代地,服务提供商计算机可以包含计算装置,例如移动电话、智能电话、个人数字助理(pda)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、薄型终端装置、平板计算
机、游戏机等。在一些情况下,服务提供商计算机可以与一个或多个第三方计算机通信。
[0290]
在一种示例配置中,节点1002a-1002h可以包含至少一个存储器1018和一个或多个处理单元(或处理器1020)。处理器1020可以以硬件、计算机可执行指令、固件或其组合来实施。处理器1020的计算机可执行指令或固件实施方案可以包含以任何合适的编程语言编写的用于进行所描述的各种功能的计算机可执行指令或机器可执行指令。
[0291]
在一些情况下,硬件处理器1020可以是单核处理器或多核处理器。多核处理器可以在同一处理器内包含多个处理单元。在一些实例中,多核处理器可以共享某些资源,如总线和二级缓存或三级缓存。在一些情况下,单核处理器或多核处理器中的每个核还可以包含多个执行逻辑处理器(或执行线程)。在此类核中(例如,具有多个逻辑处理器的核),也可以共享执行管道的若干个阶段以及较低级别的缓存。
[0292]
存储器1018可以存储可在处理器1020上加载和执行的程序指令以及在这些程序执行期间生成的数据。根据节点1002a-1002h的配置和类型,存储器1018可以是易失性的(如ram)和/或非易失性的(如rom、闪速存储器等)。存储器1018可以包含操作系统1028、一个或多个数据存储装置1030、一个或多个应用程序1032、一个或多个驱动器1034和/或用于实施本文所公开的特征的服务。
[0293]
操作系统1028可以支持节点1002a-1002h的基本功能,如调度任务、执行应用和/或控制器外围装置。在一些实施方案中,服务提供商计算机可以托管一个或多个虚拟机。在这些实施方案中,每个虚拟机可以被配置成执行其自身的操作系统。操作系统的实例包含unix、linux、windows、mac os、ios、android等。操作系统1028也可以是专有操作系统。
[0294]
数据存储装置1030可以包含由操作系统1028、应用程序1032或驱动器1034使用和/或操作的永久数据或临时数据。此类数据的实例包含网页、视频数据、音频数据、图像、用户数据等。在一些实施方案中,数据存储装置1030中的信息可以通过网络1008提供到用户装置。在一些情况下,另外地或可替代地,数据存储装置1030可以包含所存储的应用程序和/或驱动器。另外地或可替代地,数据存储装置1030可以存储标准和/或专有软件库,和/或标准和/或专有应用用户接口(api)库。存储在数据存储区1030中的信息可以是机器可读的目标代码、源代码、解释代码或中间代码。
[0295]
驱动器1034包含可以提供节点中的组件之间的通信的程序。例如,一些驱动器1034可以提供操作系统1028与另外的存储装置1022、网络装置1024和/或i/o装置1026之间的通信。可替代地或另外地,一些驱动器1034可以提供应用程序1032与操作系统1028之间的通信,和/或服务提供商计算机可存取的应用程序1032与外围装置之间的通信。在许多情况下,驱动器1034可以包含提供易于理解的功能的驱动器(例如,打印机驱动器、显示器驱动器、硬盘驱动器和固态装置驱动器)。在其它情况下,驱动器1034可以提供专有或专门的功能。
[0296]
服务提供商计算机或服务器还可以包含另外的存储装置1022,所述服务提供商计算机或服务器可以包含可移除存储装置和/或不可移除存储装置。另外的存储装置1022可以包含磁存储装置、光盘、固态盘、闪速存储器和/或磁带存储装置。另外的存储装置1022可以与节点1002a-1002h容纳在同一机架中或者可以位于外置硬盘盒中。存储器1018和/或另外的存储装置1022及其相关联的计算机可读介质可以为计算装置提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。在一些实施方案中,存储器1018可以包含多
种不同类型的存储器,如sram、dram或rom。
[0297]
可移除和不可移除的存储器1018和另外的存储装置1022为计算机可读存储介质的实例。例如,计算机可读存储介质可以包含在用于存储信息的方法或技术中实施的易失性或非易失性、可移除或不可移除的介质,信息包含例如计算机可读指令、数据结构、程序模块或其它数据。存储器1018和另外的存储装置1022是计算机存储介质的实例。可以存在于节点1002a-1002h中的另外类型的计算机存储介质可以包含但不限于pram、sram、dram、ram、rom、eeprom、闪速存储器或其它存储技术、cd-rom、dvd或其它光存储装置、磁带盒、磁带、磁盘存储装置或其它磁存储装置、固态驱动器或一些可以用于存储期望信息并且可以由节点1002a-1002h存取的其它介质。计算机可读介质还包含上述任何介质类型的组合,包含一种介质类型的多个单元。
[0298]
可替代地或另外地,计算机可读通信介质可以包含计算机可读指令、程序模块或在数据信号内传输的其它数据,如载波或其它传输。然而,如本文所使用的,计算机可读存储介质不包含计算机可读通信介质。
[0299]
节点1002a-1002h还可以包含i/o装置1026,如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。节点1002a-1002h还可以包含一个或多个通信信道1036。通信信道1036可以提供一种介质,节点1002a-1002h的各个组件可以通过所述介质进行通信。一个或多个通信信道1036可以采用总线、环、交换结构或网络的形式。
[0300]
节点1002a-1002h还可以含有允许节点1002a-1002h与所存储的数据库、另一个计算装置或服务器、用户终端和/或网络1000上的其它装置通信的网络装置1024。
[0301]
在一些实施方案中,网络装置1024是外围装置,如基于pci的装置。在这些实施方案中,网络装置1024包含用于与主机装置通信的pci接口。术语“pci”或“基于pci”可以用于描述pci总线协议家族中的任何协议,包含原始pci标准、pci-x、加速图形端口(agp)和pci-快速(pcie)或任何其它基于本文所讨论的pci协议的改进或派生协议。基于pci的协议是用于将如本地外围装置等装置连接到主机装置的标准总线协议。标准总线协议是其规范已由各个制造商对应并采用的数据传送协议。制造商确保兼容装置与实施总线协议的计算系统兼容,并且反之亦然。如本文所使用的,基于pci的装置还包含使用快速非易失性存储器(nvme)通信的装置。nvme是用于对连接到使用pcie的计算系统的非易失性存储介质进行存取的装置接口规范。例如,总线接口模块可以实施nvme,并且网络装置1024可以使用pcie接口连接到计算系统。
[0302]
基于pci的装置可以包含一个或多个功能。“功能”描述了可以由网络装置1024所提供的操作。功能的实例包含大容量存储控制器、网络控制器、显示控制器、存储器控制器、串行总线控制器、无线控制器以及加密与解密控制器等。在一些情况下,基于pci的装置可以包含多于一个功能。例如,基于pci的装置可以提供大容量存储控制器和网络适配器。作为另一个实例,基于pci的装置可以提供两个存储控制器,以控制两个不同的存储资源。在一些实施方案中,基于pci的装置可以具有至多八个功能。
[0303]
在一些实施方案中,网络装置1024可以包含单根i/o虚拟化(sr-iov)。sr-iov是可以包含在基于pci的装置中的扩展功能。sr-iov允许物理资源(例如,单个网络接口控制器)显示为多个资源(例如,六十四个网络接口控制器)。因此,提供某种功能的基于pci装置(例如,网络接口控制器)对于使用基于pci装置的装置来说,可能看起来是提供相同功能的多
个装置。支持sr-iov的存储适配器装置的功能可以分类为物理功能(pf)或虚拟功能(vf)。物理功能是指装置中的可以发现、管理和操纵的具有全部特征的功能。物理功能具有可以用于配置或控制存储适配器装置的配置资源。物理功能包含与非虚拟化装置相同的配置地址空间和存储器地址空间。物理功能可以具有多个与之相关联的虚拟功能。虚拟功能与物理功能类似,但是属于轻量级功能,通常可能缺乏配置资源,并且通常由其底层物理功能的配置控制。物理功能和/或虚拟功能中的每一个可以分配给在主机装置上运行的相应执行线程(例如,虚拟机)。
[0304]
本文所描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以在非暂时性计算机可读介质上具体化并且由本文所描述的计算机系统中的任何计算机系统的处理器处理。应当注意,所描述的过程和架构可以在任何用户交互之前实时或以异步模式执行。可以以前述附图中建议的方式配置模块,和/或本文所描述的功能可以由作为单独模块存在的一个或多个模块提供,和/或本文所描述的模块功能可以分布在多个模块之上。
[0305]
因此,说明书和附图将被视为是说明性的,而不是限制性的。然而,显而易见的是,在不脱离权利要求所阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。
[0306]
其它变型处于本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替代构造,但是其某些展示的实例在附图中示出并且已经在上文中进行了详细描述。然而,应该理解的是,并非旨在将本公开限制于所公开的一种或多种具体形式,而是相反,其目的在于涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等同物。
[0307]
除非本文中另外指明或明显与上下文相矛盾,否则在描述所公开的实例的上下文中(特别是在以下权利要求的上下文中)使用的术语“一个/一种(a/an)”和“所述(the)”以及类似的指代词应被解释为涵盖单数和复数两者。术语“包括”、“具有”、“包含”以及“含有”应被解释为开放式术语(即,意指“包括含不限于”),除非另外指明。术语“连接”应被解释为部分或全部地包含在内、附接到或接合在一起,即使在存在中间物的情况下也是如此。除非本文中另有指示,否则对本文中的值的范围的叙述仅旨在用作单独地提及落入所述范围内的每个单独值的速记方法,并且每个单独值并入本说明书中,如同所述单独值在本文中单独地叙述一样。除非本文中另有指示或明显与上下文相矛盾,否则本文所描述的所有方法均可以以任何合适的顺序执行。除非另外声明,否则本文所提供的任何和所有实例或示例性语言(例如,“如”)的使用仅旨在更好地说明本公开的实例,而不对本公开的范围构成限制。本说明书中的任何语言都不应解释为将任何未要求保护的元素指示为是实践本公开必不可少的。
[0308]
除非另有明确说明,否则如短语“x、y或z中的至少一个”等析取语言旨在在如通常用于呈现项目、术语等的上下文中进行理解,其可以是x、y或z或其任何组合(例如,x、y和/或z)。因此,此类析取语言通常不旨在并且不应暗示某些实例要求x中的至少一个、y中的至少一个或z中的至少一个各自都存在。
[0309]
本文中描述了本公开的各个实例,包含诸位发明人已知的用于实施本公开的最佳模式。在阅读上述说明之后,本领域普通技术人员可以清楚这些实例的变型。诸位发明人预
期技术人员可以在适当时采用此类变型,并且诸位发明人旨在使本公开以与本文具体描述的方式不同的其它方式来进行实践。因此,在适用法律允许的情况下,本公开包含所附权利要求书中叙述的主题的所有修改和等效物。此外,除非本文另外指明或以其它方式明显与上下文相矛盾,否则本公开涵盖上述要素在其所有可能变型中的任何组合。
再多了解一些

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

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

相关文献