矩阵处理架构中的最大池化的制作方法

文档序号:14911877发布日期:2018-07-10 23:38阅读:844来源:国知局

本公开内容总体上涉及计算机处理的领域,并且更具体来说(尽管并非排他性地)涉及矩阵处理。



背景技术:

例如矩阵乘法和卷积之类的矩阵运算可能是高度处理器密集并且存储器密集的运算,这是因为矩阵运算常常涉及较大的多维矩阵运算对象(operand)上的复杂运算。因此,复杂矩阵运算的性能可能受到处理和/或存储器等待时间的限制。随着在多种应用中越来越多地利用矩阵运算并且随着数据集合的不断增长(从图形和图像处理到机器学习和人工智能),针对矩阵运算的高性能并且灵活的处理的需求也不断增加。

附图说明

从后面的详细描述(当与附图一起阅读时)最好地理解本公开内容。应当强调的是,根据行业内的标准实践,各种特征未必是按比例绘制的,并且仅仅是被用于说明的目的。在明确地或者隐含地示出比例的情况下,仅仅是提供一个说明性实例。在其他实施例中,为了讨论清楚起见可以任意增大或减小各种特征的规格。

图1示出了对应于根据特定实施例的示例性计算系统的示意图。

图2A-C示出了对应于矩阵处理架构的一个示例性实施例的方块图。

图3和4示出了对应于计算机处理器的示例性实施例的方块图。

图5示出了矩阵处理引擎的一个示例性实施例。

图6A-D示出了使用矩阵处理引擎的最大池化的实例。

图7示出了对应于使用矩阵处理引擎的最大池化的一个示例性实施例的流程图。

具体实施方式

后面的公开内容提供了用于实施本公开内容的不同特征的许多不同的实施例或实例。后面描述了组件和安排的具体实例以便简化本公开内容。当然这些具体实例仅仅是作为举例而不意图作出限制。此外,本公开内容可以在各个实例中重复附图标记和/或字母。这一重复是出于简单和清楚的目的,并且其本身并不表明所讨论的各个实施例和/或配置之间的关系。不同的实施例可以具有不同的优点,并且对于任何实施例不必要求特定的优点。

矩阵处理运算(例如涉及矩阵和/或矢量运算对象的线性代数运算)在计算系统中具有广泛的应用,从图形处理到机器学习和人工智能以及其他实例。举例来说,复杂矩阵运算可以被用来实施提供人工智能和机器学习能力的人工神经网络,其中包括计算机视觉、自主导航、语音和音频识别、自然语言处理以及其他实例。这些复杂矩阵运算(例如矩阵乘法和卷积)可以被用来实施神经网络的基本运算,比如前向传播、后向传播以及权重更新。但是这些矩阵运算可能是高度处理器和存储器密集的,这是因为其常常涉及大的多维矩阵运算对象上的复杂运算。因此,这些矩阵运算的性能可能受到处理和/或存储器等待时间的限制。随着在具有不断增长的数据集合的多种应用(比如人工智能和机器学习)中越来越多地利用矩阵运算,针对矩阵运算的高性能处理的需求也不断增加。

现有的矩阵处理方法受困于许多缺陷,特别当被用来在人工神经网络中实施人工智能和机器学习时。举例来说,虽然中央处理单元(CPU)可以被用来实施矩阵运算,但是许多CPU架构被设计成用于低算术强度运算(也就是算术运算相对于存储器操作的低比例),因此并未被设计成用于矩阵运算的高效执行。此外,许多CPU架构利用复杂的本地或高速缓冲存储器管理例程,从而对于涉及大矩阵运算对象的运算可能会增加处理开销和执行复杂度。图形处理单元(GPU)也可以被用来实施矩阵运算。但是GPU常常被设计成用于高精度计算并且可能提供对于特定矩阵运算而言并非必要的精度水平,从而减少了可以实施的矩阵运算的数量。因此,现有的矩阵处理方法对于特定矩阵运算(比如人工神经网络中的涉及卷积的运算)是低效的。

遍及本公开内容所描述的矩阵处理功能提供一种用于在人工神经网络中实施最大池化的高效的基于硬件的方法。人工神经网络例如包括一系列连接层。此外,在某些情况下,神经网络可以包括一个或多个最大池化层。最大池化例如是减小输入特征映射图的空间尺寸的下采样运算,以便减少神经网络中的参数和计算的数量。最大池化层例如常常被插入在卷积神经网络的相继卷积层之间。通过以下步骤来实施最大池化:遍及输入特征映射图滑动“最大过滤器”,识别输入特征映射图上的每一个过滤器位置内的最大数值,以及把对应的最大数值存储在输出特征矩阵中。经过神经网络的最大池化层的前向传播可以被称作前向池化,而经过神经网络的最大池化层的后向传播可以被称作后向池化。

后向池化被用来例如使用来自前向池化运算的最大数值和索引部分地重建原始输入特征映射图。可以顺序地处理每一个最大数值-索引对以便重建原始输入特征映射图的部分复制(partial facsimile)。当然,重建的特征映射图将仅仅保留来自各个原始过滤器位置的对应的最大数值,而所有其他元素都将被用零填充。

在后向池化期间,如果每一个最大数值-索引对都被孤立地完全处理并且写入到存储器,由于对应的过滤器位置处的重叠元素,这在重建原始特征映射图时将需要多次重复的读取和写入操作。因此,为了高效地重建原始特征映射图,关键是确定何时已处理了可能影响重建特征映射图的特定元素的所有数值-索引对,从而可以在适当的时间把该特定元素写入到存储器以便最小化总的存储器存取的次数。举例来说,假设过滤器移动是向右并且随后向下,则过滤器的左上角处的元素总是将不具有进一步更新的最近的元素。因此,该元素可以被安全地写入到存储器。本公开内容描述了用于通过这种方式高效地实施后向池化的各个实施例。

现在将更加具体地参照附图来描述可以被用来实施本公开内容的矩阵处理功能的示例性实施例。

图1示出了对应于根据特定实施例的示例性计算系统100的示意图。

在一些实施例中,遍及本公开内容所描述的矩阵处理功能可以被实施在系统100中。矩阵处理功能可以被使用在用于涉及矩阵运算的广泛应用和/或使用情况的系统100中,从图形处理到机器学习和人工智能以及其他实例。举例来说,在一些实施例中,矩阵处理功能可以被用来在人工神经网络中实施人工智能和机器学习。此外,可以通过系统100的任何组件来实施矩阵处理功能。举例来说,在所示出的实施例中,系统100包括边缘设备110、云端服务120、矩阵处理节点130以及网络150。矩阵处理节点130可以包括具有矩阵处理功能的任何组件或设备,包括系统100的任何组件。举例来说,矩阵处理节点130可以包括被实施成具有矩阵处理功能的云端服务120和/或服务器(例如数据中心中的应用服务器),被实施成具有矩阵处理功能的边缘设备110(例如末端用户设备112、物联网设备114、网关116)等等。后面将进一步讨论系统100的这些各种组件。

边缘设备110可以包括靠近通信系统100的“边缘”被部署或连接的任何装备和/或设备。边缘设备110可以彼此通信以及/或者通过一个或多个网络(比如网络150)和/或通信协议与其他远程网络和服务(例如云端服务120)进行通信。在一些实施例中,特定的边缘设备110可以包括遍及本公开内容所描述的矩阵处理功能,并且从而可以被用作矩阵处理节点130。在所示出的实施例中,边缘设备110包括末端用户设备112(例如台式计算机、膝上型计算机、移动设备)、物联网(IoT)设备114、网关和/或路由器116以及其他实例。

末端用户设备112可以包括允许或促进与计算系统100的用户交互的任何设备,其中例如包括台式计算机、膝上型计算机、平板设备、移动电话和其他移动设备、可佩戴设备(例如智能手表、智能眼镜、头戴式耳麦)以及其他实例。

IoT设备114可以包括能够在物联网(IoT)系统或网络中进行通信和/或参与在其中的任何设备。IoT系统可以是指由对于特定应用或使用情况相互操作并且协同运作的多个不同设备(例如IoT设备114)构成的新的或改进的自组织系统和网络。这样的自组织系统随着越来越多的产品和装备演进到变得“智能”而出现,这意味着其由计算机处理器控制或监测并且能够与其他设备进行通信。举例来说,IoT设备114可以包括用以允许与系统100的其他组件相互操作(比如与云端服务120和/或其他边缘设备110相互操作)的计算机处理器和/或通信接口。IoT设备114可以是全新开发的具有IoT能力的“绿地(greenfield)”设备,或者可以是通过把IoT能力集成到最初开发时不具有IoT能力的现有传统设备中而产生的“棕地”设备。举例来说,在某些情况下,可以从集成在“物件(things)”中或者附着到“物件”的传感器和通信模块建立IoT设备114,所述“物件”比如是装备、玩具、工具、车辆、活物(例如植物、动物、人类)等等。替换地或附加地,特定的IoT设备114可以依赖于中间组件(比如边缘网关或路由器116)来与系统100的各种组件进行通信。

IoT设备114可以包括用于监测、检测、测量和生成与其环境的特性相关联的传感器数据和信号的各种类型的传感器。举例来说,给定的传感器可以被配置成检测一项或多项对应的特性,比如移动、重量、物理接触、温度、风、噪声、光、位置、湿度、辐射、液体、特定化学成分、电池寿命、无线信号、计算机通信、带宽以及其他实例。传感器可以包括物理传感器(例如物理监测组件)和虚拟传感器(例如基于软件的监测组件)。IoT设备114还可以包括用以在其对应的环境中实施各种动作的致动器。举例来说,致动器可以被用来选择性地激活特定功能,比如切换安保系统(例如警报器、摄影机、锁)或家用电器(例如音频系统、照明、HVAC电器、车库门)的电力或操作以及其他实例。

