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

用于在神经网络加速器中读写稀疏数据的系统和方法与流程

2022-03-19 15:48:17 来源:中国专利 TAG:

用于在神经网络加速器中读写稀疏数据的系统和方法
1.相关申请的交叉引用
2.本技术要求于2019年7月11日提交的美国申请第16/509,138号的优先权,出于所有目的将其全部内容通过引用并入本文。
技术领域
3.本公开一般涉及神经网络的数据处理,包括但不限于用于读取和/或写入稀疏数据的系统和方法。


背景技术:

4.计算机系统可以包括存储器或存储器组件以存储和维护数据。存储器可以通过写和读操作来存储和取回信息和数据。然而,每次访问存储器系统时,计算机系统都会利用各种资源和各种级别的功耗来存储或取回信息和数据。


技术实现要素:

5.本文提供了用于在神经网络加速器中读取和写入稀疏数据的设备、系统和方法。在一些实施例中,可以确定数据字的稀疏性,并且本文描述的电路可以部分地基于数据字的稀疏性来对相应的数据字执行读取和/或写入操作,以减少在读取和/或写入操作期间的电路的功率使用(或消耗)。存储器可以被划分成切片,并且可以部分地基于相应部分的字节值将数据字的不同部分(例如,字节部分)写入到一个或多个切片或跨一个或多个切片写入。例如,电路可以确定数据字的具有非零字节值的字节部分的数目和具有零字节值的字节部分的数目。具有零字节值的字节部分可以对应于数据字的稀疏部分或对应于被标识为不具有(或不重要级别的)信息、值和/或重要性的部分。因此,本文描述的系统和方法可以跳过、忽略或不针对具有零字节值的一个或多个字节部分执行读取/写入访问操作,以在读取/写入访问操作期间减少电路的功率使用。
6.在一些实施例中,可以修改数据字以将数据字的具有非零字节值的字节部分分组或排列、并且将具有零字节值的剩余字节部分定位在数据字的具有非零字节值的字节部分之后。例如,该电路可以在执行写入操作时,将所有非零字节部分打包到第一切片的第一端或左侧。对于读取操作,该电路可以首先取出标识数据字的具有非零字节值的字节部分的数目和具有零字节值的字节部分的数目的位掩码,并验证有多少字节部分包括非零字节值(例如,以从其读取)。在一些实施例中,电路可以在读取/写入访问期间,跳过或忽略具有零字节值的字节部分以减少电路的功率使用。因此,本文描述的系统和方法可以降低用于执行读取和写入操作的访问级别功率值或读取/写入功率。
7.在一些实施例中,如果字节部分中的每个字节部分包括零字节值,则电路可以跳过或不执行对切片(例如,左切片和右切片)的读取/写入访问。在一些实施例中,如果用于数据字的位掩码值小于或等于第一切片的访问大小,则电路可以仅对第一切片执行读取/写入访问。在一些实施例中,如果用于数据字的位掩码值大于第一切片的访问大小,则电路
可以执行对第一切片和除第一切片之外的第二切片或多个切片的读取/写入访问。
8.在至少一个方面,提供了一种方法。该方法可以包括由电路建立多个切片以访问存储器,存储器具有数据字的访问大小,多个切片中的第一切片被配置为访问存储器中的数据字的第一侧。第一侧可以包括小于数据字的大小的大小。该方法可以包括由电路访问掩码,该掩码标识数据字内具有非零值的字节位置。该方法可以包括由电路修改数据字,以使非零字节值从第一侧的端处开始被存储,以及使任意零字节值被存储在数据字的剩余部分中。该方法可以包括由电路确定从第一侧的端处开始的非零字节值的数目是否小于或等于第一切片的第一访问大小。该方法可以包括由电路响应于该确定,至少经由第一切片将经修改的数据字写入到存储器。
9.在一些实施例中,该方法可以包括将掩码生成为一字节掩码或两字节掩码中的一种掩码。该方法可以包括由电路确定第一侧的非零字节值的数目小于或等于第一切片的第一访问大小。该方法可以包括由电路仅经由第一切片写入经修改的数据字的第一侧。该方法可以包括由电路确定从第一侧的端处开始的非零字节值的数目大于第一切片的第一访问大小。该方法可以包括由电路经由第一切片写入经修改的数据字的第一侧的字节并且经由第二切片写入剩余的非零字节。在一些实施例中,可以选择多个切片中的第一切片的第一访问大小或多个切片中的第二切片的第二访问大小中的一个访问大小,以提供电路在访问存储器时的功率使用的预定减少。该方法可以包括由电路基于掩码来确定经修改的数据字的非零字节值的数目。
10.在至少一个方面,提供了一种方法。该方法可以包括由电路建立多个切片以访问存储器,存储器具有数据字的访问大小。多个切片中的第一切片可以被配置为访问存储器中的数据字的第一侧。第一侧可以包括小于数据字的大小的大小。该方法可以包括由电路访问掩码,该掩码标识数据字内具有非零值的位置。该方法可以包括由电路根据掩码来确定数据字的非零字节值的数目小于或等于第一切片的第一访问大小。该方法可以包括由电路响应于该确定经由第一切片来读取被存储在存储器中的数据字的打包表示。打包表示可以包括从数据字的第一侧的端处开始被存储的非零字节值和被存储在数据字的剩余部分中的任意零字节值。该方法可以包括由电路根据打包表示,在由掩码指示的位置处提供具有非零字节值和零字节值的数据字。
11.在一些实施例中,掩码可以以一字节为基础或以两字节为基础来标识非零字节值的位置。该方法可以包括由电路确定数据字的非零字节值的数目小于或等于第一切片的第一访问大小。该方法可以包括由电路仅经由第一切片来读取数据字的打包表示。该方法可以包括由电路确定数据字的非零字节值的数目大于第一切片的第一访问大小。该方法可以包括由电路经由第一切片来读取数据字的第一侧并且经由多个切片中的第二切片来读取任意剩余的非零字节。在一些实施例中,可以选择多个切片中的第一切片的第一访问大小或多个切片中的第二切片的第二访问大小中的一个访问大小,以提供电路在从存储器读取时的功率使用的预定减少。
12.在至少一个方面,提供了一种设备。该设备包括存储器和电路,存储器具有数据字的访问大小。该电路可以被配置为建立多个切片以访问存储器。多个切片中的第一切片可以被配置为访问存储器中的数据字的左侧。该电路可以被配置为访问掩码,该掩码标识数据字内具有非零值的字节位置。该电路可以被配置为修改数据字,以使非零字节值从数据
字的第一侧的端处开始被存储,并使任意零字节值被存储在数据字的剩余部分中。该电路可以被配置为确定经修改的数据字的最左边字节的非零字节值的数目小于或等于第一切片的第一访问大小。该电路可以被配置为响应于该确定,至少经由第一切片将经修改的数据字写入到存储器。
13.在一些实施例中,该电路可以被配置为至少经由第一切片来读取被存储在存储器中的数据字的打包表示。打包表示可以包括被存储在数据字的第一侧中的非零字节值和被存储在数据字的剩余字节中的任意零字节值。该电路可以被配置为创建数据字,以使非零字节值和零字节值被存储在由位掩码指示的位置中。该电路可以被配置为经由第一切片来读取数据字的第一侧并且经由多个切片中的第二切片来读取任意剩余的非零字节。在一些实施例中,可以选择多个切片中的第一切片的第一访问大小或多个切片中的第二切片的第二访问大小中的一个访问大小,以提供电路在从存储器读取时的功率使用的预定减少。
14.下面详细讨论这些和其他方面和实现。前述信息和以下详细描述包括各个方面和实现的示意性示例,并提供用于理解要求保护的方面和实现的性质和特性的概述或框架。附图提供了对各个方面和实现的说明和进一步理解,并且被并入并构成本说明书的一部分。
附图说明
15.附图不旨在按比例绘制。各个图中类似的参考数字和名称指示类似元件。为清楚起见,并非每个组件都可以在每张图中被标注。在图中:
16.图1a是根据本公开的示例实现的用于执行人工智能(ai)相关处理的系统的实施例的框图。
17.图1b是根据本公开的示例实现的用于执行ai相关处理的设备的实施例的框图。
18.图1c是根据本公开的示例实现的用于执行ai相关处理的设备的实施例的框图。
19.图1d是根据本公开的示例实现的计算环境的框图。
20.图2a是根据本公开的示例实现的用于在本文提供的神经网络加速器中写入稀疏数据的系统的框图。
21.图2b是根据本公开的示例实现的用于在神经网络加速器中读取稀疏数据的系统的框图。
22.图2c是根据本公开的示例实现的用于在神经网络加速器中读取和写入稀疏数据的系统的框图。
23.图2d是根据本公开的示例实现的用于在神经网络加速器中写入稀疏数据的系统的框图。
24.图2e是根据本公开的示例实现的用于在神经网络加速器中读取稀疏数据的系统的框图。
25.图3a-3b是图示根据本公开的示例实现的用于在神经网络加速器中读取和写入稀疏数据的过程或方法的流程图。
具体实施方式
26.在转向详细示出某些实施例的附图之前,应当理解,本公开不限于在说明书中阐
述或在附图中示出的细节或方法。还应当理解,本文使用的术语仅用于描述的目的,不应被视为限制。
27.为了阅读以下对本发明各个实施例的描述,以下对说明书各节及其相应内容的描述可能会有所帮助:
[0028]-部分a描述了对实践或实现本系统、方法和设备的实施例有用的环境、系统、配置和/或其他方面;以及
[0029]-部分b描述了用于在神经网络加速器中读取和写入稀疏数据的设备、系统和方法的实施例。
[0030]
a.人工智能相关处理的环境
[0031]
在讨论部分b中的系统、设备和/或方法的实施例的细节之前,讨论对实践或实现系统、设备和/或方法的某些实施例有用的环境、系统、配置和/或其他方面可能是有帮助的。现在参考图1a,描绘了用于执行人工智能(ai)相关处理的系统的实施例。简而言之,该系统包括一个或多个ai加速器108,其可以使用输入数据110执行ai相关处理。虽然称为ai加速器108,但有时也称其为神经网络加速器(nna)、神经网络芯片或硬件、ai处理器、ai芯片等。ai加速器108可以根据输入数据110和/或参数128(例如,权重和/或偏置信息)执行ai相关处理以输出或提供输出数据112。ai加速器108可以包括和/或实现一个或多个神经网络114(例如,人工神经网络)、一个或多个处理器和/或一个或多个存储设备12。
[0032]
上述元件或组件中的每一个均以硬件或硬件和软件的组合来实现。例如这些元件或组件中的每一个可以包括任意应用、程序、库、脚本、任务、服务、进程或在诸如电路等硬件上执行的任意类型和形式的可执行指令,电路可以包括数字和/或模拟元件(例如、一个或多个晶体管、逻辑门、寄存器、存储器件、电阻元件、导电元件、电容元件)。
[0033]
输入数据110可以包括用于配置、调整、训练和/或激活(多个)ai加速器108的神经网络114和/或由处理器124处理的任意类型或形式的数据。神经网络114有时被称为人工神经网络(ann)。配置、调整和/或训练神经网络可以指或包括机器学习的过程,其中将诸如历史数据的训练数据集合(例如,作为输入数据110)提供给神经网络进行处理。调整或配置可以指或包括神经网络114的训练或处理以允许神经网络提高准确度。调整或配置神经网络114可以包括例如使用针对神经网络114所需的问题或目标类型已被证明是成功的架构来设计神经网络。在一些情况下,一个或多个神经网络114可以以相同或相似的基础模型启动,但是在调整、训练或学习过程期间,神经网络114的结果可以充分不同,使得可以调整每个神经网络114以处理特定类型的输入并生成与处于基础模型或针对不同目标或目的调整或训练的不同神经网络相比,具有更高水平的准确度和可靠性的特定类型的输出。调整神经网络114可以包括为每个神经网络114设置不同的参数128,为每个神经网络114不同地微调参数114,或者分配不同的权重(例如超参数或学习率)、张量等。因此。通过基于调整或训练过程以及(多个)神经网络和/或系统的目标为(多个)神经网络114设置适当的参数128,这可以提高整个系统的性能。
[0034]
ai加速器108的神经网络114可以包括任意类型的神经网络,包括例如,卷积神经网络(cnn)、深度卷积网络、前馈神经网络(例如,多层感知器(mlp))、深度前馈神经网络、径向基函数神经网络、kohonen自组织神经网络、循环神经网络、模块化神经网络、长/短期记忆神经网络等。(多个)神经网络114可以被部署或使用以执行数据(例如图像、音频、视频)
处理、对象或特征识别、推荐功能、数据或图像分类、数据(例如图像)分析等,诸如自然语言处理。
[0035]
作为示例,并且在一个或多个实施例中,神经网络114可以被配置为或包括卷积神经网络。卷积神经网络可以包括一个或多个卷积单元(或池化层)和内核,每个都可以用于不同的目的。卷积神经网络可以包括、包含和/或使用卷积内核(有时简称为“内核”)。卷积内核可以处理输入数据,并且池化层可以例如使用诸如max的非线性函数来简化数据,从而减少不必要的特征。包括卷积神经网络的神经网络114可以促进图像、音频或任意数据识别或其他处理。例如输入数据110(例如,来自传感器)可以被传递到形成漏斗的卷积神经网络的卷积层,压缩在输入数据110中检测到的特征。卷积神经网络的第一层可以检测第一特性,第二层可以检测第二特性,依此类推。
[0036]
卷积神经网络可以是一种深度、前馈人工神经网络,其被配置为分析视觉图像、音频信息和/或任意其他类型或形式的输入数据110。卷积神经网络可以包括被设计为使用最少预处理的多层感知器。基于它们的共享权重架构和平移不变性特征,卷积神经网络可以包括或被称为移位不变或空间不变人工神经网络。由于与其他数据分类/处理算法相比,卷积神经网络可以使用相对较少的预处理,因此卷积神经网络可以自动学习可能为其他数据分类/处理算法而手工设计的过滤器,从而提高与配置、建立或设置神经网络114相关联的效率,从而提供相对于其他数据分类/处理技术的技术优势。
[0037]
神经网络114可以包括神经元或节点的输入层116和输出层122。神经网络114还可以具有一个或多个隐藏层118、119,这些一个或多个隐藏层118、119可以包括神经元或节点的卷积层、池化层、全连接层和/或归一化层。在神经网络114中,每个神经元可以从前一层中的一些位置接收输入。在全连接层中,每个神经元都可以接收来自前一层的每个元素的输入。
[0038]
神经网络114中的每个神经元可以通过将一些函数应用于来自前一层中的感受野的输入值来计算输出值。应用于输入值的函数由权重向量和偏置(通常是实数)指定。神经网络114中的学习(例如,在训练阶段期间)可以通过对偏置和/或权重进行增量调整来进行。权重向量和偏差可以被称为过滤器,可以表示输入的某些特征(例如,特定形状)。卷积神经网络的显著特点是许多神经元可以共享同一个过滤器。这减少了存储器占用,因为可以在共享该过滤器的所有感受野中使用单个偏差和单个权重向量,而不是每个感受野都有自己的偏差和权重向量。
[0039]
例如,在卷积层中,系统可以对输入层116应用卷积操作,将结果传递到下一层。卷积模拟单个神经元对输入刺激的反应。每个卷积神经元只能处理其感受野的数据。与完全连接的前馈神经网络相比,使用卷积操作可以减少在神经网络114中使用的神经元数目。因此,卷积操作可以减少自由参数的数目,从而使网络更深,参数更少。例如,无论输入数据(例如,图像数据)大小如何,大小为5x5的平铺区域,每个都具有相同的共享权重,可以仅使用25个可学习参数。这样,具有卷积神经网络的第一神经网络114可以通过使用反向传播,来解决在训练具有多层的传统多层神经网络中梯度消失或爆炸的问题。
[0040]
神经网络114(例如,被配置有卷积神经网络)可以包括一个或多个池化层。一个或多个池化层可以包括局部池化层或全局池化层。池化层可以将一层处的神经元簇的输出组合成下一层中的单个神经元。例如,最大池化可以使用来自前一层处的神经元簇中的每一
个的最大值。另一个示例是平均池化,其可以使用来自前一层处的神经元簇中的每一个的平均值。
[0041]
神经网络114(例如,配置有卷积神经网络)可以包括全连接层。全连接层可以将一层中的每个神经元连接到另一层中的每个神经元。神经网络114可以被配置有卷积层中的共享权重,其可以指用于层中的每个感受野的相同过滤器,从而减少存储器占用并提高第一神经网络114的性能。
[0042]
隐藏层118、119可以包括被调整或配置为基于输入数据(例如,来自例如虚拟现实系统的传感器数据)检测信息的过滤器。当系统逐步通过神经网络114(例如,卷积神经网络)中的每一层时,系统可以转换来自第一层的输入,并将转换后的输入输出到第二层,等等。基于被检测、处理和/或计算的对象或信息的类型,以及输入数据110的类型,神经网络114可以包括一个或多个隐藏层118、119。
[0043]
在一些实施例中,卷积层是神经网络114(例如,被配置为cnn)的核心构建块。层的参数128可以包括可学习的过滤器(或内核)集合,其具有小的感受野,但延伸通过输入体积的整个深度。在前向传递期间,每个过滤器在输入体积的宽度和高度上进行卷积,计算过滤器条目与输入之间的点积,并产生该过滤器的二维激活图。结果,神经网络114可以学习当它在输入中的某个空间位置处检测到某种特定类型的特征时激活的过滤器。沿深度维度堆叠所有滤波器的激活图,形成卷积层的完整输出体积。因此,输出体积中的每个条目也可以被解释为神经元的输出,该神经元查看输入中的一个小区域,并与同一激活图中的神经元共享参数。在卷积层中,神经元可以接收来自前一层的受限分区的输入。通常,分区是方形的(例如,大小为5x5)。神经元的输入区域被称为感受野。因此,在全连接层中,感受野是整个前一层。在卷积层中,感受区域可以小于整个前一层。
[0044]
可以训练第一神经网络114以检测、分类、分割和/或翻译输入数据110(例如,基于输入数据110,通过检测或确定对象、事件、词语和/或其他特征的概率)。例如,神经网络114的第一输入层116可以接收输入数据110,处理输入数据110以将数据变换为第一中间输出,并将第一中间输出转发到第一隐藏层118。第一隐藏层118可以接收第一中间输出,处理第一中间输出以将第一中间输出变换为第二中间输出,并将第二中间输出转发到第二隐藏层119。第二隐藏层119可以接收第二中间输出,处理第二中间输出以将第二中间输出变换为第三中间输出,并将第三中间输出转发到输出层122。输出层122可以接收第三中间输出,处理第三中间输出以将第三中间输出变换为输出数据112,并转发输出数据112(例如,可能到后处理引擎,用于向用户渲染,用于存储等)。作为示例,输出数据112可以包括对象检测数据、增强(enhanced)/转换/增强(augmented)数据、推荐、分类和/或分割数据。
[0045]
再次参考图1a,ai加速器108可以包括一个或多个存储设备126。存储设备126可以被设计或实现为存储、保持或维护与(多个)ai加速器108相关联的任意类型或形式的数据。例如数据可以包括由(多个)ai加速器108接收的输入数据110和/或输出数据112(例如,在被输出到下一个设备或处理阶段之前)。数据可包括用于或来自(多个)神经网络114和/或(多个)处理器124的处理阶段中的任意一个的中间数据。数据可以包括用于输入到神经网络114的神经元并在(多个)神经网络114的神经元处处理的一个或多个操作数,其可以被从存储设备126读取或访问。例如,数据可以包括输入数据、权重信息和/或偏置信息、激活函数信息和/或针对一个或多个神经元(或节点)和/或(多个)神经网络114的层的参数128,其
可以被存储在存储设备126中并且从存储设备126读取或访问。数据可以包括来自(多个)神经网络114的神经元的输出数据,其可以被写入到存储设备126并被存储在存储设备126中。例如,数据可以包括用于(多个)神经网络114的一个或多个神经元(或节点)和/或层的激活数据、精炼或更新的数据(例如,权重信息和/或偏差信息、激活函数信息和/或其他参数128),其可以被传送或写入、并且被存储在存储设备126中。
[0046]
在一些实施例中,ai加速器108可以包括一个或多个处理器124。一个或多个处理器124可以包括用于预处理任何一个或多个神经网络114或ai加速器108的输入数据、和/或用于后处理任何一个或多个神经网络114或ai加速器108中的输出数据的任何逻辑、电路和/或处理组件(例如,微处理器)。一个或多个处理器124可以提供用于配置、控制和/或管理(多个)神经网络114或(多个)ai加速器108的一个或多个操作的逻辑、电路、处理组件和/或功能。例如,处理器124可以接收与神经网络114相关联的数据或信号,以控制或降低功耗(例如,经由对实现神经网络114的操作的电路的时钟门控控制)。作为另一个示例,处理器124可以划分和/或重新排列数据以用于单独处理(例如在ai加速器108的各个组件上)、顺序处理(例如,在ai加速器108的相同组件上,在不同时间处),或者被用于存储在存储设备的不同存储器切片中或者被存储在不同的存储设备中。在一些实施例中,处理器124可以配置神经网络114以例如通过标识、选择和/加载特定权重、激活函数和/或参数信息到神经网络114的神经元和/或层,来针对特定上下文进行操作、提供特定类型的处理和/或寻址特定类型的输入数据。
[0047]
在一些实施例中,ai加速器108被设计和/或实施为应对或处理深度学习和/或ai工作负载。例如,ai加速器108可以为包括人工神经网络、机器视觉和机器学习的人工智能应用提供硬件加速。ai加速器108可以被配置用于操作以处理机器人、物联网和其他数据密集型或传感器驱动的任务。ai加速器108可以包括多核或多处理元件(pe)设计,并且可以被并入各种类型和形式的设备,诸如,人工现实(例如虚拟、增强或混合现实)系统、智能手机、平板计算机、和计算机。ai加速器108的某些实施例可以包括或使用以下各项中的至少一项来实现:数字信号处理器(dsp)、协处理器、微处理器、计算机系统、处理器的异构计算配置、图形处理单元(gpu)、现场可编程门阵列(fpga)和/或专用集成电路(asic)。ai加速器108可以是基于晶体管、基于半导体和/或基于量子计算的设备。
[0048]
现在参考图1b,描绘了用于执行ai相关处理的设备的示例实施例。简而言之,该设备可以包括或对应于ai加速器108,例如,具有上文结合图1a描述的一个或多个特征。ai加速器108可以包括一个或多个存储设备126(例如,诸如静态随机存取存储器(sram)设备的存储器)、一个或多个缓冲器、多个处理元件(pe)电路或处理元件(pe)电路阵列、其他逻辑或电路(例如,加法器电路)和/或其他结构或构造(例如互连、数据总线、时钟电路、(多个)电源网络)。上述元件或组件中的每一个以硬件或至少硬件和软件的组合来实现。硬件可以例如包括电路元件(例如,一个或多个晶体管、逻辑门、寄存器、存储器设备、电阻元件、导体元件、电容元件和/或线或导电连接器)。
[0049]
在ai加速器108中实现的神经网络114(例如,人工神经网络)中,神经元可以采用各种形式并且可以被称为处理元件(pe)或pe电路。pe连接成特定的网络模式(pattern)或阵列,不同的模式服务于不同的功能目的。人工神经网络中的pe电操作(例如,在半导体实现中),并且可以是模拟的、数字的或混合的。为了与生物突触的效果相当,可以为pe之间的
连接分配乘法权重,可以对乘法权重进行校准或“训练”以产生适当的系统输出。
[0050]
可以根据以下方程(例如,其代表神经元的麦卡洛克一匹兹(mcculloch-pitts)模型)定义pe:
[0051]
ζ=∑iw
i xiꢀꢀꢀꢀ
(l)
[0052]
y=σ(ζ)
ꢀꢀꢀꢀ
(2)
[0053]
其中ζ是输入的加权和(例如,输入向量和抽头权重向量的内积),并且σ(ζ)是加权和的函数。在权重和输入元件形成向量w和x的情况下,ζ加权和变成一个简单的点积:
[0054]
ζ=w
·
x
ꢀꢀꢀꢀ
(3)
[0055]
这可以被称为激活函数(例如,在阈值比较的情况下)或传递函数。在一些实施例中,一个或多个pe可以被称为点积引擎。神经网络114的输入(例如,输入数据110)x可以来自输入空间,并且输出(例如,输出数据112)是输出空间的一部分。对于某些网络网络,输出空间y可以像{0,1}一样简单,也可以是复杂的多维(例如,多通道)空间(例如,对于卷积神经网络)。神经网络往往在输入空间的每个自由度有一个输入,在输出空间的每个自由度有一个输出。
[0056]
再次参考图1b,pe 120的输入x可以是从存储设备126(例如,sram)读取的输入流132的一部分。输入流132可以被引导到pe的一行(水平排或组),并且可以在一个或多个pe之间共享,或者被划分成数据部分(重叠或非重叠部分)作为相应的pe的输入。权重流134(例如,从存储设备126读取)中的权重134(或权重信息)可以被引导或提供给pe的列(垂直排或组)。列中的每个pe可以共享相同的权重134或接收对应的权重134。可以将每个目标pe的输入和/或权重直接路由(例如,从存储设备126)到目标pe,或者通过一个或多个pe(例如,沿着一行或一列pe)路由到目标pe。可以将每个pe的输出直接路由出pe阵列,或者通过一个或多个pe(例如,沿着一列pe)路由以离开pe阵列。每列pe的输出可以在相应列的加法器电路处被累加或相加,并被提供给用于相应pe列的缓冲器130。(多个)缓冲器130可以将接收到的输出提供、传输、路由、写入和/或存储到存储设备126。在一些实施例中,存储到存储设备126的输出(例如来自神经网络的一层的激活数据)可以被从存储设备126中取回或读取,并被用作pe阵列120的输入,用于稍后处理(神经网络的后续层)。在某些实施例中,可以从存储设备126取回或读取被存储到存储设备126的输出,作为ai加速器108的输出数据112。
[0057]
现在参考图1c,描绘了用于执行ai相关处理的设备的一个示例实施例。简而言之,该设备可以包括或对应于ai加速器108,例如,具有上文结合图1a和图1b描述的一个或多个特征。ai加速器108可以包括一个或多个pe 120、其他逻辑或电路(例如,加法器电路)和/或其他结构或构造(例如,互连、数据总线、时钟电路、电力网络)。上述元件或组件中的每一个以硬件或至少硬件和软件的组合来被实现。硬件可以例如包括电路元件(例如,一个或多个晶体管、逻辑门、寄存器、存储器设备、电阻元件、传导元件、电容元件和/或导线或导电连接器)。
[0058]
在一些实施例中,pe 120可包括一个或多个乘法累加(mac)单元或电路140。一个或多个pe有时可以被称为mac引擎。mac单元被配置为执行乘法累加运算。mac单元可以包括乘法器电路、加法器电路和/或累加器电路。乘法累加运算计算两个数的乘积并将该乘积添加到累加器中。mac运算结合累加器a以及输入b和c可以表示如下:
[0059]a←
a (b
×
c)
ꢀꢀꢀꢀ
(4)
[0060]
在一些实施例中,mac单元140可以包括在组合逻辑中实现的乘法器,随后是加法器(例如,包括组合逻辑)和存储结果的累加器寄存器(例如,包括顺序和/或组合逻辑)。累加器寄存器的输出可以被反馈到加法器的一个输入,这样在每个时钟周期上,乘法器的输出都可以被加到寄存器中。
[0061]
如上所述,mac单元140可以执行乘法功能和加法功能两者。mac单元140可以在两个阶段中操作。mac单元140可以首先在第一阶段计算给定数字(输入)的乘积,并且转发结果用于第二阶段操作(例如,加法和/或累加)。n位mac单元140可以包括n位乘法器、2n位加法器和2n位累加器。
[0062]
本文描述的各种系统和/或设备可以在计算系统中实现。图1d示出了代表性计算系统150的框图。在一些实施例中,图1a的系统可以形成计算系统150的处理单元156的至少一部分。例如,计算系统150可以被实现为设备(例如,消费设备),诸如智能手机、其他移动电话、平板计算机、可穿戴计算设备(例如,智能手表、眼镜、头戴式显示器)、台式计算机、膝上型计算机,或使用分布式计算设备实现。计算系统150可以被实现为提供vr、ar、mr体验。在一些实施例中,计算系统150可以包括常规的、专用的或定制的计算机组件,诸如处理器156、存储设备158、网络接口151、用户输入设备152和用户输出设备154。
[0063]
网络接口151可以提供到局域网/广域网(例如,因特网)的连接,(本地/远程)服务器或后端系统的网络接口也连接到该局域网/广域网。网络接口151可以包括有线接口(例如,以太网)和/或无线接口,其实现各种rf数据通信标准,诸如wi-fi、蓝牙或蜂窝数据网络标准(例如3g、4g、5g、60ghz、lte等)。
[0064]
用户输入设备152可以包括用户可以经由其向计算系统150提供信号的任意设备(或多个设备);计算系统150可以将信号解释为指示特定用户请求或信息。用户输入设备152可以包括以下任意一项或全部:键盘、触摸板、触摸屏、鼠标或其他指点设备、滚轮、点击轮、拨号盘、按钮、开关、键盘、麦克风、传感器(例如,运动传感器、眼动追踪传感器等)等等。
[0065]
用户输出设备154可以包括计算系统150可以经由其向用户提供信息的任意设备。例如,用户输出设备154可以包括显示器以显示由计算系统150生成或传递到计算系统150的图像。显示器可以结合各种图像生成技术,例如,液晶显示器(lcd)、包括有机发光二极管(oled)的发光二极管(led)、投影系统、阴极射线管(crt)等,以及支持电子(例如,数模或模数转换器、信号处理器等)。可以使用同时用作输入和输出设备的设备,诸如触摸屏。除了显示器之外或代替显示器,可以提供输出设备154。示例包括指示灯、扬声器、触觉“显示”设备、打印机等。
[0066]
一些实现包括电子组件,诸如微处理器、存储器和存储器,它们将计算机程序指令存储在计算机可读存储介质中。本说明书中描述的许多特征可以被实现为被指定为在计算机可读存储介质上编码的程序指令集的过程。当这些程序指令由一个或多个处理器执行时,它们使处理器执行程序指令中指示的各种操作。程序指令或计算机代码的示例包括诸如由编译器产生的机器代码,以及包括由计算机、电子组件或使用解释器的微处理器执行的高级代码的文件。通过合适的编程,处理器156可以为计算系统150提供各种功能,包括本文描述的由服务器或客户端执行的任意功能,或与消息管理服务相关联的其他功能。
[0067]
应当理解,计算系统150是示意性的并且变体和修改是可能的。结合本公开使用的
计算机系统可以具有本文没有具体描述的其他能力。此外,虽然参考特定块来描述计算系统150,但应当理解,这些块是为了便于描述而定义的,并不旨在暗示组件部分的特定物理布置。例如,不同的块可以位于同一设施、同一服务器机架或同一主板上。此外,块不需要对应于物理上不同的组件。块可以被配置为例如通过对处理器进行编程或提供适当的控制电路来执行各种操作,并且取决于如何获得初始配置,各种块可能是或可能不是可重新配置的。本公开的实现可以在包括使用电路和软件的任意组合实现的电子设备的各种装置中实现。
[0068]
b.用于在神经网络加速器中读取和写入稀疏数据的方法和设备
[0069]
本文公开了用于在神经网络加速器中读取和写入稀疏数据的系统、方法和设备的实施例。在一些实施例中,可以在每个字的基础上处理数据,从而使用数据的各个部分的特性或简档(profile)对数据执行写入和读取功能。例如,可以为数据字(dataword)的一个或多个不同部分确定多个零值和非零值。这些部分可以包括但不限于数据字的字节数据值或字节数据部分。本文描述的电路可以部分地基于相应部分对应于零值还是非零值,来确定读取或写入数据字的相应部分。在一些实施例中,电路可以忽略或跳过对应于零值的数据字部分,以减少读取和/或写入操作期间电路的访问能量值或功耗。
[0070]
读取和写入数据会使用计算系统的大量资源(例如,硬件和软件)。此外,访问存储器以执行读取和写入操作可能需要相应计算系统的资源消耗大量功率。例如,访问存储器以读取或写入数据可能需要相应电路上的大量功率来处理所有请求的或接收的数据。然而,数据可以包括稀疏程度或以稀疏程度为特征,并且包括不重要的、没有值的部分或可能不包含数据的部分。例如,数据可以包括对应于不必被读取或写入到存储器的零字节值(例如,相应部分中没有重要数据)的部分。因此,通过处理所有请求的或接收的数据,电路可以使用不必要量的功率和系统资源来读取和写入数据字的重要数据(例如,具有非零值的字节部分)和不重要的数据或稀疏部分(例如,具有零值的字节部分)。
[0071]
在神经网络处理应用中,某些类型数据和/或数据源的特征可能是具有稀疏的内容或数据。本文描述的方法、系统和设备可以通过确定相应数据字的稀疏性来减少用于访问存储器的功率使用。例如,电路可以确定包括非零字节值的数据字部分和包括零字节值的数据字部分。字节值可以指数据的字节(任意预定义数目或长度的位)的值,并且可以指示数据的字节中所有位的值的集合。具有零字节值的字节可指示该字节中的所有位为零(“0”)、低或空。具有非零字节值的字节可指示该字节中并非所有位都为零(“0”)、低或空;使得至少一位为高、1(“1”)或非零。
[0072]
存储器(例如,静态随机存取存储器(sram))可以被配置为具有多个切片(slice)或者被分成多个切片。例如在一个实施例中,数据字可以包括具有八个1字节数据值的64位字。存储器可以被配置或(例如,逻辑地或虚拟地)被划分为多个切片(例如,三个切片),其可以包括但不限于具有8位宽度的1位掩码切片、具有32位宽度的第一切片(例如,左切片)、以及具有32位宽度的第二切片(例如,右切片)。该电路可以重新组织数据字,使得具有非零字节值的部分从第一切片的第一端处开始,并且在具有非零字节值的部分之后、随后或接下来存储数据字的具有零字节值的部分。
[0073]
例如,当写入新的数据字时,可以生成位掩码,其中位掩码中的每一位指示数据字的字节对应于非零字节值还是零字节值。在一些实施例中,可以生成位掩码,其中位掩码中
的位指示数据的字节的一半的位(例如,4位)、或字节的其他部分、或预定数目的(一个或多个)字节,对应于非零值或零值。该电路可以从第一切片的第一端(例如,左端、左部分)或其他预定部分开始,写入非零字节值。对于读取操作,电路可以取回对应于数据字的位掩码,并检查数据字中非零字节值的字节数。该电路可以读取从第一切片的第一端(例如,左端、左部分)或其他预定部分开始的非零字节值。
[0074]
在一些实施例中,在写入或读取操作期间,可以忽略或跳过零字节值。例如,电路可以确定非零字节值的数目是否小于或等于第一切片的大小。如果非零字节值的数目小于或等于第一切片的大小,则电路可以忽略或跳过零字节值的写入或读取操作。如果非零字节值的数目大于第一切片的大小,则电路可以访问至少第一切片和第二切片以用于零字节值和非零字节值的写入或读取操作。
[0075]
现在参考图2a-2b,描绘了用于在神经网络加速器(例如,图1a的ai加速器108)中读取和写入稀疏数据的系统的实施例。简而言之,图2a示出了用于将数据字220写入到存储器210的系统。该系统可以包括具有存储器210以进行读取和写入操作访问的电路202。存储器210可以被划分或配置成多个切片204,其中每个切片具有预定大小208或存储容量。电路202可以访问存储器210的切片204以写入数据字220的字节222或读取数据字220的字节222。
[0076]
电路202可以包括处理器,诸如但不限于以上关于图1a描述的处理器124。电路202可以是以上关于图1d描述的计算系统150的组件或一部分。存储器210可以包括静态随机存取存储器(sram)或任意其他类型的存储器、存储驱动器或存储寄存器。在一些实施例中,存储器210可以包括图1a-1b的存储设备126或图1d的存储装置158、与图1a-1b的存储设备126或图1d的存储装置158相同或基本相似。存储器210可以被划分为多个切片204a-204n。切片204可以各自对应于存储器210的一部分或分段,以及存储器210的一个或一系列地址。切片204可以比存储器210的总尺寸更小或具有小于存储器210的总尺寸的尺寸。例如,存储器210可以包括或具有对应于多个位的大小或访问大小212。每个切片204可以具有小于存储器的访问大小212的大小208。每个切片204的位容量或字节容量可以小于存储器210的位容量或字节容量。在一些实施例中,切片204可以具有相同的大小208(例如,具有相同的位或存储容量)。在一些实施例中,一个或多个切片204可具有与一个或多个其他或不同的切片204的大小208不同的大小208(例如,不同的位或存储容量)。作为非限制性示例,存储器210可以包括两个切片204a-204b。例如,存储器210可以包括三个切片204a-204c。存储器210可以包括多于三个切片204a-204n。
[0077]
在一些实施例中,存储器210可以包括位掩码切片204c。位掩码切片204c可以存储位掩码230。在一些实施例中,位掩码切片204c可以是不同的切片(例如左切片、第一切片)的一部分。例如,电路202可以存储与数据字220的位掩码230相对应的位掩码指示符,而不是具有单独或独立的位掩码切片204c。位掩码230可以表示数据字220的属性或简档。位掩码230可以包括多个位232,每个位对应于数据字220的至少一个字节部分222。例如,位掩码的位232可以标识数据字中数据字的至少一个字节222的位置(例如,相对于数据字的其他字节222的位置)。
[0078]
存储器210可以包括计数器234。计数器234可以包括或对应于种群计数(population count)(例如,被实现以对位掩码中的非零位的数目进行计数的位计数器)。
计数器234可以包括对应于(或指示)数据字220的具有非零字节值的字节222的数目的值。例如计数器234的值可以与数据字220的非零字节值的数目相同或等于数据字220的非零字节值的数目。
[0079]
在一些实施例中,并且如图2a所示,电路202可以接收具有多个字节222或字节部分222的数据字220。字节部分222可以包括非零字节值或零字节值。例如,字节部分222中的每个字节部分可以包括多个位(例如,八位)。在一些实施例中,相应的字节部分222的位的值可以包括非零字节值(例如,1)、合计或相加为非零字节值(例如,1)。在一些实施例中,相应的字节部分222的位的值可以包括零字节值(例如,0)、合计或相加为零字节值(例如,0)。
[0080]
电路202可以修改、重新布置、重新排列、重新排序或以其他方式重新定位字节部分222,使得具有非零字节值的字节部分222被组合在一起或打包在一起以形成经修改的数据字或数据字220的打包表示224。电路202可以修改或重新定位字节部分222,使得具有零字节值的字节部分222被组合在一起或打包在一起。
[0081]
电路202可以生成或填充位掩码230的位232,以指示数据字的对应的字节部分222是包括非零字节值还是零字节值。在一些实施例中,电路可以生成或填充位掩码230的位232,以各自指示数据字220的一组位或字节(例如,相应的字节部分222的一半位(例如,4位),或相应的字节部分222的一些其他部分、子集或位数,或预定数目的字节部分222)具有非零值或零值。可以确定指示包括非零值的字节部分222的总量或数目的数据字220的计数器234或种群计数234。例如,如果对应的字节部分222包括非零字节值,则电路202可以将值“1”指定给位掩码230的位232,并且如果对应的字节部分222包括零字节值,则电路可以将值“0”指定给位掩码230的位232。处理器可以(算术地)将位掩码230的所有指定值相加或加,以提供对应于计数器234的总值。电路202可以将计数器234与写入阈值250进行比较,以确定是否写入数据字220或跳过、忽略或以其他方式不写入数据字220。例如,如果数据字220的种群计数234为零或不包括任意非零字节值,则电路202可以跳过、忽略或以其他方式不将数据字220写入到存储器。在一个实施例中,写入阈值可以为零。在一些实施例中,如果计数器234超过写入阈值,则执行写入操作。如果数据字220的种群计数234大于写入阈值250,则电路202可以将种群计数234与切片204的访问大小阈值252进行比较。在一些实施例中,访问大小阈值252可以对应于多个切片204中的第一切片204的大小208。访问大小阈值252可用于确定多个切片204中的多少个切片204将用于将数据字220写入到存储器210。如果种群计数234小于或等于第一切片204的访问大小阈值252,则电路202可以将具有非字节值的字节部分222写入到多个切片204中的第一切片204。电路202可以从第一切片204的第一侧206的第一位置开始将具有非零字节值的字节部分222写入到第一切片204,并以相互邻接的顺序写入这些字节部分222,对应于这些字节部分222在数据字220的原始格式或排列中的顺序(例如,以相对于彼此相同的顺序)。
[0082]
如果种群计数234大于第一切片204的访问大小阈值252,则电路202可以将具有非字节值的字节部分222写入到多个切片204中的第一切片204和第二切片204,或写入到多个切片204中的多个切片204。例如,电路202可以从第一切片204的第一侧206的第一位置开始,将具有非零字节值的字节部分222写入到第一切片204,直到第一切片已满或满容量,并且以与字节部分222在数据字220的原始格式中的顺序相对应的顺序,将剩余的字节部分222写入到第一切片204之外的第二切片204或多个切片204。这可以称为数据字220的打包
过程。
[0083]
在一些实施例中,电路202可以将如位掩码230所指示的数据字220的具有零字节值的字节部分222忽略、跳过、绕过或不写入。电路202可以忽略、跳过、绕过或不写入如位掩码230指示的数据字220的具有零字节值的一些字节部分222,并且将数据字220的具有零字节值的字节部分222中的一个或多个字节部分写入到具有非零字节值的至少一个字节部分222的切片204(例如,以完全填充切片204)。在一些实施例中,电路202可以忽略、跳过或不写入如位掩码230所指示的具有零字节值的数据字220的字节部分222中的每个字节部分。例如,电路202可以通过仅写入具有非零字节值的字节部分222并且忽略或不写入具有零字节值的字节部分222,来减少用于写入操作的功率使用。在一些实施例中,电路202可以通过仅写入具有非零字节值的字节部分222并且忽略或不写入具有零字节值的字节部分222,来减少用于写入操作的电路202的能量消耗值或功率使用。
[0084]
现在参考图2b,提供了一种用于从存储器210读取数据字220的系统。数据字220可以包括被写入到图2a中的存储器210的数据字220的打包表示224。例如数据字220的打包表示224可以包括或可以对应于将具有非零字节值的字节部分222组合在一起或按顺序写入到存储器210的一个或多个切片204的、经修改的数据字220。为了从存储器210读取数据字220的打包表示224,电路可以使用位掩码230来确定数据字220的具有非零字节值的字节部分222和数据字的具有零字节值的字节部分222。例如电路202可以访问位掩码230并且使用各个位232的值来确定数据字的对应的字节部分222的值。电路202可以将数据字220的种群计数234与写入阈值250进行比较,以确定数据字220是否包括具有非零字节值的任意字节部分222。电路202可以将数据字220的种群计数234与访问大小阈值252进行比较,以确定在存储器210中数据字220的字节部分222被写入到多少切片204。
[0085]
电路202可以读取被存储在存储器210的一个或多个切片204中的数据字220的打包表示224。例如,电路202可以经由第一切片204或经由多个切片204(例如,第一切片和第二切片),读取被存储在存储器210中的数据字220的打包表示224。打包表示224可以包括字节部分222,字节部分222具有从第一侧206的端处开始存储的、数据字220中的非零字节值以及被存储在数据字220的剩余部分(例如,右侧或最低有效位部分)中的任何零字节值。当数据字220在被写入到存储器210之前被接收时,电路202可以解包数据字220的打包表示224,以将数据字220恢复到与数据字220的格式相对应的(字节部分222的)原始格式或原始顺序。例如,电路202可以使用位掩码230来确定数据字220中的字节部分222的每个字节部分的原始位置。电路202可以使用位掩码230来确定数据字220的字节部分222是包括非零字节值还是零字节值。电路202可以基于位掩码230的位232的顺序,将数据字220读回、解包或重建为原始格式。
[0086]
现在参考图2c,描绘了用于在神经网络加速器中读取和写入稀疏数据的系统200的实施例。系统200包括电路202,具有存储器210,用于读取和写入操作。在图2c所示的实施例中,存储器210被分割、划分或配置为三个切片:第一切片204a、第二切片204b和位掩码切片204c。在其他实施例中,存储器210可以包括少于三个切片或多于三个切片204。电路202可访问存储器210的切片204,以写入数据字220的字节222或读取数据字220的字节222。
[0087]
每个切片204可以包括多个端口260以接收或发送信号。例如,切片204可以包括第一端口260a或写入端口以接收、写入和/或存储数据字220的部分,或执行写入操作。切片
204可以包括第二端口260b或地址端口以接收数据字220和/或数据字220的字节部分222的地址数据。切片204可以包括第三端口260c或读取端口以读出数据字220的部分,或执行读取操作(例如,输出存储器切片的内容或字节)。在一些实施例中,切片204可以包括第四端口260d或读取使能端口以启用相应切片204以进行读取操作。在一些实施例中,切片204可以包括第五端口260e或写入使能端口以启用相应切片204以进行写入操作。
[0088]
电路202可以包括多个电路或信号元件以向切片204传输或提供控制信号以发起针对存储器210的读取或写入操作。例如,电路202可包括多个寄存器或锁存元件262以响应于提供给相应锁存元件262的输入而启用和禁用用于读取和写入操作的切片204。电路202可以包括地址信号输入268、用于将数据字220或数据字220的部分写入到存储器210的写入输入270、以及用于提供来自存储器210的数据字220或数据字的部分的读取输出272。地址信号输入268可以与位掩码切片204c的地址端口260b耦合、经由至少一个锁存器262来与第一切片204a的地址端口260b耦合、以及经由至少一个锁存器262来与第二切片204b或多个切片204的第二端口260b(例如,地址端口)耦合。
[0089]
对于写入操作,电路202可以通过电路202的写入输入270接收写入信号。在一些实施例中,写入信号可以包括写入指令、要被写入到一个或多个切片204的数据字220和/要被写入到一个或多个切片204的数据字220的部分。写入输入270可以与稀疏计数器234a的输入和打包元件264的输入耦合。稀疏计数器234a可以计数或确定数字数据字220的具有非零字节值的字节部分222的数目,并生成计数器信号以启用一个或多个切片以进行写入操作。例如,稀疏计数器234a可以响应于来自电路202的写入输入270的写入信号而生成写入计数器信号。稀疏计数器234a可以包括对应于数据字220的具有非零字节值的字节部分222的数目的计数器值。在一些实施例中,对于数据字220的具有非零字节值的每个字节部分222,稀疏计数器234a的计数器值可以例如增加1的值。响应于计数器值大于写入阈值(例如,大于零),稀疏计数器234a可以向第一切片204a的第五端口260e(例如,写入使能端口)提供写入计数器信号。响应于计数器值大于第一切片204a的访问大小阈值,稀疏计数器234a可以向第二切片204b或多个切片204的第五端口260e(例如,写入使能端口)提供写入计数器信号。稀疏计数器234a可以向位掩码切片204c和/或打包元件264提供指示数据字220的位掩码230值的掩码信号。
[0090]
打包元件264可响应于来自稀疏计数器234a的掩码信号以及来自电路写入输入270的写入信号生成打包信号,掩码信号指示待写入的相应数据字220包括一个或多个具有非零字节值的字节部分。打包元件264可以向切片204的第一端口260a(例如,写入端口)提供打包信号和/或写入信号,以启动或执行针对相应切片204的写入操作。在一些实施例中,打包信号可以包括要被写入到接收打包信号的相应切片204的数据字220的一个或多个字节部分222。
[0091]
对于读取操作,位掩码切片204c可以生成读取信号,并将读取信号提供给种群计数器234b和/或解包元件266。例如,位掩码切片的第三端口260c(例如,读取端口)204c可以经由至少一个寄存器或锁存元件262与种群计数器234b和解包元件266的输入耦合。种群计数器234b可以响应于经由至少一个锁存元件262、来自位掩码切片204c的第三端口260c(例如,读取端口)的读取信号,来生成读取计数器信号。种群计数器234b可以包括对应于数据字220的具有非零字节值的字节部分222的数目的计数器值。在一些实施例中,对于数据字
220的具有非零字节值的每个字节部分222,可以将种群计数器234b的计数器值增加例如值1。在一些实施例中,种群计数器234b的计数器值可以与稀疏计数器234a的计数器值相同。响应于计数器值大于读取阈值(例如,大于零),种群计数器234可以向第一切片204a的第四端口260d(例如,读取使能端口)提供读取计数器信号。
[0092]
响应于计数器值大于第一切片204a的访问大小阈值,种群计数器234可以向第二切片204b或多个切片204的第四端口260d(例如,读取使能端口)提供读取计数器信号。读取计数器信号可以使能相应切片204开始读取操作。第一切片204a的第三端口260c(例如,读取端口)可以与解包元件266的输入耦合,以将被存储在第一切片204a中的数据字220的打包表示224或数据字220的打包表示24的部分提供给解包元件266。第二切片204b或多个切片204的第三端口260c(例如,读取端口)可以与解包元件266的至少一个输入耦合,以将被存储在第二切片204b或多个切片204中的数据字220的打包表示224的部分提供给解包元件266。解包元件266可以被配置为解包、重建或修改数据字220的打包表示224,从而以原始格式或相应数据字220在被写入到存储器210之前所处的格式来读出数据字220。解包元件266的输出可以与电路202的读取输出272耦合,从而以原始格式或相应数据字220在被写入到存储器210之前所处的格式来提供数据字220。
[0093]
现在参考图2d,提供了第一混合模式写入操作。在图2d中,写入操作可包括使用多路复用器280将数据字220写入到存储器210的多个切片204中的第一切片204。多路复用器280可以包括多个输入,诸如但不限于位掩码230、数据字220的打包表示224、数据字220和数据字220的具有非零字节值的字节部分222中的两个或更多个的组合。多路复用器280可以接收多个输入并提供对应于或表示数据字220的打包表示224(例如,多路复用打包表示)的单个输出。例如,在一些实施例中,多路复用器280可以接收位掩码230或位掩码230的位232,并且数据字220的打包表示224可以生成单个输出,多路复用打包表示224包括、对应于或表示位掩码230和数据字220的打包表示224。电路202可以将数据字220的多路复用打包表示224写入到多个切片204中的第一切片204a。因此,电路202可以将位掩码230写入到第一切片204a并且不为位掩码230建立个别的或单独的切片。
[0094]
在一些实施例中,电路202可以使用位掩码230来确定数据字220的种群计数234。电路202可以将种群计数234与多个切片204中的第一切片204a的访问大小阈值252进行比较。如果种群计数234小于或等于第一切片204a的访问大小阈值252,则电路202可以将数据字220的多路复用打包表示224从第一切片204a的第一侧206的第一位置或端开始,写入到第一切片204a。如果种群计数234大于第一切片204a的访问大小阈值252,则电路202可以将数据字220的多路复用打包表示224从第一切片204a的第一侧206的第一位置或端开始,写入到第一切片204a,并将数据字220的剩余字节部分222写入到第二切片204b和/或多个切片204中的其他切片204。
[0095]
现在参考图2e,提供了第一混合模式读取操作。在图2e中,读取操作可以包括使用多路复用器280来解包并输出数据字220。在一些实施例中,电路202可以确定数据字220是否被打包。如果数据字220被打包,则电路202可以访问用于数据字220的位掩码230以标识数据字220内具有非零字节值的字节部分222。电路202可以向多路复用器280提供多个输入以将数据字220解包或重建为原始格式。例如,电路202可以提供数据字220的打包表示224作为来自第一切片204a或多个切片204的多路复用器的输入。电路202可以提供解包数据字
220作为多路复用器280的输入。可以从第二切片204b或数据字220的打包表示224被写入到的不同切片204访问解包数据字220。电路202可以向多路复用器280提供指示,其指示在被写入到存储器210时相应的数据字220是否被打包。使用多路复用器280的电路202可以在接收数据字220时或在将数据字220写入到存储器210之前,解包或重建数据字220,以在与字节部分222的原始位置相对应的各自位置中,包括具有非零字节值的字节部分222和具有零字节值的字节部分222。电路202可以解包数据字220的打包表示224,使得数据字220的每个字节部分222都在由位掩码230所指示的位置。
[0096]
现在参考图3a-3b,提供了用于为神经网络加速器读取和写入稀疏数据的方法300。简而言之,方法300可以包括建立多个切片(302)、访问掩码(304)、确定是读取操作还是写入操作(306)、修改数据字(308)、将字节值与阈值进行比较(310)、写入到第一切片(312)、写入到第二切片或多个切片(314)、确定字节值(316)、读取字节部分(318)、修改打包表示(320)、以及提供数据字(322)。这些操作中的一个或多个可以由至少一个处理器和/或电路来执行。
[0097]
在操作302处,并且在一些实施例中,可以建立多个切片204。在一些实施例中,电路202或处理器可以为具有数据字220的访问大小212的存储器210建立多个切片204。存储器210可被分割或划分,以包括两个或更多个切片204。例如,可以建立第一切片204a并且可以建立第二切片204b。在一些实施例中,可以建立位掩码切片204c。与第一切片204a和第二切片204b相比,位掩码切片204c可以是存储器210的单独部分或分段。在一些实施例中,位掩码切片204c可以是第一切片204a或第二切片204b的一部分或被包括在第一切片204a或第二切片204b中。存储器的切片204的数目可以变化。在一些实施例中,存储器210可以包括三个切片204。在一些实施例中,存储器210可以包括多于三个切片204。
[0098]
在一些实施例中,多个切片204中的第一切片204可以被配置为在存储器210中存储或提供数据字220的第一侧206、第一部分或第一分段。第一侧206具有的大小可以小于数据字220的大小。例如,第一侧206具有的大小可以小于数据字220的总大小或位长度。第一侧206可以对应于数据字220的一个或多个字节222。在一个实施例中,第一侧206可以包括比形成数据字220的字节222的总数更少的数据字220的字节222。
[0099]
在一些实施例中,可以建立具有相同大小208或容量的每个切片204。在一些实施例中,可以建立与一个或多个其他切片240相比,具有不同尺寸208或容量的一个或多个切片204。例如,可以形成具有第一尺寸208的第一切片204a和第二切片204b,并且可以形成具有不同于第一尺寸208的第二尺寸208的位掩码切片204c。第一切片204a可以形成为具有第一尺寸,第二切片204b可以形成为具有不同于第一尺寸208的第二尺寸208,并且可以形成具有不同于第一尺寸208和第二尺寸208的第三尺寸208的位掩码切片204c。
[0100]
在一些实施例中,可以部分地基于能量消耗值或电路202的功率使用来确定切片204的大小208。例如,可以部分地基于以下各项来确定一个或多个切片204的大小208:提供每次访问的最低能量值(例如,皮焦耳/字节(pj/字节))的大小208,或电路202在使用一个或多个切片204来写入一个或多个数据字220和/或读取一个或多个数据字220时的功率使用的对应/预期减少。每次访问能量值可以对应于以焦耳每字节(例如pj/字节)为单位、将数据字220读出或写入到存储器210的切片204的能量值。每次访问的能量值可以用于确定或指示将数据字220读出或写入到存储器210的切片204的电路202的功率使用的减少。
[0101]
电路202可以部分地基于数据字220的数目、访问大小212或存储器210的容量和/或每个数据字220的大小,确定为存储器210提供每次访问最低能量值的切片204的大小208、或它们的范围或大小208。在一些实施例中,电路202可以选择为存储器210提供每次访问最低能量值的切片204的大小208、或对应的范围或大小208,并且建立具有相应大小208的切片204。在一些实施例中,电路202可以基于功率使用值的目标或预定减少来选择切片204的大小208、或者它们的范围或大小208,并且建立具有相应大小208的、提供功率使用值的目标或预定减少的切片204。
[0102]
可以建立具有与存储器210的其他切片204不同大小208的位掩码切片204c。例如,可以建立具有与存储器210的第一切片204a和第二切片204b不同大小208的位掩码切片204c。可以至少部分地基于数据字220的字节222的数目,来选择位掩码切片204c的大小208或位数232。在一些实施例中,位掩码切片204c的大小208或位数232可以等于数据字220的字节222的数目。在具有64位数据字220的一个实施例中,位掩码切片204c的大小208可以是8位。位掩码230可以被存储或保持在位掩码切片204c中。位掩码230可以包括位数232,位数232等于或对应于位掩码切片204c的大小。位掩码230的每一位232的每一值可以对应于或表示数据字220的至少一个字节值222。例如,位掩码230的第一位232的第一位置或第一值可对应于或表示数据字220的第一字节222。在一些实施例中,位掩码230的每一位232的值(例如,1、0)可以指示或表示数据字的对应字节222的值(例如,非零字节、零字节)。例如,位掩码230的位232的非零值(例如,1)可以指示或表示数据字的对应字节222的非零字节值,并且位掩码230的位232的零值(例如,0)可以指示或表示数据字的对应字节222的零字节值。位掩码230可以以一字节为基础或以两字节为基础,标识非零字节值的位置。例如,在一些实施例中,位掩码230的位232中的每个位可以表示数据字220的单个字节222。在一些实施例中,位掩码230的位232中的每个位可以表示数据字220的两个字节222。
[0103]
现在参考操作304,并且在一些实施例中,可以访问掩码230。在一些实施例中,电路202可以访问标识数据字220内具有非零值的字节位置222或字节部分222的掩码230(例如,位掩码)。电路202可以访问具有多个位232的位掩码230。位掩码230中的位232的每个位可以对应于或表示数据字220的至少一个字节位置222。例如,位掩码230的第一位232可以表示数据字220的第一字节位置222或第一字节222,位掩码230的第二位232可以表示数据字220的第二字节位置222或第二字节222,并且位掩码230的第n位232可以表示数据字220的第n字节位置222或第n字节222。在一些实施例中,位掩码230中的位232中的每个位可以具有零值(例如,0)或非零值(例如,1),其表示或指示在数据字220的对应字节位置处的字节222的值。
[0104]
例如,位掩码230的第一位232的值可以指示数据字220的第一字节位置222处的字节222的值,位掩码230的第二位232的值可以指示数据字220的第二字节位置222处的字节值,并且位掩码230的第n位232的值可以指示数据字220的第n字节位置222处的字节222的值。电路202可以访问位掩码230,并且基于位掩码230的对应位232的值来确定数据字220的具有非零值的字节位置222。电路202可以访问位掩码230,并且基于位掩码230的对应位232的值来确定数据字220的具有零值的字节位置222。
[0105]
现在参考操作306,并且在一些实施例中,可以确定指令或请求是用于写入操作还是读取操作。电路202可以确定指令或请求是用于写入操作还是读取操作。对于写入操作,
方法300可以进行到操作308。对于读取操作,方法300可以进行到操作318。
[0106]
现在参考操作308,并且在一些实施例中,可以修改数据字220。在一些实施例中,电路202可以修改数据字220以具有从第一侧206的端处开始存储的非零字节值,以及在数据字220的剩余部分中存储的任意零字节值。电路202可以修改数据字220,使得具有非零字节值的字节部分222被移动到或被重新定位到第一侧206的第一端处的字节位置,并且具有零字节值的字节部分222被移动到或被重新定位在具有非零字节值的最后的字节部分222之后。例如,电路可以将具有零字节值的字节部分222从它们在数据字220内的原始位置(例如,接收的位置或顺序)移动到或重新定位到具有非零字节值的最后字节部分222之后的位置,使得具有非零字节值的字节部分222位于具有零字节值的字节部分222之前。
[0107]
在一些实施例中,电路202可以执行打包算法以打包或修改数据字220。例如,打包算法可以包括扇入/扇出率。扇入/扇出率可对应于或等于到存储器210内的存储器位置或存储器210的至少一个切片204的连接数。电路202可执行打包算法以将数据字220的字节部分222映射或打包到存储器210的切片204内的一个或多个存储器位置。在一些实施例中,打包算法可以具有n*(n-1)2=1/2n^2-n/2的路由复杂度。在一些实施例中,第一字节部分222可以不使用n对1映射。例如,当前n/2个字节值为零时,电路可以将剩余部分复制或映射到切片204的第一侧的第一端。在一些实施例中,打包算法可以具有n/2*n/2 n/2*(n/2-1)/2=3/8n^2-n/4的路由复杂度。扇入/扇出率可以等于n/2。在一些实施例中,电路202可以独立地打包n/2个字节部分222并将相应字节部分222连接在一起。例如,在这样的实施例中,打包算法可以具有n/2*n/2 n/2*(n/2-1)2=38n^2-n/4的路由复杂度。扇入/扇出率可以等于n/2。
[0108]
在一些实施例中,电路202可以保持具有非零字节值的字节部分222相对于彼此的顺序。例如,电路202可以移动或重新定位具有零值的字节部分222,并且将具有非零值的字节部分222向上移动到先前由具有零值的一个或多个字节部分222占据的位置,使得具有非零字节值的字节部分222相对于具有非零字节值的其他字节部分222的顺序与原始接收的相同。
[0109]
在一些实施例中,电路202可以保持或改变具有零字节值的字节部分222相对于彼此的顺序。例如,电路202可以移动或重新定位具有零值的字节部分222,使得具有零字节值的字节部分222相对于具有零字节值的其他字节部分222的顺序与最初接收的相同。例如,在一个实施例中,数据字220可以包括具有非零字节值的第一字节部分222、具有零字节值的第二字节部分222、具有零字节值的第三字节部分222、以及具有非零字节值的第四字节部分222。电路202可以修改数据字220以将具有零字节值的第二字节部分222移动到具有非零字节值的第四字节部分222之后。电路202可以修改数据字220以将具有零字节值的第三字节部分222移动到第二字节部分222之后,第二字节部分222位于经修改的数据字220中具有非零字节值的第四字节部分222之后。因此,第一字节部分222和第四字节部分222按照它们在原始数据字220中的定位(例如,第一字节部分在第四字节部分之前),在经修改的数据字220中保持相对于彼此的顺序。第二字节部分222和第三字节部分222按照它们在原始数据字220中的定位(例如,第二字节部分在第三字节部分之前),在经修改的数据字220中保持相对于彼此的顺序。在一些实施例中,具有零字节值的字节部分222的顺序无关紧要,因为这些字节部分222都是相同的内容和相同的值。因此,电路22可以在打包期间移动或改变
顺序(例如,从而最小化字节移位的总量)。
[0110]
现在参考操作310,可以执行非字节值与阈值的比较。在一些实施例中,电路202可以确定在第一侧206的端处开始的非零字节值的数目是否小于或等于第一切片204的第一访问大小208。电路202可以确定用于位掩码230的种群计数234。种群计数234可以包括表示或对应于数据字220的非零字节值的数目的值。例如,对于具有3个非零字节值的字节部分222的数据字220,数据字220的种群计数234可以是三。对于具有5个非零字节值的字节部分222的数据字220,数据字220的种群计数234可以是五。
[0111]
电路202可以将种群计数234与一个或多个阈值进行比较,以确定是否写入数据字220以及将数据字220写入到哪个切片204或哪些切片204。在一些实施例中,电路202可以将种群计数234与写入阈值进行比较。在一些实施例中,写入阈值可指示是否写入数据字220或跳过、忽略或以其他方式不写入数据字220。例如,如果数据字220的种群计数234为零(未能超过写入阈值)或不包括任意非零字节值,则电路202可以跳过、忽略或以其他方式不写数据字220。在一个实施例中,写入阈值可以为零。
[0112]
如果数据字220的种群计数234大于写入阈值,则电路可以将种群计数234与至少一个切片204的访问大小阈值进行比较,以确定将数据字220写入到哪个切片204或哪些切片204。访问大小阈值可以是或可以包括一个或多个切片204的访问大小208。在一些实施例中,访问大小阈值可以是或可以包括第一切片204的访问大小208。在一些实施例中,访问大小阈值可以是或可以包括多个切片中的最小切片204的访问大小208。如果数据字220的种群计数234小于或等于第一切片204的第一访问大小阈值,则方法300可以进行到操作312。如果数据字220的种群计数234小于或等于第一切片204的第一访问大小阈值时,则方法300可以进行到操作314。
[0113]
现在参考操作312,并且在一个或多个实施例中,经修改的数据字220可以被写入到第一切片204。在一些实施例中,电路202可以响应于确定或比较,将经修改的数据字220至少经由第一切片204写入到存储器210。电路可以确定经修改的数据字220的种群计数234小于或等于第一切片204的访问大小208。电路可以确定经修改的数据字220的非零字节值的数目小于或等于第一切片204的访问大小208。电路202可以将经修改的数据字220的具有非零字节值的字节部分222写入到第一切片204,并且将经修改的数据字220的具有零字节值的字节部分222跳过、忽略或不写入到存储器210。电路202可以仅经由第一切片204写入经修改的数据字220的第一侧。例如,如果经修改的数据字220的非零字节值的数目小于或等于第一切片204的访问大小208,则电路可以将具有非零字节值的所有字节部分222写入到第一切片204并且不访问或写入到多个切片204中的任意其他切片204。
[0114]
在一些实施例中,当将经修改的数据字220写入到第一切片204时,电路202可以保持具有非零字节值的字节部分222相对于彼此的顺序。例如,电路202可以将经修改的数据字写入到第一切片,使得具有非零值的字节部分222相对于具有非零字节值的其他字节部分222具有如原始接收的相同的顺序。例如,在一个实施例中,电路202可以将具有非零字节值的第一字节部分222写入到第一切片204的第一侧206的第一端或第一位置,并将具有非零字节值的第二字节部分222写入到第一切片204的第一侧206的第二位置,位于经修改的数据字220的第一字节部分222之后。
[0115]
现在参考操作314,并且在一些实施例中,经修改的数据字220可以被写入到第一
切片204和第二切片204。在一些实施例中,电路202可以响应于确定或比较,来将经修改的数据字220经由存储器210的多个切片204写入到存储器210。电路可以确定经修改的数据字220的种群计数234大于第一切片204的访问大小208。该电路可以确定经修改的数据字220的非零字节值的数目大于第一切片204的访问大小208。电路写入202可以部分地基于经修改的数据字220的具有非零字节值的字节部分222的数目与切片204中的每个切片的访问大小2308相比,将经修改的数据字220的具有非零字节值的字节部分222写入到第一切片,或将经修改的数据字220的具有非零字节值的字节部分222写入到多于两个切片204。电路202可经由第一切片204将经修改的数据字220的第一侧的字节222或字节部分222写入,并且经由第二切片204将剩余的非零字节222或具有非零字节值的字节部分222写入。
[0116]
电路202可以将具有非零字节值的字节部分222以具有非零字节值的相应字节部分222在原始数据字220中相对于彼此排列的顺序写入到切片204。例如,当将经修改的数据字220写入到第一切片204和第二切片204或多个切片204时,电路202可以保持具有非零字节值的字节部分222相对于彼此的顺序。电路202可以将经修改的数据字220写入到第一切片,使得具有非零值的字节部分222相对于具有非零字节值的其他字节部分222具有如原始接收的相同的顺序,并且,一旦第一切片204已满或达到容量,则可以将具有非零值的剩余字节部分222写入到第二切片204和/或附加切片204。
[0117]
例如,在一个实施例中,第一切片204可以具有的访问大小208为10,并且经修改的数据字220可以包,15个具有非零数据值的字节部分222。电路202可以将具有非零字节值的前10个字节部分222写入到第一切片204,其中,具有非零字节值的第一个字节部分222被写入到第一切片204的第一侧206的第一端或第一位置。电路202可以将剩余5个具有非零字节值的字节部分222写入到第二切片204,其中,具有非零字节值的第十一个字节部分222被写入到第二切片204的第一侧206的第一端或第一位置。因此,可以以相同的顺序保持并且跨存储器210的多个切片204写入经修改的数据字220的15个具有非零字节值的字节部分222。
[0118]
现在参考操作316,并且在一个或多个实施例中,可以确定非零字节值的数目。在一些实施例中,电路可以根据掩码230确定数据字220的非零字节值的数目小于或等于第一切片204的第一访问大小208。电路202可以确定已经接收到针对至少一个数据字220的读取请求或读取指令。电路202可以使用用于相应数据字220的位掩码230来确定非零字节值的数目。电路202可以确定数据字220的种群计数234或数据字220的非零字节值的数目小于或等于第一切片204的访问大小208。数据字220的非零字节值的数目可以指示数据字220被存储在哪个或哪些切片204中以及数据字220的不同字节部分222被存储在多少个切片204上。例如,如果数据字220的非零字节值的数目小于或等于第一切片204的访问大小208,则电路可以确定数据字220的具有非零字节值的字节位置222中的每个或所有被存储在第一切片204中。如果数据字220的非零字节值的数目大于第一切片204的访问大小208,则电路可以确定数据字220的具有非零字节值的字节位置222中的每个或所有被存储在多个切片204(例如,第一切片204和第二切片204)中。
[0119]
现在参考操作318,并且在一些实施例中,可以读取数据字220。在一些实施例中,电路202可以响应于该确定,经由第一切片204读取被存储在存储器210中的数据字220的打包表示224。打包表示224可以包括从数据字220的第一侧206的端处开始存储的非零字节值和在数据字220的剩余部分中存储的任意零字节值。在一些实施例中,打包表示224可以对
应于经修改的数据字220。
[0120]
电路202可以在第一切片204的第一侧206的第一端处或第一位置处开始读取操作。电路202可以按照字节部分222被存储在存储器210的第一切片204或多个切片204中的顺序来读取数据字220的字节部分222。例如,电路202可以首先读取被写入到第一切片204的第一侧206的第一位置的数据字220的第一字节部分222,并接下来读取被写入到第一切片204的第一侧206的第二位置的数据字220的第二字节部分222。在一些实施例中,电路202可以基于数据字220的字节部分222被写入到一个或多个切片204的顺序,在读取具有零字节值的字节部分222之前,读取具有非零字节值的字节部分222。在一些实施例中,电路202不必存储、读取或访问具有零字节值的任意字节部分222,而是在解包过程中在由位掩码所指示的位置处插入具有零字节值的字节部分222。
[0121]
在一些实施例中,由随着数据字220的非零字节值的数目小于或等于第一切片204的访问大小208,电路202可以仅从第一切片204读取数据字220的打包表示224。例如,由于数据字220的非零字节值的数目小于或等于第一切片204的访问大小208,因此,具有非零字节值的所有字节部分222可以被写入到第一切片204。电路202可以访问第一切片204以读取数据字220的打包表示224。在一些实施例中,随着数据字220的非零字节值的数目大于第一切片204的访问大小208,电路202可以按照字节部分222如何被写入到多个切片204的顺序来读取数据字220的打包表示224的字节部分222。例如,电路202可以经由第一切片204读取数据字220的第一侧或第一字节部分222,并且经由第一切片204的剩余部分或剩余侧以及经由多个切片204的第二切片204,读取任何剩余的非零字节或具有非零字节值的剩余字节部分222。在一些实施例中,电路202可以首先或在读取被写入到第二切片204的字节部分222之前,读取被写入到第一切片204的字节部分222。
[0122]
现在参考操作320,可以修改数据字220的打包表示224。在一些实施例中,电路202可以修改数据字220的打包表示224以恢复字节部分222的原始顺序,该字节部分222的原始顺序对应于数据字220被接收时或被写入到存储器210之前的数据字的字节部分222的顺序。电路202可以修改数据字220的打包表示224以将数据字220恢复到原始格式或对应于数据字220被接收时或被写入到存储器210之前的格式。例如,电路202可以使用位掩码230来确定数据字220的非零字节值的数目和数据字220的零字节值的数目。电路202可以使用位掩码230的单独的位232来确定数据字220的字节部分222的排列或顺序。位掩码230的每一位232可以代表数据字220的至少一个字节部分222。电路202使用位掩码230可以确定具有非零字节值的字节部分222在数据字220的原始格式中的原始定位。电路202使用位掩码230可以确定具有零字节值的字节部分222在数据字220的原始格式中的原始定位。电路202使用位掩码230可以确定一个或多个具有非零字节值的字节部分222在数据字220的原始格式中在它们之间是否包括一个或多个具有零字节值的字节部分222。
[0123]
电路202可以修改数据字220的打包表示224,使得具有非零字节值的字节部分222被移动到或被重新定位到数据字220的原始格式中的原始位置。电路202使用位掩码230可以确定一个或多个具有非零字节值的字节部分222在数据字220的原始格式中在它们之间是否包括一个或多个具有零字节值的字节部分222。电路202可以将具有零字节值的字节部分222插入、移动到或重新定位到包括具有一个或多个零字节值的字节部分222的原始数据字220的位置。可以修改数据字220的打包表示224以重建或重新生成原始数据字220。
[0124]
现在参考操作322,并且在一些实施例中,可以提供数据字220的打包表示224。在一些实施例中,电路202可以根据打包表示224提供在由掩码230所指示的位置处具有非零字节值和零字节值的数据字220。电路202可以以相应数据字220被接收时的原始格式或以与数据字220被打包和/或被写入到数据存储器210之前的数据字220的格式相对应的格式,提供数据字220。在一些实施例中,电路202可以提供数据字220作为输出数据,诸如但不限于图1a的输出112。
[0125]
现在已经描述了一些示意性的实现,很明显,前述内容是示意性的而非限制性的,其已经通过示例的方式被呈现。特别地,虽然本文呈现的许多示例涉及方法动作或系统元件的特定组合,但是这些动作和那些元件可以以其他方式组合以实现相同的目标。结合一种实现讨论的动作、元件和特征不旨在被排除在其他实现或实现中的类似作用之外。
[0126]
用于实现结合本文公开的实施例描述的各种过程、操作、示意性逻辑、逻辑块、模块和电路的硬件和数据处理组件可以用以下各项来实现或执行:通用单片或多片处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计为执行本文描述的功能的任意组合。通用处理器可以是微处理器、或者任意传统的处理器、控制器、微控制器或状态机。处理器还可以被实现为计算设备的组合,诸如dsp和微处理器的组合、多个微处理器、一个或多个微处理器与dsp核结合、或者任意其他这样的配置。在一些实施例中,特定过程和方法可由特定于给定功能的电路来执行。存储器(例如存储器、存储器单元、存储设备等)可以包括一个或多个设备(例如,ram、rom、闪存、硬盘存储部件等),用于存储数据和/或计算机代码以完成或促进本公开中描述的各种过程、层和模块。存储器可以是或可以包括易失性存储器或非易失性存储器,并且可以包括数据库组件、目标代码组件、脚本组件或用于支持本公开中描述的各种活动和信息结构的任意其他类型的信息结构。根据示例性实施例,存储器经由处理电路可通信地连接到处理器,并且包括用于执行(例如,由处理电路和/或处理器)本文描述的一个或多个过程的计算机代码。
[0127]
本公开考虑在任意机器可读介质上用于完成各种操作的方法、系统和程序产品。本公开的实施例可以使用现有的计算机处理器来实现,或者通过用于适当系统的、为了这个或另一个目的而结合的专用计算机处理器或者通过硬连线系统来实现。本公开范围内的实施例包括程序产品,该程序产品包括机器可读介质,用于携带或具有存储在其上的机器可执行指令或数据结构。这种机器可读介质可以是可由通用或专用计算机或具有处理器的其他机器访问的任意可用介质。举例来说,此类机器可读介质可以包括ram、rom、eprom、eeprom或其他光盘存储器、磁盘存储器或其他磁存储设备、或任意其他介质,其可用于以机器可执行指令或数据结构的形式携带或存储所需的程序代码,并可被通用或专用计算机或其他具有处理器的机器访问。上述的组合也被包括在机器可读介质的范围内。机器可执行指令包括例如使通用计算机、专用计算机或专用处理机器执行特定功能或功能组的指令和数据。
[0128]
本文使用的措辞和术语是为了描述的目的,不应被视为限制。本文使用的“包括(including)”、“包括(comprising)”、“具有”、“包含”、“涉及”、“以
……
为特征(characterized by)”、“特征在于(characterized in that)”及其变体意在涵盖其后列出的项目、其等同物和附加项目,以及由其后仅列出的项目组成的替代实现。在一种实现中,
本文描述的系统和方法由一个、多于一个的每个组合、或所有描述的元件、动作或组件组成。
[0129]
对本文中以单数形式提及的系统和方法的实现或元件或动作的任意引用也可以涵盖包含多个这些元件的实现,并且对本文中任意实现或元件或动作的任意复数引用也可以涵盖仅包括单个元件的实现。单数或复数形式的引用并不旨在将当前公开的系统或方法、它们的组件、动作或元件限制为单个或多个配置。对基于任意信息、动作或元件的任意动作或元件的引用可以包括其中动作或元件至少部分地基于任意信息、动作或元件的实现。
[0130]
本文公开的任意实现可以与任意其他实现或实施例组合,并且对“实现”、“一些实现”、“一个实现”等的引用等不一定是相互排斥的,并且旨在指示结合实现描述的特定特征、结构或特性可以被包括在至少一个实现或实施例中。本文使用的这些术语不一定都指代相同的实现。任意实现可以以与本文公开的方面和实现一致的任意方式与任意其他实现包括地或排他地结合。
[0131]
在附图、具体实施方式或任意权利要求中的技术特征之后跟有附图标记的情况下,已经包括附图标记以增加附图、具体实施方式和权利要求的可理解性。因此,附图标记或它们的缺失对任意权利要求元素的范围均没有任意限制作用。
[0132]
本文描述的系统和方法可以在不脱离其特性的情况下以其他特定形式体现。除非另有明确说明,否则对“大约”、“约”、“基本上”或其他程度术语的引用包括与给定测量值、单位或范围的 /-10%的变化。耦合元件可以彼此直接或利用中间元件电耦合、机械耦合或物理耦合。本文描述的系统和方法的范围因此由所附权利要求而不是前述描述来指示,并且在权利要求的等同含义和范围内的变体被涵盖在其中。
[0133]
术语“耦合”及其变体包括将两个构件直接或间接地彼此连接。这种接合可以是固定的(例如,永久的或固定的)或可移动的(例如,可移除的或可释放的)。这种接合可以通过如下方式实现:两个构件直接耦合或相互耦合;两个构件使用彼此耦合的单独的中间构件和附加的中间构件相互耦合;或者两个构件使用中间构件彼此耦合,该中间构件与两个构件中的一个构件一体地形成为单个整体。如果“耦合”或其变体被附加术语(例如,直接耦合)修改,则上文提供的“耦合”的一般定义由附加术语的明语含义修改(例如“直接耦合”意味着两个构件在没有任意单独的中间构件的情况下接合),导致比上面提供的“耦合”的一般定义更窄的定义。这种耦合可以是机械的、电的或流体的。
[0134]
对“或”的引用可以被解释为包含性的,因此使用“或”描述的任意术语可以指示所描述术语中的单个、多个和所有中的任意一种。对
“‘
a’和

b’中的至少一个”的引用可以仅包括“a”、仅包括
‘“
b”,以及包括
‘“
a”和“b”两者。与“包括”或其他开放术语结合使用的此类引用可以包括附加项。
[0135]
所描述的元件和动作的修改,诸如各种元件的大小、尺寸、结构、形状和比例、参数值、安装布置、材料的使用、颜色、方向的变化,可以在实质上不脱离本文公开的主题的教导和优点的情况下发生。例如,显示为整体形成的元件可以由多个部分或元件构成,元件的位置可以颠倒或以其他方式改变,并且分立元件或位置的性质或数目可以改变或变化。在不脱离本公开的范围的情况下,还可以对所公开的元件和操作的设计、操作条件和布置进行其他替换、修改、改变和省略。
[0136]
本文对元件位置的引用(例如“顶部”、“底部”、“上方”、“下方”)仅用于描述图中各种元件的取向。各种元件的取向可以根据其他示例性实施例而不同,并且这种变体旨在被本公开所涵盖。
再多了解一些

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

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

相关文献