实际上,本公开内容设想到使用IoT设备114和相关联的传感器/致动器的潜在地无限的领域。IoT设备114例如可以包括与任何类型的系统100和/或行业相关联的任何类型的装备和/或设备,其中包括运输(例如汽车、航空公司)、工业制造、能源(例如发电厂)、电信(例如因特网、蜂窝和电视服务提供商)、医疗(例如健康护理、制药)、食品加工和/或零售行业等等。例如在运输行业中,IoT设备114可以包括与飞机、汽车或船舶相关联的装备和设备,比如导航系统、自主飞行或驾驶系统、交通传感器和控制器以及/或者由传感器监测的任何内部机械或电气组件(例如引擎)。IoT设备114还可以包括与工业制造和生产、装运(例如货物跟踪)、通信网络(例如网关、路由器、服务器、蜂窝塔)、服务器机群、发电厂、风力发电场、油气管道、水处理和配送、废水收集和处理、天气监测(例如温度、风和湿度传感器)以及其他实例相关联的装备、设备和/或基础设施。IoT设备114例如还可以包括任何类型的“智能”设备或系统,比如智能娱乐系统(例如电视、音频系统、视频游戏系统)、智能家用或办公室电器(例如供热通风和空调(HVAC)电器、冰箱、洗衣机和烘干机、咖啡机)、电力控制系统(例如自动电力、光和HVAC控制)、安保系统(例如警报器、锁、摄影机、运动检测器、指纹扫描器、面部识别系统)、其他家庭自动化系统以及其他实例。IoT设备114可以被静态地放置,比如安放在建筑物、墙壁、地板、地面、路灯柱、指示牌、水塔或者任何其他固定或静态的结构上。IoT设备114也可以是移动的,比如车辆或飞机、无人机、包裹(例如用于跟踪货物)、移动设备、可穿戴设备以及其他实例中的设备。此外,IoT设备114还可以是任何类型的边缘设备110,其中包括末端用户设备112以及边缘网关和路由器116。

边缘网关和/或路由器116可以被用来促进去往和来自边缘设备110的通信。举例来说,网关116可以给最初开发为不具有任何通信能力的现有传统设备(例如“棕地”IoT设备)提供这样的能力。网关116还可以被利用来扩展具有短距离、专有或其他方面受限制的通信能力的边缘设备110的地理范围,该边缘设备110比如是具有Bluetooth或ZigBee通信能力的IoT设备114。举例来说,网关116可以充当IoT设备114与远程网络或服务之间的中介(通过使用其固有的通信能力(Bluetooth、ZigBee)为IoT设备114提供前传(front-haul),并且使用另一有线或无线通信介质(例如以太网、Wi-Fi、蜂窝)为其他网络150和/或云端服务120提供回传)。在一些实施例中,网关116可以通过专用的网关设备或者通过通用设备(比如另一个IoT设备114、末端用户设备112或者其他类型的边缘设备110)来实施。

在某些实例中,网关116还可以单独地或者与其他组件(比如云端服务120和/或其他边缘设备110)相结合地实施特定的网络管理和/或应用功能(例如用于IoT设备114的IoT管理和/或IoT应用功能)。举例来说,在一些实施例中,可以向或从网关设备116推送或拉取配置参数和/或应用逻辑,从而允许对于特定的IoT应用或使用情况配置处于网关116的范围内或其附近的IoT设备114(或其他边缘设备110)。

云端服务120可以包括通过网络150被远程托管或者处于“云端”中的服务。在一些实施例中,云端服务120例如可以被远程托管在数据中心处的服务器上(例如应用服务器或数据库服务器)。云端服务120可以包括能够由边缘设备110利用或者为边缘设备110利用的任何服务,其中包括而不限于数据存储、计算服务(例如数据分析、搜索、诊断和故障管理)、安保服务(例如监控、警报、用户认证)、地图绘制和导航、地理位置服务、网络或基础设施管理、IoT应用和管理服务、支付处理、音频和视频流送、消息传送、社交网络、新闻和天气以及其他实例。在一些实施例中,特定的云端服务120可以包括遍及本公开内容所描述的矩阵处理功能,并且从而可以被用作矩阵处理节点130。

一般来说,边缘设备110(并且特别是IoT设备114)可能会生成数量和种类都极多的数据。IoT边缘设备114通常把该数据卸载到云端以供(例如由云端服务120)处理和/或存储。但是云端服务120可能不一定适合应对由IoT设备114和其他边缘设备110生成的数据的快速增长的数量、种类和速度。举例来说,基于云端的处理在某些情况下可能并不是理想的,比如处理时间敏感或高度保密的数据或者在面对网络带宽约束时以及其他实例。在一些实施例中,云端服务120可以使用边缘设备110利用基于“边缘”的处理来改进云端服务的性能。边缘处理是涉及在网络边缘处(例如使用边缘设备110)靠近数据生成的位置处理特定数据的一种方法,而不是简单地把大量数据汇集到云端以供处理和存储。特定的数据在适当情况下仍然可以被发送到云端,比如用于更深度的分析和/或长期存储。边缘处理可以被用来补足基于云端的处理的缺点(例如当基于云端的处理是低效、无效和/或不安全时),并且从而改进对于由IoT设备114和/或其他边缘设备110生成的数据的日益增长的数量、种类和速度的应对。举例来说,在某些情况下,通过在其来源附近(例如在网络边缘处)而不是在云端中处理数据可以改进性能并且/或者避免系统故障或灾难。边缘处理还可以节省网络带宽,这在面对带宽约束和/或受到限制的网络连接时可能是特别有益的。

在一些实施例中,为云端服务120提供基于边缘的处理的边缘设备110可以被统称作“雾端(fog)”,这是因为其用来把“云端”扩展到网络的边缘,从而在网络边缘之上产生“雾端”。在一些实施例中,“雾端”中的设备110可以例如使用互连标准或协议彼此连接和/或通信。举例来说,在一些实施例中,可以使用由Open Connectivity FoundationTM(OCF)在2015年12月23日发布的开放互连联盟(OIC)标准规范1.0来实施设备互连,从而允许设备彼此发现并连接。可以使用的另一种互连协议是Thread,这是一种针对使用在“智能”家庭自动化和类似部署中的物联网(IoT)设备的联网协议,该联网协议由被称作“Thread Group”的组织联盟开发。还可以使用其他互连协议,其中例如包括优化链接状态路由(OLSR)协议或者针对移动自组织联网的更好方法(B.A.T.M.A.N.)等等。

网络150可以被用来促进计算系统100的组件之间的通信。举例来说,边缘设备110(比如末端用户设备112和IoT设备114)可以使用网络150彼此通信以及/或者访问一项或多项远程云端服务120。网络150可以包括任何数目或类型的通信网络,其中例如包括局域网、广域网、公共网络、因特网、蜂窝网络、Wi-Fi网络、短距离网络(例如Bluetooth或ZigBee)以及/或者任何其他有线或无线网络或通信介质。

系统100的任何、所有或其中一些计算设备可以适于执行任何操作系统,其中包括Linux或其他基于UNIX的操作系统、Microsoft Windows、Windows Server、MacOS、Apple iOS、Google Android或者任何定制的和/或专有的操作系统,以及适于特定操作系统的虚拟化执行的虚拟机。

虽然图1被描述成包含多个单元或者与多个单元相关联,但是在本公开内容的每一种替换实现方式中可能并不会利用在图1的系统100内示出的所有单元。此外,结合图1的实例描述的一个或多个单元可以位于系统100的外部,而在其他实例中,某些单元可以被包括在所描述的一个或多个其他单元以及未在所示出的实现方式中描述的其他单元之内或者作为其一部分。此外,在图1中示出的某些单元可以与其他组件相组合,以及被用于除了本文中所描述的那些目的之外的替换或附加目的。

示例性矩阵处理架构

图2A-C示出了对应于矩阵处理架构的一个示例性实施例的方块图。

在一些实施例中,遍及本公开内容所描述的矩阵处理功能可以使用矩阵处理架构来实施,比如图2A-2C的矩阵处理架构。矩阵处理架构(比如图2A-2C的矩阵处理架构)可以被实施或使用在多种系统、设备和/或组件中,比如遍及本公开内容所描述的那些系统、设备和/或组件,包括图1的系统100和/或其任何相关联的组件(例如云端服务120/数据中心服务器、边缘设备110、矩阵处理节点130)。在一些实施例中,图2A-2C的矩阵处理架构可以被用来在神经网络中实施人工智能和机器学习。图2A-2C中示出的矩阵处理架构仅仅是用于实施遍及本公开内容所描述的矩阵处理功能的一个示例性实施例。其他实施例可以使用不同类型、安排和/或数目的组件。举例来说,其他实施例可以包括任何数目的矩阵处理芯片220、矩阵处理集群230、矩阵处理单元(MPU)234、高带宽存储器(HBM)模块240和/或存储器资源块(MRB)238。此外,图2A-2C的矩阵处理架构的任何组件(例如矩阵处理系统200、矩阵处理芯片220和/或矩阵处理集群230的任何组件)的全部或一部分可以被实施成单独的或独立的组件或芯片,或者可以与其他组件或芯片集成在一起,比如把各种计算机组件集成到单一芯片中的芯片上系统(SoC)。

图2A示出了对应于矩阵处理系统200的一个示例性实施例的方块图。在所示出的实施例中,矩阵处理系统200包括主机处理器260、主机存储器270、矩阵处理资源210以及互连总线280。

主机处理器260可以被配置成控制和/或管理矩阵处理系统200。举例来说,在一些实施例中,主机处理器260可以使用矩阵处理资源210来实施复杂矩阵运算。主机处理器260可以是能够控制和/或管理矩阵处理系统200的矩阵处理功能的任何处理资源。举例来说,在一些实施例中,主机处理器260可以分别使用图3和4的计算机处理器300或400来实施。在一些实施例中,主机处理器260可以是可通信地耦合到矩阵处理资源210的单独的或独立的组件。或者在其他实施例中,主机处理器260和矩阵处理资源210可以被集成到相同的组件或芯片中。举例来说,在一些实施例中,矩阵处理系统200的组件(包括主机处理器260和矩阵处理资源210)可以被实施成芯片上系统(SoC)。

主机存储器270可以包括任何类型或组合的易失性和/或非易失性存储器。易失性存储器的实例包括各种类型的随机存取存储器(RAM),比如动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、静态随机存取存储器(SRAM)以及其他实例。非易失性存储器的实例包括基于盘的存储介质(例如磁性和/或光学存储介质)、固态存储装置(例如任何形式的持久性闪存,包括平面或三维(3D)NAND闪存或NOR闪存)、3D交叉点存储器、电可擦写可编程只读存储器(EEPROM)和/或其他类型的非易失性随机存取存储器(RAM)以及其他实例。主机存储器270例如可以被用来在执行期间存储用于主机处理器260的信息(比如代码和/或数据)。

在一些实施例中,互连总线280可以被用来把主机处理器260和主机存储器270可通信地耦合到矩阵处理资源210。互连总线280可以使用任何互连协议,比如外围组件快速互连(PCIe)、通用串行总线(USB)或小型计算机系统接口(SCSI)以及其他实例。

矩阵处理资源210可以包括被配置成实施矩阵运算的任何处理资源。举例来说,矩阵处理资源210可以被配置成实施矩阵乘法运算、卷积运算、以元素为单位(element-wise)的矩阵运算(例如+、*、/、<、>、==)、维度置乱运算和/或其任何组合。在一些实施例中,矩阵处理资源210可以包括针对实施矩阵运算而被设计和优化的处理资源。在一些实施例中,矩阵处理资源210还可以通过分级方式被安排成具有多个层级的处理资源。例如在所示出的实施例中,矩阵处理资源210包括多个矩阵处理芯片220,并且在每一个矩阵处理芯片220内还可以包括任何处理资源。举例来说,正如后面结合图2B和2C所讨论的那样,每一个矩阵处理芯片220可以包括多个高带宽存储器(HBM)模块240和多个矩阵处理集群230,并且每一个矩阵处理集群230可以包括多个矩阵处理单元234。因此,在一些实施例中,矩阵处理资源210可以包括多个矩阵处理芯片220,每一个矩阵处理芯片220上的多个高带宽存储器(HBM)模块240和多个矩阵处理集群230,以及/或者每一个矩阵处理集群230上的多个矩阵处理单元234。

矩阵处理芯片220例如可以是被配置成实施矩阵运算的任何芯片或其他组件。举例来说,在一些实施例中,矩阵处理芯片220可以是使用任何类型的互连接口(比如PCIe接口)连接到主机处理器260的外围卡或芯片。在一些实施例中,矩阵处理芯片220可以使用集成电路来实施,比如专用集成电路(ASIC)、现场可编程门阵列(FPGA)和/或任何其他类型的电路。在所示出的实施例中,矩阵处理芯片220被配置在循环安排中,其中在相邻的矩阵处理芯片220之间具有通信信道215。在一些实施例中,通信信道215可以提供相邻矩阵处理芯片220之间的单向通信。但是在其他实施例中,通信信道215可以提供相邻矩阵处理芯片220之间的双向通信。具有相邻处理资源之间的单向通信的循环安排可以被称作“单循环”配置,而具有相邻处理资源之间的双向通信的循环安排可以被称作“双循环”配置。

此外,虽然没有示出,但是在一些实施例中,矩阵处理系统200可以包括用以通过通信网络进行通信的通信接口。举例来说,在一些实施例中,矩阵处理系统200可以通过网络与一个或多个远程矩阵处理芯片进行通信,以便实施分布式矩阵运算。

图2B示出了对应于矩阵处理芯片220的一个示例性实施例的方块图。在所示出的实施例中,矩阵处理芯片220包括控制器222、主机接口224、芯片间链接225、高带宽存储器(HBM)模块240以及矩阵处理集群230。

控制器222可以被配置成控制和/或管理由矩阵处理芯片220实施的矩阵运算。在一些实施例中,控制器222可以与图2A的主机处理器260和/或图2C的矩阵处理集群230的主控制CPU(MCC)232相结合来控制和/或管理矩阵运算。举例来说,在一些实施例中,主机处理器260、控制器222和/或主控制CPU(MCC)232可以被配置成接收矩阵运算或命令,并且在矩阵处理集群230和高带宽存储器(HBM)模块240上分配矩阵运算和矩阵运算对象。在一些实施例中,控制器222可以是微处理器、集成电路以及/或者任何其他类型的电路和/或处理逻辑。

主机接口224可以是允许矩阵处理芯片220与图2A的主机处理器260进行通信的通信接口。在一些实施例中,例如控制器222可以使用主机接口224与图2A的主机处理器260进行通信。主机接口224可以使用任何类型的互连协议或接口,包括外围组件快速互连(PCIe)、通用串行总线(USB)或小型计算机系统接口(SCSI)以及其他实例。

芯片间链接(ICL)225可以允许矩阵处理芯片220与其他矩阵处理芯片进行通信。举例来说,芯片间链接225可以被用来实施图2A中的矩阵处理芯片220之间的通信信道215。芯片间链接225例如可以是允许矩阵处理芯片220与另一个矩阵处理芯片进行通信的任何通信接口。在一些实施例中,矩阵处理芯片220可以包括多个芯片间链接225(例如十二个芯片间链接)。在一些实施例中,芯片间链接225可以使用一个或多个串行器/解串器(SerDes)接口来实施。SerDes接口可以是把数据从串行转换到并行(并且,反之亦然)的通信接口。举例来说,SerDes接口的传送器可以包括串行到并行转换器,并且SerDes接口的接收器可以包括并行到串行转换器。在一些实施例中,矩阵处理芯片220对于去往另一个矩阵处理芯片的每一个连接可以使用多个SerDes接口(例如每一对连接的矩阵处理芯片之间的四个SerDes接口)。

高带宽存储器(HBM)模块240可以是与矩阵处理芯片220相关联的存储器组件,该存储器组件被用来存储矩阵运算对象和其他矩阵数据。在一些实施例中,高带宽存储器(HBM)模块240可以被设计成高效地存储和取回矩阵数据。在一些实施例中,高带宽存储器(HBM)模块240可以是被配置成在多个维度中存储和取回数据的多维存储器组件。举例来说,在一些实施例中,高带宽存储器(HBM)模块240可以是被配置成在二维(比如行和列)中存储和取回数据的存储器组件。但是其他实施例可以使用被配置成使用任何其他数目的维度(例如一维、三维、四维等等)存储和取回数据的存储器组件。在所示出的实施例中,矩阵处理芯片220包括四个高带宽存储器(HBM)模块240a-d。在一些实施例中,高带宽存储器(HBM)模块240可以由矩阵处理芯片220的各个矩阵处理集群230共享。

矩阵处理集群230可以包括被配置成实施矩阵运算(比如矩阵乘法、卷积和/或维度置乱以及其他实例)的处理资源。在一些实施例中,矩阵处理集群230可以被共同用来通过并行地实施矩阵处理而执行特定矩阵运算。在所示出的实施例中,矩阵处理芯片220包括十二个矩阵处理集群230a-l。此外,在所示出的实施例中,使用二维网格互连拓扑来配置或安排矩阵处理集群230。矩阵处理集群230的互连拓扑可以促进矩阵处理集群230之间的循环通信。此外,其他实施例可以包括任何数目和/或安排的矩阵处理集群230。

图2C示出了对应于矩阵处理集群230的一个示例性实施例的方块图。在所示出的实施例中,矩阵处理集群230包括主控制CPU(MCC)232、矩阵处理单元(MPU)234、切片引擎236以及存储器资源块(MRB)238。

主控制CPU(MCC)232可以被配置成控制和/或管理由矩阵处理集群230实施的矩阵运算。在一些实施例中,主控制CPU 232可以是微处理器、集成电路以及/或者任何其他类型的电路和/或处理逻辑。在一些实施例中,主控制CPU 232可以接收来自另一个组件(比如图2A的主机处理器260和/或图2B的控制器222)的指令。基于所述指令,主控制CPU 232随后可以使用矩阵处理单元234来实施矩阵运算,比如矩阵乘法、卷积和/或维度置乱以及其他实例。举例来说,主控制CPU 232可以接收实施矩阵乘法运算(比如C=A*B)的指令。所述指令可以包括对应于每一个矩阵的句柄或标识符,并且还可以表明应当如何把矩阵存储在存储器资源块(MRB)238中。随后可以把矩阵A和B分解成一系列更小的矩阵(例如32x32矩阵)。随后可以在更小的矩阵上实施矩阵运算,并且可以把部分结果存储在存储器资源块(MRB)238中,直到完全计算出输出矩阵C为止。

矩阵处理单元(MPU)234可以被配置成实施矩阵运算,比如矩阵乘法、卷积和/或维度置乱。在一些实施例中,矩阵处理单元(MPU)234基于接收自主控制CPU(MCC)232的命令实施矩阵运算。此外,在一些实施例中,每一个矩阵处理集群230可以包括多个矩阵处理单元(MPU)234。例如在所示出的实施例中,矩阵处理集群230包括两个矩阵处理单元(MPU)234。矩阵处理单元(MPU)234可以能够在小的矩阵(例如32x32矩阵)上实施例如矩阵乘法之类的矩阵运算。在某些情况下,矩阵处理单元(MPU)234可以被设计和/或优化以实施矩阵乘法运算。矩阵处理单元(MPU)234可以从存储器资源块(MRB)238加载矩阵运算对象。在一些实施例中,矩阵处理单元(MPU)234可以支持以下算术运算:矩阵乘法;一元矩阵运算;二元矩阵运算,比如加法(+)、减法(-)、乘法(*)、除法(/)、以比特为单位(bitwise)的XOR(异或)、AND(与)、OR(或)、逻辑和算术左移和右移、比较(>、<、>=、<=、==、!=);以及以列为单位、以行为单位和矩阵范围的运算,比如求和、最大数值和最小数值。

切片引擎236可以被配置成把特定矩阵运算的矩阵运算对象切片成更小的部分矩阵。举例来说,在一些实施例中,主控制CPU(MCC)232可以使用切片引擎236把矩阵运算对象分解成用于矩阵处理单元(MPU)234的更小的部分矩阵。在一些实施例中,切片引擎236可以包括用以对于卷积运算实施矩阵切片的卷积切片引擎(CSE)。举例来说,在一些实施例中,卷积切片引擎(CSE)可以按照允许把卷积运算转换成矩阵乘法运算的方式对矩阵运算对象进行切片,从而允许相同的处理逻辑实施矩阵乘法和卷积运算全部二者。此外,在一些实施例中,切片引擎236和/或相关联的卷积切片引擎(CSE)可以被用来实施维度置乱运算,以便对矩阵的各个维度进行重新排序。

存储器资源块(MRB)238可以是矩阵处理集群230上的存储器组件,该存储器组件被用来存储矩阵运算对象和其他矩阵数据。在一些实施例中,存储器资源块(MRB)238可以被设计成高效地存储和取回矩阵数据。在一些实施例中,存储器资源块(MRB)238可以是被配置成在多个维度中存储和取回数据的多维存储器组件。举例来说,在一些实施例中,存储器资源块(MRB)238可以是被配置成在二维(比如行和列)中存储和取回数据的存储器组件。在所示出的实施例中,矩阵处理集群230包括十个存储器资源块(MRB)238。但是其他实施例在矩阵处理集群230上可以包括不同数目的存储器资源块(MRB)238。在一些实施例中,每一个存储器资源块(MRB)238可以能够存储特定尺寸的矩阵(例如256x512矩阵)。在一些实施例中,存储器资源块(MRB)238可以由特定矩阵处理集群230的各个矩阵处理单元(MPU)234共享。

在一些实施例中,图2A-2C的矩阵处理架构可以被用来实施遍及本公开内容所描述的矩阵处理功能。举例来说,矩阵处理系统200可以被用来使用分布式方法实施矩阵运算,所述分布式方法使用可用的处理资源实现100%的处理效率。举例来说,在一些实施例中,可以将矩阵运算分配在针对矩阵处理被优化的多个处理资源210上,从而允许在矩阵运算的整个持续时间期间完全利用处理资源210。举例来说,矩阵处理系统200可以包括针对实施矩阵运算被设计和优化的多个处理资源210。在一些实施例中,三个处理资源210可以被配置在单循环或双循环安排中。此外,处理资源210可以通过分级方式被安排成具有多个层级的处理资源。举例来说,在一些实施例中,处理资源210可以包括多个矩阵处理芯片220,每一个矩阵处理芯片220上的多个高带宽存储器(HBM)模块240和多个矩阵处理集群230,以及/或者每一个矩阵处理集群230上的多个矩阵处理单元(MPU)234。这种处理架构允许以100%的处理效率将矩阵运算分配在多个处理资源210和/或处理分级结构上。此外,这种处理架构允许在并行操作的可变数目的处理资源210上高效地缩放矩阵运算,同时仍然实现100%的处理效率。举例来说,可以通过调节被用来实施特定矩阵运算的处理资源210的数目(比如矩阵处理系统200或服务器的数目,每一个矩阵处理系统200或服务器中的矩阵处理芯片220的数目等等)而实现缩放。

作为一个实例,图2A-2C的矩阵处理架构可以被用来实施矩阵乘法和/或卷积运算。举例来说,在一些实施例中,可以按照对于传送矩阵运算对象导致的等待时间小于矩阵处理时间的方式将矩阵乘法运算分配在多个处理资源210上,从而允许在实施矩阵处理的同时完成矩阵运算对象的传送。举例来说,对于涉及具有特定维度的矩阵运算对象的特定矩阵运算(例如具有“纤细”矩阵运算对象的矩阵乘法),存取和传送矩阵运算对象所需的时间可能会超出实施实际的矩阵计算所需的时间,从而在从存储器获得和/或向处理资源210传送矩阵运算对象的同时导致空闲处理时间。举例来说,单循环配置(例如其中每一个处理资源210在任何给定时间只从一个相邻的处理资源210获得矩阵运算对象和数据)对于这些特定类型的矩阵运算和矩阵运算对象可能无法实现100%的处理效率。但是处理资源210的双循环配置允许每一个处理资源在同时从其两个相邻处理资源210获得矩阵运算对象和数据时实施矩阵计算,从而显著减少用于传送矩阵运算对象的等待时间,并且从而避免任何空闲处理时间。举例来说,在使用与单循环方法相对的双循环方法时,对应于特定运算的传送等待时间可以被减半。通过这种方式,用于传送矩阵运算对象和矩阵数据的等待时间可以完全被矩阵处理时间掩盖,从而避免任何浪费的或空闲的处理时间并且实现100%的处理效率。相应地,即使对于大的矩阵运算对象和/或具有特定维度的矩阵运算对象也可以高效地实施矩阵运算(例如矩阵乘法或GEMM),比如既不是方阵也不是单一矢量的大矩阵运算对象(例如具有比宽度大得多的高度的“纤细”矩阵)。举例来说,即使在把两个纤细矩阵、一个纤细矩阵和一个方阵等等相乘时也可以高效地实施矩阵乘法。类似地,可以按照使用可用的处理资源得到100%处理效率的方式将卷积运算分配在多个处理资源210上。

作为一个实例,当接收到矩阵运算或命令时,可以将矩阵运算分配在矩阵处理系统200的各个处理资源210上。举例来说,可以基于可用处理资源210的数目对矩阵运算对象(或输入矩阵)进行分区。此外,在一些实施例中,所述分区可以跨越矩阵运算对象的各行以及/或者跨越矩阵运算对象的任何其他维度。每一个分区随后可以被分配到特定的处理资源210。每一个处理资源210随后可以实施多项部分矩阵运算。在一些实施例中,所述多项部分矩阵运算在多级中被实施。举例来说,每一个处理资源210可以实施特定一级的部分矩阵运算,同时向/从其相邻处理资源210发送和接收部分矩阵数据。举例来说,在处理资源210的单循环配置中,每一个处理资源210或者向每一个相邻处理资源发送或者从每一个相邻处理资源接收部分矩阵数据。类似地,在处理资源210的双循环配置中,每一个处理资源210可以向/从每一个相邻处理资源210发送和接收部分矩阵数据。

每一个处理资源210随后可以使用所述部分矩阵数据用于后续的部分矩阵运算。随后可以基于由处理资源210共同实施的部分矩阵运算来确定矩阵运算的结果。

此外,如果处理资源210通过分级方式被安排,则可以按照分级方式来分配矩阵运算。举例来说,最初可以基于可用矩阵处理芯片220的数目对矩阵运算对象(或输入矩阵)进行分区。每一个分区和相关联的部分矩阵运算随后可以被分配到特定的矩阵处理芯片220。被分配到特定矩阵处理芯片220的分区和部分矩阵运算随后可以被类似地分区并且分配在该特定矩阵处理芯片220的各个矩阵处理集群230和/或高带宽存储器(HBM)模块240上。举例来说,对于特定的矩阵运算,可以将部分矩阵运算分配到每一个矩阵处理集群230。或者,对于特定的矩阵运算,可以将部分矩阵运算分配在各个“逻辑处理节点”(例如与一个高带宽存储器(HBM)模块240相关联的矩阵处理集群230的各个群组)上,并且随后可以分配到特定逻辑处理节点的每一个矩阵处理集群230。在一些实施例中,各个矩阵处理集群230(和/或逻辑处理节点)可以类似于矩阵处理芯片220被循环地配置。被分配到特定矩阵处理集群230的分区和部分矩阵运算随后可以被类似地分区并且分配在该特定矩阵处理集群230的各个矩阵处理单元(MPU)234上。

示例性计算机处理器架构

图3和4示出了对应于可以根据本文中所公开的实施例使用的计算机处理器的示例性实施例的方块图。举例来说,图3和4中示出的计算机处理器可以被用作与矩阵处理系统相关联的主机处理器(例如图2A的矩阵处理系统200中的主机处理器260),或者被用作与遍及本公开内容所讨论的其他组件和/或设备相关联的处理器(例如与图1的系统100中的组件相关联的处理器)。在膝上型计算机、台式计算机、手持式PC、个人数字助理、工程设计工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的技术领域中已知的其他处理器和系统设计和配置也是适当的。一般来说,能够合并本文中所公开的处理器和/或其他执行逻辑的多种系统或电子设备通常是适当的。

图3示出了对应于处理器300的一个示例性实施例的方块图。处理器300是可以与遍及本公开内容所描述的实施例相结合地使用的一种类型的硬件设备的一个实例。处理器300可以是任何类型的处理器,比如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、多核处理器、单核处理器或者用以执行代码的其他设备。虽然在图3中仅仅示出了一个处理器300,但是处理单元可以替换地包括多于一个的图3中示出的处理器300。处理器300可以是单线程核心,或者对于至少一个实施例,处理器300可以是多线程的,因为其对于每个核心可以包括多于一个硬件线程上下文(或“逻辑处理器”)。

图3还示出了根据一个实施例的耦合到处理器300的存储器302。存储器302可以是本领域技术人员已知或者可以通过其他方式获得的(包括存储器分级结构的各个层的)多种存储器中的任一种。这样的存储器单元可以包括而不限于随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)的逻辑块、可擦写可编程只读存储器(EPROM)以及电可擦写可编程ROM(EEPROM)。

处理器300可以执行与本文中所详述的算法、处理或操作相关联的任何类型的指令。通常来说,处理器300可以把单元或事项(例如数据)从一个状态或物件变换到另一个状态或物件。

代码304可以是将由处理器300执行的一条或多条指令,并且可以被存储在存储器302中或者可以被存储在软件、硬件、固件或其任何适当组合中,或者在适当情况下并且基于特定需求可以被存储在任何其他内部或外部组件、设备、单元或对象中。在一个实例中,处理器300可以遵循由代码304表明的指令的程序序列。每一条指令进入前端逻辑306并且由一个或多个译码器308处理。所述译码器可以作为其输出生成微操作,比如处于预定义格式中的固定宽度微操作,或者可以生成反映出原始代码指令的其他指令、微指令或控制信号。前端逻辑306还可以包括寄存器重命名逻辑和调度逻辑,其通常分配资源并且把对应于指令的操作排入队列以供执行。

处理器300还可以包括具有执行单元316a、316b、316n等等的集合的执行逻辑314。一些实施例可以包括专用于特定功能或功能集合的一定数目的执行单元。其他实施例可以仅包括一个执行单元或者可以实施特定功能的一个执行单元。执行逻辑314实施由代码指令规定的操作。

在完成执行由代码指令规定的操作之后,后端逻辑318可以引退(retire)代码304的指令。在一个实施例中,处理器300允许乱序执行但是要求指令的按顺序引退。引退逻辑320可以采取多种已知的形式(例如重新排序缓冲器等等)。通过这种方式,处理器300在代码304的执行期间至少在由以下各项生成的输出方面被变换:由寄存器重命名逻辑310利用的译码器、硬件寄存器和表,以及由执行逻辑314修改的任何寄存器(未示出)。

虽然在图3中未示出,但是处理单元可以包括具有处理器300的芯片上的其他单元。举例来说,处理单元可以包括存储器控制逻辑以及处理器300。处理单元可以包括I/O控制逻辑,并且/或者可以包括与存储器控制逻辑集成在一起的I/O控制逻辑。处理单元还可以包括一个或多个高速缓存。在一些实施例中,非易失性存储器(比如闪存或熔丝)也可以被包括在具有处理器300的芯片上。

图4示出了对应于多处理器400的一个示例性实施例的方块图。如图4中所示,多处理器系统400是点对点互连系统,并且包括通过点对点互连450耦合的第一处理器470和第二处理器480。在一些实施例中,处理器470和480当中的每一个可以是图3的处理器300的某一版本。

处理器470和480被示出为分别包括集成的存储器控制器(IMC)单元472和482。处理器470作为其一部分还包括总线控制器单元点对点(P-P)接口476和478;类似地,第二处理器480包括P-P接口486和488。处理器470、480可以通过点对点(P-P)接口450使用P-P接口电路478、488交换信息。如图4中所示,IMC 472和482把处理器耦合到对应的存储器,也就是存储器432和存储器434,所述存储器可以是在本地附着到对应的存储器的主存储器的一部分。

处理器470、480可以通过单独的P-P接口452、454使用点对点接口电路476、494、486、498与芯片组490交换信息。芯片组490可以可选地通过高性能接口439与协处理器438交换信息。在一个实施例中,协处理器438是专用处理器,比如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器、矩阵处理器等等。

共享高速缓存(未示出)可以被包括在任一个处理器中或者处于全部两个处理器之外,但是通过P-P互连与处理器连接,从而在处理器被置于低功率模式下的情形,可以把任一个或两个处理器的本地高速缓存信息存储在共享高速缓存中。

芯片组490可以通过接口496耦合到第一总线416。在一个实施例中,第一总线416可以是外围组件互连(PCI)总线,或者是例如PCI Express总线之类的总线或者另一种第三代I/O互连总线,但是本公开内容的范围并不限于此。

如图4中所示,各种I/O设备414可以耦合到第一总线416,连同把第一总线416耦合到第二总线420的总线桥接器418。在一个实施例中,一个或多个附加的处理器415耦合到第一总线416,所述处理器415比如是协处理器、高吞吐量MIC处理器、GPGPU、加速器(比如,例如图形加速器或数字信号处理(DSP)单元)、矩阵处理器、现场可编程门阵列或者任何其他处理器。在一个实施例中,第二总线420可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线420,所述设备例如包括键盘和/或鼠标422、通信设备427和存储单元428(比如可以包括指令/代码和数据430的盘驱动器或其他大容量存储设备)。此外,音频I/O 424可以耦合到第二总线420。应当提到的是,其他架构也是可能的。举例来说,取代图4的点对点架构,系统可以实施多点分支总线或其他此类架构。

图4的任何组件的全部或一部分可以被实施成单独的或独立的组件或芯片,或者可以与其他组件或芯片集成在一起,比如把各种计算机组件集成到单一芯片中的芯片上系统(SoC)。

本文中所公开的机制的实施例可以通过硬件、软件、固件或者此类实施方法的组合来实施。某些实施例可以被实施成执行在可编程系统上的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储单元)、至少一个输入设备以及至少一个输出设备。

程序代码(比如图4中示出的代码430)可以被应用于输入指令,以便实施本文中所描述的功能并且生成输出信息。所述输出信息可以按照已知的方式被应用于一个或多个输出设备。出于本申请的目的,处理系统包括任何具有处理器的系统;所述处理器比如是,例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。

程序代码可以被实施在高层级过程化或面向对象的编程语言中,以便与处理系统进行通信。如果希望的话,程序代码还可以被实施在汇编或机器语言中。实际上,本文中所描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是已编译或已解译语言。

至少一个实施例的一个或多个方面可以通过存储在表示处理器内的各种逻辑的存储在机器可读介质上的代表性指令来实施,所述指令在由机器读取时使得所述机器构造用以实施本文中所描述的技术的逻辑。这样的表示被称作“IP核心”,其可以被存储在有形机器可读介质上并且被提供到各种顾客或制造设施,以便加载到实际制成逻辑或处理器的构造机器中。

这样的机器可读存储介质可以包括而不限于由机器或设备制造或形成的物品的非瞬时性的有形安排,其中包括例如硬盘之类的存储介质;包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘的任何其他类型的盘;比如只读存储器(ROM)、随机存取存储器(RAM)(比如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦写可编程只读存储器(EPROM)、闪存、电可擦写可编程只读存储器(EEPROM)、相变存储器(PCM)之类的半导体设备;磁卡或光学卡;或者适合于存储电子指令的任何其他类型的介质。

相应地,本公开内容的实施例还包括其中包含指令或包含设计数据的非瞬时性的有形机器可读介质,比如定义本文中所描述的结构、电路、装置、处理器和/或系统特征的硬件描述语言(HDL)。这样的实施例也可以被称作程序产品。

矩阵处理引擎

图5示出了矩阵处理引擎500的一个示例性实施例。在一些实施例中,矩阵处理引擎500可以由矩阵处理架构(比如图2A-2C的矩阵处理架构)实施。举例来说,在一些实施例中,矩阵处理引擎500可以由矩阵处理芯片上的矩阵处理集群(例如来自图2B和2C的矩阵处理芯片220的矩阵处理集群230)实施。在这些实施例中,特定的矩阵处理集群可以使用其相关联的矩阵处理引擎500来实施基于矩阵的处理和运算,比如与分配在多个矩阵处理资源上的特定矩阵运算相关联的部分矩阵运算(例如,像遍及本公开内容所描述的那样)。

在一些实施例中,矩阵处理引擎500可以被用来实施用于人工神经网络的运算,比如前向传播、后向传播和/或权重更新运算。在某些情况下,例如矩阵处理引擎500可以被用来对于人工神经网络的最大池化层实施前向传播和后向传播(例如,像后面结合图6A-D所描述的那样)。

在所示出的实施例中,矩阵处理引擎500包括在后面进一步讨论的读取引擎535、切片引擎536和输出引擎537。所示出的实施例还描绘出在使用矩阵处理引擎500实施矩阵运算时可能涉及的底层矩阵处理架构的各种组件。举例来说,所示出的实施例描绘出高带宽存储器(HBM)模块540、主控制CPU(MCC)532、矩阵处理单元(MPU)534以及存储器资源块(MRB)538。在所示出的实施例中,这些各种组件例如被叠加在矩阵处理引擎500上以便说明其如何以及何时将被矩阵处理引擎500使用,正如后面进一步描述的那样。

HBM模块540可以是被设计成高效地存储和取回大量矩阵数据的高带宽存储器(HBM)模块。在一些实施例中,HBM模块540例如可以是矩阵处理芯片上的高带宽存储器(HBM)模块(例如来自图2B的矩阵处理芯片220的HBM模块240)。

MCC 532可以是被用来控制和/或管理矩阵运算的主控制CPU(MCC)。在一些实施例中,MCC 532例如可以是特定矩阵处理集群上的主控制CPU(例如来自图2C的矩阵处理集群230的MCC 232)。在这些实施例中,MCC 532例如可以被用来控制和/或管理在其特定集群上实施的矩阵运算。

MPU 534可以是被用来实施矩阵运算的矩阵处理单元(MPU)。在一些实施例中,MPU 534例如可以是特定矩阵处理集群上的矩阵处理单元(例如来自图2C的矩阵处理集群230的MPU 234)。举例来说,在一些实施例中,一个矩阵处理集群可以包括用于实施矩阵运算的多个矩阵处理单元(MPU)。所示出的实施例例如描绘出两个矩阵处理单元(MPU)534a和534b。在一些实施例中,MPU 534可以基于来自主控制CPU(MCC)532的命令或指令实施矩阵运算。

存储器资源块(MRB)538可以是被设计成高效地存储和取回矩阵数据的存储器组件。在一些实施例中,MRB 538例如可以是特定矩阵处理集群上的存储器资源块(例如来自图2C的矩阵处理集群230的存储器资源块238)。在这些实施例中,MRB 538例如可以被用来存储和取回与在该特定集群上实施的矩阵运算相关联的矩阵数据。

矩阵处理引擎500使用读取引擎535、切片引擎536和输出引擎537实施矩阵运算,正如后面进一步描述的那样。在所示出的实例中,矩阵处理引擎500正在并行地实施多项矩阵运算501和502。举例来说,正如前面所提到的那样,在一些实施例中,矩阵处理引擎500可以被实施在特定的矩阵处理集群上,并且该特定矩阵处理集群可以包括多个MPU 534。在所示出的实例中,矩阵处理引擎500被实施在具有两个MPU 534a-b的集群上。相应地,矩阵处理引擎500可以使用对应的MPU 534并行地实施两项矩阵运算501和502。

所示出的实例示出了用于矩阵运算501和矩阵运算502的矩阵处理引擎500的控制流程。用于矩阵运算的控制流程开始于矩阵处理引擎500的读取引擎535。举例来说,对于矩阵运算501,读取引擎535可以首先从HBM模块540a取回与该特定矩阵运算相关联的矩阵数据。在所示出的实例中,矩阵处理引擎500正被用来实施卷积相关的运算,因此矩阵数据与这些运算中所涉及的(多幅)图像和过滤器相关联。在一些实施例中,所述卷积相关的运算例如可以与使用人工神经网络中的运算所实施的人工智能功能相关联,比如前向传播、后向传播和/或权重更新运算。

读取引擎535随后可以把从HBM 540a取回的矩阵数据存储在其相关联的集群的特定MRB 538a中。在一些实施例中,读取引擎535例如可以使用两个MRB 538a来存储相关联的矩阵数据。举例来说,读取引擎535可以使用一个MRB来存储与图像相关联的矩阵数据,并且可以使用另一个MRB来存储与被用于该图像上的卷积相关运算的过滤器相关联的矩阵数据。在一些实施例中,读取引擎535可以使用其对应的集群上的主控制CPU(MCC)532以用于在HBM 540和MRB 538上存储和取回数据。

切片引擎536a随后可以对存储在MRB 538a中的矩阵数据进行“切片”,以便提取出与矩阵运算501相关联的特定矩阵运算对象。举例来说,在某些情况下,所述相关联的矩阵运算对象可能仅包括存储在MRB 538a中的矩阵数据的一个子集,并且/或者所述矩阵运算对象可能并不是被连续地安排在存储于MRB 538a中的矩阵数据中。相应地,切片引擎536a可以提取出存储在MRB 538a中的矩阵数据的特定“切片”或片段,并且随后可以按照特定方式安排所述切片从而形成对应的矩阵运算对象。

在所示出的实例中,切片引擎536a从MRB 538a提取出切片矩阵运算对象和过滤器。举例来说,正如前面所提到的那样,MRB 538a可以包括分别被用来存储图像数据和过滤器数据的两个MRB。存储在其中一个MRB 538a中的图像数据可以被切片引擎536a使用来提取切片矩阵运算对象。所述切片矩阵运算对象例如可以是在卷积相关运算中所涉及的图像数据的特定部分。存储在另一个MRB 538a中的过滤器数据可以包括在卷积相关运算中所涉及的过滤器。所述切片运算对象和过滤器例如可以是对应于被用来把所述切片运算对象与过滤器相乘的矩阵乘法运算的运算对象。切片引擎536a随后把切片运算对象和过滤器存储在对应的MRB中。在所示出的实例中,切片运算对象被存储在MRB 538b中,并且过滤器被存储在MRB 538c中。

输出引擎537随后可以被用来计算对应于特定矩阵运算501的结果。举例来说,输出引擎537可以使用由切片引擎536a生成的矩阵运算对象(例如存储在MRB 538b和538c中的矩阵运算对象)实施适当的矩阵运算501。

在一些实施例中,输出引擎537例如可以首先识别对应于特定矩阵运算对象的相关联的矩阵例程,并且输出引擎537随后可以从矩阵例程存储器539获得该矩阵例程。矩阵例程存储器539例如可以是被用来存储由输出引擎537使用的矩阵例程的存储器组件。矩阵例程例如可以是用于矩阵处理器的可编程例程,其被设计成在由矩阵处理器执行时实施特定矩阵运算。举例来说,矩阵例程可以包括由特定矩阵处理器支持的一系列指令和/或命令,并且被设计成在由矩阵处理器执行时实施所期望的矩阵运算。在一些实施例中,矩阵处理器例如可以被设计成支持用于实施各种基本运算的指令和/或命令的集合。举例来说,在一些实施例中,矩阵处理器可以支持用于处理数据、实施各种算术运算以及/或者识别对应于各种指令和运算的矩阵运算对象和输出的指令。通过这种方式,由矩阵处理器支持的基本指令和/或命令可以被用来编程用于更加复杂的矩阵运算的矩阵例程,所述矩阵运算比如是分布式矩阵乘法和/或卷积运算、维度置乱运算、整形运算等等。

在取回适当的矩阵例程之后,输出引擎537随后在适当情况下可以规定或提供由矩阵例程使用的特定信息或字段。举例来说,在一些实施例中,矩阵例程的特定信息和/或字段(比如,对应于矩阵例程的特定运算对象的尺寸和/或位置)可能是不完整的或者未被规定。在一些实施例中,输出引擎537可以使用其对应的集群上的主控制CPU(MCC)532从矩阵例程存储器539取回矩阵例程,并且规定或提供对应于该特定矩阵例程的任何其余的信息和/或字段(例如,矩阵运算对象的尺寸和/或位置)。

输出引擎537随后可以执行所述特定矩阵例程。举例来说,输出引擎537可以使用MCC 532和/或MPU 534a来执行与该特定矩阵例程相关联的已编程指令。MCC 532例如可以被用来实施由指令规定的特定任务,比如读取和写入数据、与其他资源进行通信等等。MPU 534a例如可以被用来实施由指令规定的特定算术运算。此外,在某些情况下,特定矩阵例程可以被重复执行或循环,直到对于所有必要的数据(例如特定矩阵运算对象的所有数据)都实施或完成了特定运算为止。

输出引擎537可以把矩阵例程的输出或结果存储在被用来执行矩阵例程的集群的(多个)特定MRB 538d中。输出引擎537随后可以对结果538d实施任何其余的处理和/或传送。举例来说,在某些情况下,输出引擎537可以把结果538d提供到矩阵处理架构的其他组件。举例来说,在某些情况下,矩阵运算501可以是与分布在多个处理资源上的更大矩阵运算相关联的部分矩阵运算,并且因此矩阵运算501的结果可以是与所述更大的分布式运算相关联的部分结果。此外,在分布式矩阵运算中所涉及的(多个)其他处理资源可能会需要部分结果538d。因此,输出引擎537例如可以把部分结果538d提供到适当的资源以供进一步处理和/或存储。在一些实施例中,输出引擎537可以使用其对应的集群上的主控制CPU(MCC)532,以便把特定运算的结果提供到适当的目的地。在某些情况下,所述适当的目的地资源可以根据情况而改变,所述情况包括正在实施的矩阵运算的类型、相关联的(多个)矩阵例程的实现方式、处理资源的数目和可用性等等。举例来说,在某些情况下,矩阵运算的输出的特定处理和/或目的地可以由相关联的矩阵例程编程或定义。

在某些情况下,输出引擎537例如可以把结果538d提供到HBM 540以用于存储,提供到另一个处理资源(例如另一个邻近集群或另一个矩阵处理芯片)以用于进一步处理,并且/或者可以把结果538d反馈到MPU 534a以用于进一步的处理和运算。在所示出的实例中,矩阵运算501的结果538d被传送到HBM 540b并且存储在HBM 540b上。

在所示出的实例中,可以与第1矩阵运算501并行地执行第2矩阵运算502。此外,对应于第2矩阵运算502的控制流程可以类似于前面对于第1矩阵运算501所描述的控制流程。但是第2矩阵运算502可以是不同的矩阵运算(例如使用不同的矩阵例程来实施),具有不同的矩阵运算对象和结果,使用HBM 540和/或MRB 538的不同存储器位置,并且使用不同的MPU 534b和相关联的切片引擎536b来执行。

矩阵处理架构中的最大池化

图6A-D示出了使用矩阵处理引擎的最大池化的实例。人工神经网络(比如卷积神经网络)包括一系列连接层。在某些情况下,神经网络可以包括一个或多个最大池化层。最大池化例如是减小输入特征映射图的空间尺寸的下采样运算,以便减少神经网络中的参数和计算的数量。最大池化层例如常常被插入在卷积神经网络中的相继卷积层之间。通过以下步骤来实施最大池化:遍及输入特征映射图滑动“最大过滤器”,识别输入特征映射图上的每一个过滤器位置内的最大值数值,以及把对应的最大值数值存储在输出特征矩阵中。

正如前面所提到的那样,最大池化可以被实施成神经网络中的一层。经过神经网络的最大池化层的前向传播可以被称作前向池化,而经过神经网络的最大池化层的后向传播可以被称作后向池化。

图6A示出了前向池化(例如由图5的矩阵处理引擎500实施)的一个简化实例。所示出的实例在具有维度HxW(例如高度H和宽度W)的输入特征映射图610上实施前向池化。此外,所示出的实例使用4x4过滤器尺寸,所述过滤器尺寸在水平和垂直方向上都具有步幅4。在所示出的实例中,为了易于说明,步幅和过滤器尺寸是相等的。但是在某些使用情况中,步幅可以不一定等于过滤器尺寸,从而在前向池化期间将导致重叠的过滤器位置。

在所示出的实例中,对于输入特征映射图610上的每一个过滤器位置(例如F1-F7),对于过滤器内的元素识别出最大值数值连同其在过滤器边界内的相对位置(例如对应于最大数值的过滤器内的索引)。来自每一个过滤器位置的共同最大值数值602被一起存储在存储器中以作为输出特征映射图(OFM),并且共同索引604被类似地一起存储在存储器中以作为OFM。最大数值602和索引604也可以被视为单一OFM或者作为单一OFM来对待,所述单一OFM具有对应于最大数值和索引的两个对应的通道。

图6A所示出的实例示出了对应于输入特征映射图610上的前七个过滤器位置F1-F7的前向池化。举例来说,在过滤器位置F1处,最大数值m1被存储在最大数值OFM 602中,并且其在过滤器i1内的相应索引被存储在索引OFM 604中。每一个过滤器位置按照类似的方式被处理,直到输入特征映射图610上的所有过滤器位置都被处理过为止,从而相应的最大数值602和索引604已被存储在其对应的OFM中。

图6B示出了后向池化(例如由图5的矩阵处理引擎500实施)的一个简化实例。后向池化被用来例如使用来自前向池化运算的最大数值602和索引604部分地重建原始输入特征映射图610。每一个最大数值-索引对(例如,对606a-e)被顺序地处理,以便重建原始HxW输入特征映射图610的部分复制。当然,重建特征映射图将仅仅保留来自各种过滤器位置的对应的最大值数值,而所有其他元素将被用零填充。

图6B示出了如何使用最大数值-索引对606来重建原始特征映射图。举例来说,对于过滤器位置F1,最大数值m1和索引i1被用来把最大数值m1写入到F1内的适当位置,而F1内的所有其他元素将被用零填充。每一个过滤器位置按照类似的方式被处理,直到所有最大数值都被写入到其对应的位置并且重建特征映射图的其余元素都已被用零填充为止。

正如前面所提到的那样,虽然来自图6A的示例性前向池化运算使用等于过滤器尺寸的步幅,但是可能并不总是这样的情况。举例来说,在某些使用情况中,步幅可以不同于过滤器尺寸,从而在前向池化期间导致重叠的过滤器位置。对于步幅为1的使用情况是特别感兴趣的,因为这是最具限制性的使用情况。举例来说,如果在图6A和6B的实例中使用了步幅1而不是步幅4,则这将把每一个相继的过滤器位置放置在向右1个元素而不是向右4个元素。类似地,在到达HxW输入特征映射图610的右侧边缘之后,下一行的过滤器位置将仅仅是向下1个元素而不是向下4个元素。

因此,在其中步幅等于1的情形中,各种过滤器位置内的元素可能有很多重叠。此外,输入特征映射图610的特定元素可以是多个不同过滤器位置中的最大值数值,并且因此该元素将被在前向池化期间生成的最大数值-索引对识别多次。

在后向池化期间,如果每一个最大数值-索引对都被孤立地完全处理并且写入到存储器,由于对应的过滤器位置处的重叠元素,这在重建原始特征映射图时将需要多次重复的读取和写入操作。因此,为了高效地重建原始特征映射图,关键是确定何时您已处理了可能影响重建特征映射图的特定元素的所有数值-索引对,从而可以在适当的时间把该特定元素写入到存储器以便最小化总的存储器存取的次数。举例来说,假设过滤器移动是向右并且随后向下,则过滤器的左上角处的元素总是将不具有进一步更新的最近的元素。因此,该元素可以被安全地写入到存储器。

图6C-D示出了后向池化的实现方式的一个简化实例。所示出的后向池化的实现方式例如可以由图5的矩阵处理引擎500实施。

作为最初的问题,不管正在实施的特定类型的卷积运算,“宏列(macro-column)”是可以由图5的矩阵处理引擎500使用的基本构造。宏列用来限制活跃特征映射图的宽度,以便确保存储器资源块(MRB)有空间来容纳特征映射图的足够多的行以便执行特定运算。对于后向池化,宏列宽度可以被固定在特定尺寸,比如32个元素。此外,还可以有最大支持过滤器尺寸,比如16x16元素。因此,在一些实施例中,活跃特征映射图的尺寸可以是16行元素乘以32列元素或512个元素。

图6C-D示出了使用与活跃特征映射图具有相同尺寸的先入先出(FIFO)存储器630(例如512条目FIFO)的后向池化的一种实现方式。FIFO 630还对于每一个条目保持一个状态比特(例如使用双稳态触发器),以便在后向池化运算期间跟踪每一个条目是否已被更新或修改过。

在后向池化期间,FIFO 630可以实际上被视为向下滑动经过输出特征映射图620的每一个宏列622的滑动窗口。图6C示出了向下滑动经过输出特征映射图620的特定宏列622c的FIFO 630的一个简化实例,而图6D示出了FIFO 630如何向下滑动经过该特定宏列622c的更加详细的描绘。

例如对于步幅1,FIFO 630在特定最大数值-索引对被处理之后移动单一列元素。通过移动FIFO 630被显露出的列元素随后可以被写入到存储器,因为该列元素将不会被任何后续处理的最大数值-索引对修改。对于大于1的步幅,在移动FIFO 630时将会显露出多个列元素。一般来说,在处理了特定最大数值-索引对之后,被写入到存储器的列元素的数目等于列步幅,这是因为列步幅表明每次移动FIFO 630时显露出多少列元素。

当到达宏列622c的边界时,随后把FIFO 630向下移动等于行步幅的行数。如果行步幅大于1,则通过FIFO 630的移动显露出各个整行,所有这些整行立即被写入到存储器。被写入到存储器的特定行数是行步幅减一(例如,行步幅-1)。

此外,当把特定元素写入到存储器时,FIFO 630的相应状态比特可以被用来确定该元素是否被修改过。举例来说,如果该元素未被修改过,则可以简单地将0写入到存储器。但是如果状态比特表明该元素已被修改过,则可以实施读取-修改-写入操作,以便读取现有数值、修改现有数值(例如通过把现有数值与新数值相加)并且随后把修改后的数值写入回到存储器。

每一个宏列可以按照这种方式被处理,直到完成后向池化运算为止。此外,在一些实施例中,后向池化运算的结果可以被写入到一个或多个存储器资源块(MRB)。

图7示出了对应于使用矩阵处理引擎的最大池化的一个示例性实施例的流程图700。在一些实施例中,流程图700可以由遍及本公开内容所描述的组件(例如图2A-C的矩阵处理架构和/或图5的矩阵处理引擎)实施。

流程图可以通过接收实施最大池化运算的命令而开始于方块702。最大池化运算例如可以与神经网络中的前向或后向传播相关联。举例来说,在神经网络中的前向传播期间,最大池化运算可以是被用来减小矩阵运算对象的尺寸的前向池化运算。在神经网络中的后向传播期间,最大池化运算可以是被用来从前向池化运算重建原始矩阵运算对象的后向池化运算。

流程图随后可以继续到方块704,以便从存储器获得矩阵数据。在一些实施例中,例如可以从存储器取回与最大池化运算的一个或多个运算对象相关联的矩阵数据。此外,在一些实施例中,所述存储器可以是多维存储器。

流程图随后可以继续到方块706,以便从矩阵数据获得矩阵运算对象。举例来说,在一些实施例中,可以对矩阵数据进行切片,以便提取出矩阵运算对象。

流程图随后可以继续到方块708,以便使用从矩阵数据获得的矩阵运算对象实施最大池化运算。举例来说,对于后向池化运算,使用最大数值矩阵部分地重建来自前向池化运算的原始矩阵运算对象。所述最大数值矩阵例如可以是来自前向池化运算的输出。为了重建原始矩阵运算对象,可以对最大数值矩阵中的每一个最大数值条目进行处理。每一个最大数值条目例如可以包括最大值数值和索引。使用每一个最大数值条目重建原始矩阵的一部分。在使用特定最大数值条目重建原始矩阵的一部分之后,随后确定部分重建矩阵的(多个)特定元素在重建处理的其余部分期间将不会被进一步修改。相应地,这些元素被写入到存储器。在一些实施例中,可以使用FIFO存储器来存储重建矩阵的元素。此外,FIFO存储器可以包括用以跟踪该FIFO存储器中的对应条目是否被修改过的状态比特(例如使用双稳态触发器来实施)。

在每一个最大数值条目都被处理之后,流程图随后可以继续到方块710,以便获得最大池化运算的结果。举例来说,对于后向池化运算,所述结果可以是从对应的最大数值条目重建的矩阵,正如前面所描述的那样。

此时,流程图可以完成。但是在一些实施例中,流程图可以重新开始并且/或者可以重复特定方块。举例来说,在一些实施例中,流程图可以在方块702处重新开始,以便继续实施最大池化运算。

附图中的流程图和方块图示出了根据本公开内容的各个方面的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。在这方面,流程图或方块图中的每一个方块可以表示一个代码模块、代码段或代码部分,其中包括用于实施所规定的(多项)逻辑功能的一条或多条可执行指令。还应当提到的是,在一些替换实现方式中,在方块中提到的功能可以按照不同于在附图中提到的顺序发生。举例来说,取决于所涉及的功能,相继示出的两个方块可以实际上被基本上同时执行,或者有时可以按照相反的顺序或者替换的顺序来执行所述方块。还应当提到的是,方块图和/或流程图的每一个方块以及方块图和/或流程图中的方块组合可以由实施所规定的功能或动作的基于专用硬件的系统来实施,或者可以由专用硬件与计算机指令的组合来实施。

前述公开内容概括了几个实施例的特征,从而使得本领域技术人员可以更好地理解本公开内容的各个方面。本领域技术人员应当认识到,他们可以很容易使用本公开内容作为基础来设计或修改其他处理和结构,以用于实施与本文中所介绍的实施例相同的目的以及/或者实现相同的优点。本领域技术人员还应当认识到,这样的等效构造并不背离本公开内容的精神和范围,并且他们可以在不背离本公开内容的精神和范围的情况下作出各种改变、替换和改动。

本文中所公开的任何硬件单元的全部或一部分可以很容易被提供在芯片上系统(SoC)中,其中包括中央处理单元(CPU)包装。SoC表示把计算机或其他电子系统的组件集成到单一芯片中的集成电路(IC)。SoC可以包含数字、模拟、混合信号以及射频功能,所有这些都可以被提供在单一芯片基板上。其他实施例可以包括多芯片模块(MCM),其中多个芯片位于单一电子包装内并且被配置成通过所述电子包装彼此密切地交互。在各个其他实施例中,本文中所公开的计算功能可以被实施在专用集成电路(ASIC)、现场可编程门阵列(FPGA)以及其他半导体芯片中的一个或多个硅核心中。

遍及本说明书所使用的术语“处理器”或“微处理器”应当被理解成不仅包括传统的微处理器(比如Intel®的行业领先的x86和x64架构),而且还包括矩阵处理器、图形处理器以及任何ASIC、FPGA、微控制器、数字信号处理器(DSP)、可编程逻辑设备、可编程逻辑阵列(PLA)、微代码、指令集、模拟或虚拟机处理器,或者任何类似的“图灵完备”设备、设备组合或者允许执行指令的逻辑单元(硬件或软件)。

还应当提到的是,在某些实施例中,一些组件可以被省略或合并。在一般意义上,在附图中描绘出的安排应当被理解成逻辑划分,而物理架构则可以包括这些单元的各种排列、组合以及/或者混合。必须提到的是,可以使用无数可能的设计配置来实现本文中所概述的操作目的。因此,相关联的基础设施具有多种替换安排、设计选择、设备可能性、硬件配置、软件实现方式以及装备选项。

在一般意义上,任何适当地配置的处理器都可以执行与数据或微代码相关联的指令以便实现本文中所详述的操作。本文中所公开的任何处理器可以把单元或事项(例如数据)从一个状态或物件变换到另一个状态或物件。在另一个实例中,本文中所概述的一些活动可以通过固定逻辑或可编程逻辑(例如由处理器执行的软件和/或计算机指令)来实施,并且本文中所标识的单元可以是某种类型的可编程处理器、可编程数字逻辑(例如,现场可编程门阵列(FPGA)、可擦写可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM))、包括数字逻辑的ASIC、软件、代码、电子指令、闪存、光盘、CD-ROM、DVD ROM、磁卡或光学卡、适合存储电子指令的其他类型的机器可读介质或者其任何适当的组合。

在操作中,存储装置可以在适当情况下并且基于具体需求把信息存储在任何适当类型的有形、非瞬时性存储介质(例如随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)、可擦写可编程只读存储器(EPROM)、电可擦写可编程ROM(EEPROM)或微代码)、软件、硬件(例如处理器指令或微代码)或者任何其他适当的组件、设备、单元或对象中。此外,基于具体需求和实现方式,正被跟踪、发送、接收或存储在处理器中的信息可以被提供在任何数据库、寄存器、表、高速缓存、队列、控制列表或存储结构中,所有这些都可以在任何适当的时间框架中被参考。本文中所公开的任何存储器或存储单元应当被适当地解释成涵盖在宽泛的术语“存储器”和“存储装置”内。本文中的非瞬时性存储介质明确意图包括被配置成提供所公开的操作或者使得处理器实施所公开的操作的任何非瞬时性的专用或可编程硬件。非瞬时性存储介质还明确包括其上存储有硬件编码的指令的处理器,并且可选地还包括编码在硬件、固件或软件中的微代码指令或序列。

实施本文中所描述的功能的全部或一部分的计算机程序逻辑通过多种形式被具体实现,其中包括而决不限于硬件描述语言、源代码形式、计算机可执行程序形式、机器指令或微代码、可编程硬件以及各种中间形式(例如由HDL处理器、汇编器、编译器、链接器或定位器生成的形式)。在一个实例中,源代码包括一系列计算机程序指令,该一系列计算机程序指令以各种编程语言(比如是对象代码、汇编语言或者高层级语言(比如供各种操作系统或操作环境使用的OpenCL、FORTRAN、C、C++、JAVA或HTML))被实施,或者以硬件描述语言(例如Spice、Verilog和VHDL)被实施。源代码可以定义并且使用各种数据结构和通信消息。源代码可以处于计算机可执行程序形式(例如通过解译器),或者源代码可以被转换(例如通过翻译器、汇编器或编译器)成计算机可执行程序形式,或者被转换到例如字节代码之类的中间形式。在适当情况下,任何前述各项都可以被用来建立或描述适当的分立或集成电路,不管是时序电路、组合电路、状态机还是其他。

在一个实例中,可以在相关联的电子设备的板上实施附图的任何数目的电路。所述板可以是一般电路板,其能够容纳电子设备的内部电子系统的各种组件,并且还提供用于其他外设的连接器。更具体来说,所述板可以提供电气连接,系统的其他组件可以通过所述电气连接进行电气通信。任何适当的处理器和存储器可以基于具体配置需求、处理需求和计算设计而适当地耦合到所述板。比如外部存储装置、附加的传感器、用于音频/视频显示的控制器以及外围设备之类的其他组件可以通过线缆作为插入卡而附着到所述板,或者被集成到所述板本身中。在另一个实例中,附图的电路可以被实施成独立模块(例如具有被配置成实施特定应用或功能的相关联的组件和电路的设备),或者被实施成到电子设备的专用硬件中的插入模块。

应当提到的是,对于本文中所提供的许多实例,可能是通过两个、三个、四个或更多电气组件来描述交互。但是这样做仅仅是出于清楚和示例的目的。应当认识到,所述系统可以按照任何适当方式被合并或重新配置。在类似的设计替换方案当中,附图所示出的任何组件、模块和单元可以按照多种可能的配置被组合,所有这些配置都落在本说明书的宽泛范围内。在某些情况下,通过仅仅参照有限数目的电气单元可能更容易描述给定流程集合的一项或多项功能。应当认识到,附图及其教导的电路可以很容易缩放,并且可以容许大量组件以及更加复杂/精密的安排和配置。因此,所提供的实例不应当限制潜在地适用于多种其他架构的电路的范围或者约束其宽泛教导。

本领域技术人员可以确定许多其他改变、替换、变型、改动和修改,并且本公开内容意图涵盖落在所附权利要求的范围内的所有这样的改变、替换、变型、改动和修改。

示例性实现方式

下面的实例涉及遍及本公开内容所描述的实施例。

一个或多个实施例可以包括一种装置,包括:多维存储器;用以实施矩阵运算的多个处理单元,其中所述矩阵运算包括在一个或多个矩阵运算对象上进行的最大池化运算,并且其中所述多个处理单元包括一个或多个矩阵处理器;其中所述多个处理单元被配置成:从多维存储器接收矩阵数据,其中所述矩阵数据与所述一个或多个矩阵运算对象相关联;从矩阵数据中提取出所述一个或多个矩阵运算对象;使用所述一个或多个矩阵运算对象实施最大池化运算;以及获得最大池化运算的结果。

在一种装置的一个示例性实施例中,所述最大池化运算包括用以减小矩阵运算对象的尺寸的运算。

在一种装置的一个示例性实施例中,所述最大池化运算包括前向池化运算。

在一种装置的一个示例性实施例中,所述最大池化运算包括后向池化运算。

在一种装置的一个示例性实施例中,所述后向池化运算包括用以通过使用最大数值矩阵部分地重建原始矩阵而产生重建矩阵的运算。

在一种装置的一个示例性实施例中,所述多个处理单元还被配置成:从最大数值矩阵中识别出最大数值条目;基于所述最大数值条目产生部分矩阵,其中所述部分矩阵包括重建矩阵的一部分;确定部分矩阵的一个或多个元素将不会被修改;以及把部分矩阵的所述一个或多个元素写入到存储器。

在一种装置的一个示例性实施例中,所述最大数值条目包括最大值数值和索引。

在一种装置的一个示例性实施例中,所述装置还包括用以存储重建矩阵的一个或多个元素的FIFO存储器。

在一种装置的一个示例性实施例中,所述FIFO存储器包括用以跟踪该FIFO存储器中的一个或多个条目是否被修改过的一个或多个状态比特。

在一种装置的一个示例性实施例中,所述最大数值矩阵是前向池化运算的输出。

在一种装置的一个示例性实施例中,所述最大数值矩阵包括一个或多个数值-索引对,其中所述一个或多个数值-索引对均包括最大值数值和索引。

在一种装置的一个示例性实施例中,所述最大池化运算与神经网络中的前向传播运算相关联。

在一种装置的一个示例性实施例中,所述最大池化运算与神经网络中的后向传播运算相关联。

一个或多个实施例可以包括一种方法,包括:实施矩阵运算,其中所述矩阵运算包括在一个或多个矩阵运算对象上进行的最大池化运算,其中实施矩阵运算包括:从多维存储器接收矩阵数据,其中所述矩阵数据与所述一个或多个矩阵运算对象相关联;从矩阵数据中提取出所述一个或多个矩阵运算对象;使用所述一个或多个矩阵运算对象实施最大池化运算;以及获得最大池化运算的结果。

在一种方法的一个示例性实施例中,所述最大池化运算包括用以减小矩阵运算对象的尺寸的前向池化运算。

在一种方法的一个示例性实施例中:所述最大池化运算包括后向池化运算;并且所述后向池化运算包括用以通过使用最大数值矩阵部分地重建原始矩阵而产生重建矩阵的运算。

在一种方法的一个示例性实施例中,所述方法还包括:从最大数值矩阵中识别出最大数值条目;基于所述最大数值条目产生部分矩阵,其中所述部分矩阵包括重建矩阵的一部分;确定部分矩阵的一个或多个元素将不会被修改;以及把部分矩阵的所述一个或多个元素写入到存储器。

在一种方法的一个示例性实施例中,所述最大数值条目包括最大值数值和索引。

在一种方法的一个示例性实施例中,所述方法还包括把重建矩阵的一个或多个元素存储在FIFO存储器中。

在一种方法的一个示例性实施例中,所述FIFO存储器包括用以跟踪该FIFO存储器中的一个或多个条目是否被修改过的一个或多个状态比特。

在一种方法的一个示例性实施例中,所述最大数值矩阵是前向池化运算的输出。

一个或多个实施例可以包括一种装置,所述装置包括用以实施来自任一个在前实例的方法的装置。

一个或多个实施例可以包括其上存储有指令的至少一个机器可存取存储介质,所述指令在机器上执行时使得所述机器实施来自任一个在前实例的方法或者实现来自任一个在前实例的装置。

一个或多个实施例可以包括一种系统,包括:多个存储器单元,其中所述多个存储器单元构成多维存储器;以及用以实施矩阵运算的多个处理单元,其中所述矩阵运算包括在一个或多个矩阵运算对象上进行的最大池化运算,其中所述多个处理单元包括:主机处理器;以及一个或多个矩阵处理芯片;其中所述多个处理单元被配置成:从多维存储器接收矩阵数据,其中所述矩阵数据与所述一个或多个矩阵运算对象相关联;从矩阵数据中提取出所述一个或多个矩阵运算对象;使用所述一个或多个矩阵运算对象实施最大池化运算;以及获得最大池化运算的结果。

在一种系统的一个示例性实施例中,每一个矩阵处理芯片包括多个矩阵处理集群。

在一种系统的一个示例性实施例中,每一个矩阵处理集群包括多个矩阵处理单元。

在一种系统的一个示例性实施例中,每一个矩阵处理集群包括多个存储器资源块。

一个或多个实施例可以包括其上存储有指令的至少一个机器可存取存储介质,所述指令当在机器上执行时使得所述机器:实施矩阵运算,其中所述矩阵运算包括在一个或多个矩阵运算对象上进行的最大池化运算,并且其中所述使得机器实施矩阵运算的指令还使得所述机器:从多维存储器接收矩阵数据,其中所述矩阵数据与所述一个或多个矩阵运算对象相关联;从矩阵数据中提取出所述一个或多个矩阵运算对象;使用所述一个或多个矩阵运算对象实施最大池化运算;以及获得最大池化运算的结果。

在一种存储介质的一个示例性实施例中:所述最大池化运算包括后向池化运算;并且所述后向池化运算包括用以通过使用最大数值矩阵部分地重建原始矩阵而产生重建矩阵的运算。

在一种存储介质的一个示例性实施例中,所述指令还使得所述机器:从最大数值矩阵中识别出最大数值条目;基于所述最大数值条目产生部分矩阵,其中所述部分矩阵包括重建矩阵的一部分;确定部分矩阵的一个或多个元素将不会被修改;以及把部分矩阵的所述一个或多个元素写入到存储器。

在一种存储介质的一个示例性实施例中,所述指令还使得所述机器把重建矩阵的一个或多个元素存储在FIFO存储器中,其中所述FIFO存储器包括用以跟踪该FIFO存储器中的一个或多个条目是否被修改过的一个或多个状态比特。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1