对包含元素级别操作的神经网络进行剪枝的制作方法

文档序号:20920703发布日期:2020-05-29 14:06阅读:264来源:国知局
对包含元素级别操作的神经网络进行剪枝的制作方法



背景技术:

为了方便训练,神经网络经常被过度参数化。过度参数化导致计算复杂并且内存密集的神经网络,其中层间存在大量冗余连接。神经网络可以被剪枝(prun)以断开连接,从而降低网络的复杂性。在某些情况下,剪枝神经网络会降低性能或影响神经网络的准确性。例如,将输入层剪枝成神经网络中的元素级别(element-wise,按元素)操作可能会阻止元素级别操作的执行或影响元素级别操作其他方面的性能。

附图说明

因此,为了更详细地理解各个实施例的上述特征,可以参照各个实施例来获得对上面简要概述的发明构思的更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图只示出了发明构思的典型实施例,因此不应当认为以任何方式限制其范围,而且还存在其他同样有效的实施例。

图1示出了被配置为实现各个实施例的一个或更多个方面的系统。

图2a示出了根据各个实施例的用于剪枝神经网络的剪枝工作流程。

图2b示出了根据各个实施例的神经网络和经剪枝神经网络的示例。

图2c示出了根据各个实施例的包括元素级别操作的神经网络的一部分。

图3是根据各个实施例的图1中的剪枝引擎的详细说明。

图4是根据各个实施例的用于将包含在神经网络中的输入层剪枝为元素级别操作的方法步骤的流程图。

图5示出了根据各个实施例的残差网络中的网络块的体系结构。

图6是根据各种实施例的用于对残差网络中卷积层和识别层进行剪枝的方法步骤的流程图。

图7是被配置为实现各个实施例的一个或更多个方面的计算机系统的框图。

图8是根据各个实施例的在图7的并行处理子系统中包括的并行处理单元(ppu)的框图。

图9是根据各个实施例的在图8的并行处理单元(ppu)中包括的通用处理集群(gpc)的框图。

具体实施方式

在下面的描述中,提出了许多具体细节以提供对各个实施例的更透彻的理解。然而,对于本领域技术人员来说,显而易见的是,在没有这些具体细节中的一个或更多个的情况下,依然可以实践本发明构思。

系统综述

图1示出了被配置为实现各个实施例的一个或更多个方面的系统100。如图所示,计算机系统100包括通过网络140可通信地耦合的训练计算系统110、服务器计算系统120和客户端计算系统130。

在一个实施例中,训练计算系统110包括内存120、训练数据库116和一个或更多个处理单元118。一个或更多个处理单元118可以包括任何技术上可行的硬件单元集合,被配置为处理数据和执行软件应用程序。例如,处理单元118可以是中央处理单元、图形处理单元、微处理器、asic、fpga、控制器或微控制器。

在一个实施例中,内存120可以包括一个或更多个非暂时计算机可读存储介质,如ram、rom、eeprom、eprom、闪存设备、磁盘等及其组合。在一个实施例中,内存120存储由一个或更多个处理单元118执行的数据和指令。在一个实施例中,内存120包括由一个或更多个处理单元118执行的训练引擎112和剪枝引擎114。

在一个实施例中,训练引擎112使用存储在训练数据库116中的训练数据,通过各种机器学习技术来训练神经网络。机器学习技术包括但不限于梯度下降和正则化。在一个实施例中,训练引擎112训练神经网络。例如,在不同的实施例中,训练引擎112可以训练递归神经网络(rnn)、卷积神经网络(cnn)、深度神经网络(dnn)、深度卷积网络(dcn)、深度信念网络(dbn)、生成对抗网络(gan)、自组织映射(som)或任何其他类型的在技术上可行的神经网络。

在一个实施例中,神经网络(如cnn)包括一个或更多个卷积层、一个或更多个池化层、和/或一个或更多个全连接层。在一个实施例中,每个层被配置成使用具有一个或更多个参数的可微函数,将三维(3d)输入量转换为3d输出量。神经网络的层可以包括在三维(如宽度、高度和深度)中排列的多个神经元。在一个实施例中,神经网络的给定层中的神经元连接到前一层的一小部分。卷积层可以配置为计算连接到输入中的局部区域的神经元的输出。

在一个实施例中,训练引擎112通过逐渐增加神经网络的层间连接的数量,以增量方式对神经网络进行训练。例如,训练引擎112可以通过对除一小部分连接(如1%、0.1%等)之外的所有连接的取消激活来初始化神经网络用于增量训练。训练引擎112可以递增地增加神经网络的连接的数量,这样训练引擎112就可以在连接的数量增加的神经网络上执行训练。这个过程可以重复一遍或更多遍,使得训练引擎112逐渐增加神经网络中的连接的数量,并随着连接的逐渐增加而训练神经网络140。

在一个实施例中,训练引擎112可以根据用于训练神经网络的各种适当的训练技术,以任何适当的方式增加神经网络的密度。例如,训练引擎112可以确定一个加密方案,该方案定义了增加连接的时间间隔和增加连接的数量。在一个实施例中,至少部分地基于训练引擎112用于训练神经网络的训练技术来确定加密方案。至少部分地根据卷积层的参数和/或神经网络中的一些可能的连接,可以进一步确定加密方案。

在一个实施例中,剪枝引擎114剪枝神经网络的层内的神经元。在各种实施例中,剪枝引擎114剪枝由训练引擎112训练的神经网络。在一个实施例中,剪枝神经网络降低了神经网络的总体复杂性,从而降低了与神经网络相关联的计算需求和内存需求。在一个实施例中,剪枝引擎114选择要剪枝的神经元,以减少剪枝对神经网络的性能的影响。剪枝引擎114使神经网络中被选择进行剪枝的神经元失活,也使神经网络中与该被选择神经元的任何连接失活。下面图2-图7的描述提供了与剪枝引擎114相关的各种实施例的详细信息。

在一个实施例中,训练数据库116存储与神经网络训练和/或剪枝相关的训练数据和参数。在一个实施例中,在神经网络的训练和/或剪枝期间,该参数被训练引擎112和/或剪枝引擎114使用。该参数包括但不限于层数、每层的神经元数、训练迭代数、隐藏神经元数、学习率。

在一个实施例中,服务器计算系统120存储由训练计算系统110生成的神经网络。在一个实施例中,服务器计算系统120包括一个或更多个服务器计算设备,或服务器计算系统120由一个或更多个服务器计算设备实现。在服务器计算系统120包含多个服务器计算设备的示例中,此类服务器计算设备可以根据串行计算架构、并行计算架构或其某些组合进行操作。在一个实施例中,服务器计算系统120可以是训练计算系统110的一部分。

在一个实施例中,客户端计算系统130从服务器计算系统120接收经训练神经网络和/或经剪枝神经网络。客户端计算系统130可以实现一个或更多个软件应用程序,这些软件应用程序使用从服务器计算系统120接收到的神经网络或处理从服务器计算系统120接收到的神经网络来执行操作。这些操作包括但不限于:分类操作、计算机视觉操作和异常检测操作。在一个实施例中,客户端计算系统130是自动驾驶车辆。在另一个实施例中,客户端计算系统130是移动计算设备,如智能手机或智能手表。

网络140可以是任何类型的通信网络,如局域网(如内部网)、广域网(如因特网)或其组合,并可包括任意数量的有线或无线链路。网络140上的通信可以经由任何类型的有线和/或无线连接进行承载,使用各种通信协议(如tcp/ip、http、smtp、ftp)、编码或格式(如html、xml)和/或保护方案(如vpn、securehttp、ssl)。

剪枝神经网络

图2a示出了根据各个实施例的用于剪枝神经网络的剪枝工作流程200。剪枝工作流程200可以由图1中的训练计算系统110实现。

在一个实施例中,剪枝工作流程200开始于训练引擎112基于训练数据和参数204训练202神经网络以生成神经网络206。如前所述,训练引擎112可以使用一种或更多种机器学习技术,基于存储在训练数据库116中的训练数据和参数来训练神经网络。在一个实施例中,训练数据和参数204控制神经网络的一个或更多个特征,如神经网络的网络密度和层的数量。训练202得到神经网络206。在一个实施例中,神经网络206包括一个或更多个卷积层、一个或更多个池化层、和/或一个或更多个全连接层。神经网络的层可以包括多个以三维(如宽度、高度和深度)排列的神经元,每个神经元与一个或更多个权重相关联。在一个实施例中,每个神经元与一个特征类型相关联,并对输入数据进行操作,以计算确定输入数据中具有该特征类型的特征存在的程度或概率。特征类型的示例包括颜色、形状、大小和尺寸。在一个实施例中,训练引擎112在训练202期间实现一个或更多个正则化操作,以提升与低量值权重相关联的神经元。

在一个实施例中,剪枝引擎114剪枝208神经网络206以使一个或更多个神经元和相关联的连接失活,从而生成经剪枝神经网络212。在各种实施例中,使神经元失活也可称为从经剪枝神经网络中移除该神经元。在一个实施例中,剪枝引擎114选择具有低于剪枝阈值的相对应度量的神经元。该度量可以根据与该神经元相关联的一个或更多个权重来确定。在一个实施例中,该度量可以是与该神经元相关联的一个或更多个权重的l2范数。剪枝引擎114使所选择的神经元以及与神经网络206所选神经元之间的任何相关连接失活,从而生成经剪枝神经网络212。

在一个实施例中,训练引擎112对经剪枝神经网络212进行再训练214,以生成再训练后的经剪枝神经网络218。在各种实施例中,训练引擎112可以使用一个或更多个机器学习技术,基于存储在训练数据库116中的训练数据和参数对经剪枝神经网络212进行再训练。经剪枝神经网络212可以被再训练,以至少部分地恢复剪枝过程中去除神经元所造成的准确性损失。在一个实施例中,训练引擎112应用正则化技术,在初始神经网络的训练202中限制与不同神经元相关联的权重,而在再训练214经剪枝神经网络212时不限制该权重。

图2b示出了根据各个实施例的神经网络206和经剪枝神经网络212的示例。如图所示,神经网络206包括输入节点220和神经元与其相关联的连接222。在这个示例中,神经网络206包括6个输入节点220、6个神经元和32个连接。在剪枝过程中,在神经网络206中从上往下的第三个神经元是失活的,以生成经剪枝神经网络212。因此,如图所示,经剪枝神经网络212包含6个输入、5个神经元和24个连接。

在神经网络中将输入层剪枝成元素级别操作

在各种实施例中,神经网络包括一个或更多个元素级别计算操作,其对包含在神经网络中的两个或更多个输入层进行操作。在操作中,元素级别计算操作对输入层中每个唯一对应神经元集合生成的结果执行操作。例如,神经网络可以包括将要在神经网络的两个输入层上执行的元素级别加法运算。在执行元素级别加法运算时,加法运算是对跨两个输入层的对应神经元集合中的每个神经元产生的结果进行的。在各种实施例中,对应神经元位于各自输入层中的相同位置。例如,假设层1和层2是进入到元素级别加法运算的输入层。在该示例中,对层1内的第一宽度、高度和深度的神经元a和层2内的相同宽度、高度和深度的神经元b进行第一元素级别加法运算,对层1内的第二宽度、高度和深度的神经元c和层2内的相同宽度、高度和深度的神经元d进行第二元素级别加法运算,依此类推。在各种实施例中,对应神经元与同一特征类型相关联。

图2c示出了根据各个实施例的包括元素级别操作234的神经网络的一部分。如图所示,神经网络还包括网络层230和网络层232。网络层230包括位于网络层内不同位置的神经元,如神经元236。网络层232还包括位于网络层内不同位置的神经元,如神经元238。在

图2c的实施例中,网络层230和网络层232是三维的,使得每个神经元具有相对应的三维坐标。在其他实施例中,网络层230和网络层232可以是一维、二维、四维或具有任何其他更高维度。

在一个实施例中,网络层230和/或网络层232中的每个神经元对输入数据进行操作以产生结果。在一个示例中,结果是一个特征图(featuremap)。元素级别操作234对网络层230和网络层232中对应神经元产生的结果进行操作。在所示的实施例中,神经元236和神经元238是对应神经元。在一个实施例中,对应神经元是那些位于各自输入层内相同位置(例如,坐标或索引)的神经元。在一个实施例中,对应神经元是那些与同一特征类型相关联的神经元。

在各种实施例中,当对具有一个或更多个元素级别操作的神经网络进行剪枝时,对元素级别操作的输入层进行剪枝以便元素级别操作能够准确地在经剪枝层上执行。更具体地说,在进行剪枝操作之后,需要匹配输入层的形状(例如宽度、高度和深度),以便执行元素级别操作。

下面的讨论概述了用于剪枝神经网络的层的一种或更多种技术。

图3是根据各个实施例的图1中的剪枝引擎114的详细说明。如图所示,剪枝引擎114包括归一化引擎302、均衡化引擎304和移除引擎306。在一个实施例中,剪枝引擎114接收经训练的神经网络206作为输入,并生成经剪枝神经网络212。为了便于讨论,在图3的实施例中,所述经训练的神经网络206包括具有两个或更多个输入层的至少一个元素级别操作。

在一个实施例中,归一化引擎302对神经网络206进行处理,以生成与包含在神经网络206的一个或更多个层中的每个神经元相关的度量。在一个实施例中,与给定神经元相关联的度量是与神经元相关的权重的l2范数。在一个实施例中,归一化引擎302为神经网络206中的每个神经元存储度量。

在一个实施例中,均衡化引擎304对神经网络206的各层进行操作,这些层是到元素级别计算操作的输入。在各种实施例中,元素级别计算操作对输入层中每个唯一对应神经元集合的结果执行操作。在一个实施例中,元素级别计算操作可以是元素级别二值操作,如元素级别加法运算、元素级别减法运算、元素级别乘法运算、元素级别除法运算、元素级别逻辑与运算、元素级别逻辑或运算、元素级别最大运算等。

对于神经网络206中的每个元素级别操作,均衡化引擎304识别元素级别操作的所有输入层。对于输入层中每个对应神经元集合,均衡化引擎304将与对应神经元集合中的包含的神经元相关联的度量进行均衡化。如上所述,两个或更多个层中对应神经元包括位于各自层中相同位置的神经元。在一个实施例中,为了均衡对应神经元集合,均衡化引擎304对与对应神经元集合相关联的度量应用均衡化操作符。在一个实施例中,一旦应用均衡化操作,与对应神经元集合相关联的所有度量都设置为相同的值。

在各种实施例中,均衡化操作符是多元交换操作符。在一个实施例中,均衡化操作符是算术平均值操作符。当应用算术平均操作符时,均衡化引擎304计算与对应神经元集合相关联的度量的算术平均。在一个实施例中,将对应神经元集合中每个神经元的度量用计算出的算术平均代替。在一个实施例中,算术平均可以使用下列公式计算:

其中,f(x1...xn)是算术平均,(x1...xn)是与对应神经元集合相关联的度量,n是在对应神经元集合中的神经元的总数。

在一个实施例中,均衡化操作符是几何平均操作符。当应用几何平均操作符时,均衡化引擎304计算与对应神经元集合相关联的度量的几何平均。在一个实施例中,将对应神经元集合中每个神经元的度量替换为计算出的几何平均。在一个实施例中,算术几何可以使用下列公式计算:

其中,f(x1...xn)是几何平均,(x1...xn)是与对应神经元集合相关联的度量,n是在对应神经元集合中的神经元的总数。

在一个实施例中,均衡化操作符是并集操作符。当应用并集操作符时,均衡化引擎304将神经元集合中每个神经元的度量设置为阈值剪枝权重,此时与该神经元集合相关联的度量中的至少一个度量等于或高于阈值剪枝权重。在一个实施例中,如果与该神经元集合相关联的度量都不等于或高于阈值剪枝权值,则均衡化引擎304将该神经元集合中每个神经元的度量设置为低于阈值剪枝权重。在一个实施例中,神经元集合中每个神经元的度量可以使用以下公式确定:

其中,f(x1...xn)是每个神经元的度量被设定的值,t为阈值剪枝权重。

在一个实施例中,均衡化操作符是交集操作符。当应用交集操作符时,均衡化引擎304将神经元集合中每个神经元的度量设置为阈值剪枝权值,此时与该神经元集合相关联的所有度量都等于或高于阈值剪枝权值。在一个实施例中,如果与该神经元集合相关联的度量中的至少一个度量是低于阈值剪枝权重,则均衡化引擎304将该神经元集合中的每个神经元的度量都设置为低于阈值剪枝权值。在一个实施例中,神经元集合中每个神经元的度量可以使用以下公式确定:

其中,f(x1...xn)是每个神经元的度量被设定的值,t为阈值剪枝权重。

在一个实施例中,均衡化引擎304向移除引擎306提供与每个对应神经元集合相关联的经均衡度量。在一个实施例中,均衡化引擎304生成均衡化向量,该向量包括针对元素级别操作的输入层中的每个对应神经元集合的对应的经均衡度量。在一个实施例中,均衡化引擎304将均衡化向量传送到移除引擎306。

在一个实施例中,移除引擎306对神经网络206的各层进行剪枝,以生成经剪枝神经网络212。在一个实施例中,经剪枝的输入层包含在经剪枝神经网络212中,而不是包含在神经网络206的输入层中。在一个实施例中,移除引擎306基于与输入层中各个对应神经元集合相关联的经均衡度量,将输入层剪枝成元素级别操作。移除引擎306使来自输入层(具有小于阈值剪枝权重的经均衡度量)的神经元失活。在各种实施例中,阈值剪枝权重可以由训练计算系统110的管理员指定,可以根据与输入层中的神经元相关联的权重确定,或者可以根据神经网络206或其他神经网络进行学习。确定阈值剪枝权重的其他技术在本公开的范围内。

在一个实施例中,被移除引擎306失活的特定神经元依赖于均衡化引擎304在均衡与对应神经元集合相关联的度量时应用的均衡化操作符。在一个实施例中,当算术平均操作符或几何平均操作符应用于度量时,与对应神经元集合相关联的度量的算术平均或几何平均必须低于阈值剪枝权重,用于使对应神经元集合失活的。在一个实施例中,当并集操作符应用于度量时,与对应神经元集合中的每个神经元相关的度量必须低于阈值剪枝权重,用于使对应神经元集合失活。在一个实施例中,当交集操作符应用于度量时,与对应神经元集合中的至少一个神经元相关联的度量必须低于阈值剪枝权值,用于使对应神经元集合失活。

在一个实施例中,移除引擎306基于经剪枝的输入层的所需维度对输入层进行剪枝。移除引擎306对输入层进行剪枝,以使经剪枝的输入层具有所需的维度。例如,在某些情况下,当神经网络的经剪枝的层的维度为2的幂次时,与神经网络206相关的计算效率更高。在此示例中,移除引擎306使来自输入层的神经元失活,同时也保持了输入层的所需的维度。

图4是根据各个实施例的用于将包含在神经网络中的输入层剪枝为元素级别操作的方法步骤的流程图。虽然方法步骤是结合图1和图3的系统一起描述的,但是本领域技术人员应当理解,配置为执行所述方法步骤的任何系统,无论其顺序如何都落入本公开的范围内。

方法400从步骤402开始,其中剪枝引擎114识别输入到元素级别操作中的神经网络的两个或更多个层。在步骤404,剪枝引擎114基于与神经元相关联的权重,为步骤402识别的包含在两个或更多个层中的每个神经元计算度量。

在步骤406,剪枝引擎114识别步骤402识别的两个或更多个层中的对应神经元的一个或更多个集合。如上所述,两个或更多个层中的对应神经元包括位于各自层中相同位置的神经元。元素级别操作对输入层中每个惟一的对应神经元集合执行操作。

在步骤408中,对于步骤402识别的神经网络的两个或更多个层中包含的每个对应神经元集合,剪枝引擎114均衡化与对应神经元集合相关联的度量。在一个实施例中,为了均衡化与对应神经元集合相关联的度量,均衡化引擎304将均衡化操作符应用于与对应神经元集合相关联的度量。在一个实施例中,一旦应用均衡化操作符,与对应神经元集合相关联的所有度量都被设置为相同的值。

在步骤410,剪枝引擎114基于经均衡度量使步骤402识别的神经网络的两个或更多个层中的神经元失活。在一个实施例中,剪枝引擎114使来自具有小于阈值剪枝权重的经均衡度量的输入层的神经元失活。在一个实施例中,经剪枝的输入层被包含在经剪枝神经网络中,而不是被包含在未经剪枝的神经网络中的输入层中。

剪枝残差网络的层

残差网络是一种包含元素级别操作的神经网络。在各种实施例中,为了保持包含在残差网络中的元素级别操作的准确性,在剪枝残差网络时可以应用上述用于剪枝的技术。

图5示出了根据各个实施例的残差网络中的网络块500的体系结构。如图所示,网络块500包括块输入层502、卷积层504、识别层508和元素级别操作510。卷积层504被包含在网络块500的残差分支中。识别层508被包含在网络块500的非残差分支中。在一个实施例中,识别层508与块输入层502匹配。

在一个实施例中,元素级别操作510是元素级别加法运算。在一个实施例中,卷积层504和识别层508是元素级别操作510的输入。为了保持元素级别操作510的准确性,卷积层504和识别层508的大小和形状应当相同。因此,在对残差网络进行剪枝时,需要对卷积层504和识别层508进行剪枝,使经剪枝的层的大小和形状匹配。

图6是根据各个实施例的用于对残差网络中的卷积层和识别层进行剪枝的方法步骤流程图。虽然方法步骤是结合图1和图3的系统一起描述的,但是本领域技术人员将理解,配置为执行所述方法步骤的任何系统,无论其顺序如何都落入本公开的范围内。

方法600从步骤602开始,其中剪枝引擎114识别包含在残差网络块中的识别层和卷积层,残差网络块是至网络块中元素级别操作的输入。在步骤604,剪枝引擎114基于与神经元相关联的权重,为步骤602识别的各层中的每个神经元计算度量。

在步骤606,针对包含在步骤602识别的卷积层和识别层中的每个对应神经元集合,剪枝引擎114将与对应神经元集合相关联的度量进行均衡。如前所述,卷积层和识别层中的对应神经元包括在各自层中位置相同的神经元。在一个实施例中,为了均衡与对应神经元集合相关联的度量,均衡化引擎304将并集均衡化操作符应用于与对应神经元集合相关联的度量。在一个实施例中,一旦应用均衡化操作符,与对应神经元集合相关联的所有度量都被设置为相同的值。

在步骤608,剪枝引擎114基于经均衡度量使步骤602识别的卷积层和识别层内的神经元失活。在一个实施例中,剪枝引擎114使具有小于阈值剪枝权重的经均衡度量的卷积层和识别层中的神经元失活。在一个实施例中,经剪枝的卷积层和经剪枝的识别层被包含在经剪枝残差网络中,而不是未经剪枝的残差网络中的卷积层和识别层。

硬件体系结构

图7是配置为实现本公开的一个或更多个方面的计算机系统700的框图。在一些实施例中,计算机系统700是在数据中心或云计算环境中运行的服务器计算机,通过网络提供可扩展的计算资源作为服务。例如,计算机系统700可以在训练计算系统110、服务器计算系统120和/或客户端计算系统130中实现。

在各个实施例中,计算机系统700包括但不限于中央处理单元(cpu)702和通过内存桥705和通信路径713耦合到并行处理子系统712的系统存储器704。内存桥705经由通信路径706进一步耦合到i/o(输入/输出)桥707,而i/o桥707又耦合到交换机716。

在一个实施例中,i/o桥707被配置为从可选输入设备708(如键盘或鼠标)接收用户输入信息,并经由通信路径706和内存桥705将输入信息转发到cpu702进行处理。在一些实施例中,计算机系统700可以是云计算环境中的服务器机。在此类实施例中,计算机系统700可没有输入设备708。而是,计算机系统700可以通过接收在网络上发送的和经由网络适配器718接收的消息形式的命令来接收等效的输入信息。在一个实施例中,交换机716被配置为在i/o桥707与计算机系统700的其他组件(如网络适配器718和各种插入卡720和721)之间提供连接。

在一个实施例中,i/o桥707耦合到系统盘714,该系统盘714可以配置为存储用于由cpu702和并行处理子系统712使用的内容、应用程序和数据。在一个实施例中,系统盘714为应用程序和数据提供非易失性存储,并可包括固定的或可移除的硬盘驱动器、闪存设备和cd-rom(压缩盘只读存储器)、dvd-rom(数字通用盘-rom)、蓝光光碟、hd-dvd(高清dvd)或其他磁、光或固态存储设备。在各个实施例中,诸如通用串行总线或其他端口连接、压缩盘驱动器、数字多功能盘驱动器、胶片记录设备等之类的其他组件也可以连接到i/o桥707。

在各个实施例中,内存桥705可以是北桥芯片,i/o桥707可以是南桥芯片。此外,通信路径706和713以及计算机系统700内的其他通信路径可以使用任何技术上合适的协议实现,包括但不限于agp(加速图形端口)、超传输或任何本领域已知的其他总线或点对点通信协议。

在一些实施例中,并行处理子系统712包括图形子系统,该图形子系统将像素传送给可选的显示设备710,该显示设备710可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器或类似设备。在这种实施例中,并行处理子系统712包含针对图形和视频处理优化的电路,包括例如,视频输出电路。如下面结合图8和图9更详细描述的,这种电路可以跨包含在并行处理子系统712中的一个或更多个并行处理单元(ppu,也称为并行处理器)包含。在其他实施例中,并行处理子系统712包含针对通用和/或计算处理优化的电路。同样,这种电路可以跨并行处理子系统712中包含的一个或更多个ppu包含,这些ppu被配置为执行这种通用和/或计算操作。在其他实施例中,可以将并行处理子系统712中包含的一个或更多个ppu配置为执行图形处理、通用处理和计算处理操作。系统存储器704包括配置为管理并行处理子系统712中的一个或更多个ppu的处理操作的至少一个设备驱动程序。

在各个实施例中,并行处理子系统712可以与图7的一个或更多个其他元件集成,以形成单个系统。例如,并行处理子系统712可以与cpu702和单个芯片上的其他连接电路集成,以形成片上系统(soc)。

在一个实施例中,cpu702是计算机系统700的主处理器,控制和协调其他系统组件的操作。在一个实施例中,cpu702发出控制ppu的操作的命令。在一些实施例中,通信路径713是pciexpress链路,在其中,专用通道如本领域已知的被分配给每个ppu。还可以使用其他通信路径。ppu有利地实现了高度并行的处理体系架构。ppu可以具有任意数量的本地并行处理存储器(pp存储器)。

应理解,本文示出的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括桥的数量和布置、cpu702的数量和并行处理子系统712的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器704可以直接连接到cpu702,而不是通过内存桥705连接,其他设备将经由内存桥705和cpu702与系统存储器704进行通信。在其他实施例中,并行处理子系统712可以连接到i/o桥707或直接连接到cpu702,而不是连接到内存桥705。在其他实施例中,i/o桥707和内存桥705可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图7所示的一个或更多个部件可以不存在。例如,可以去除交换机716,网络适配器718和插入卡720、721可直接连接到i/o桥707。

图8是根据各个实施例的、图7的并行处理子系统712中包括的并行处理单元(ppu)802的框图。如上文所述,尽管图8描述了一个ppu802,但并行处理子系统712可以包括任意数量的ppu802。如图所示,ppu802耦合到本地并行处理(pp)存储器804。ppu802和pp存储器804可使用一个或更多个集成电路器件实现,例如可编程处理器、应用特定的集成电路(asic)或存储器设备,或者以任何其他技术上可行的方式实现。

在一些实施例中,ppu802包括图形处理单元(gpu),gpu可以被配置为实现图形渲染管线,以基于cpu702和/或系统存储器704提供的图形数据执行与生成像素数据相关的各种操作。在处理图形数据时,pp存储器804可以用作图形存储器,其存储一个或更多个常规帧缓冲区,如果需要,还可以存储一个或更多个其他渲染目标。此外,pp存储器804可用于存储和更新像素数据,并将最终的像素数据或显示帧传送到可选的显示设备710进行显示。在一些实施例中,还可以将ppu802配置用于通用处理和计算操作。在某些实施例中,计算机系统700可以是云计算环境中的服务器机。在这些实施例中,计算机系统700可以没有显示设备710。相反,计算机系统700可以通过经由网络适配器718在网络上以消息的形式发送命令,来生成等效的输出信息。

在一些实施例中,cpu702是计算机系统700的主处理器,控制和协调其他系统组件的操作。在一个实施例中,cpu702发出控制ppu802的操作的命令。在一些实施例中,cpu702将ppu802的命令流写入可位于系统存储器704、pp存储器804或cpu702和ppu802两者可访问的另一个存储位置中的数据结构(图7或图8中未明确示出)。指向数据结构的指针被写入命令队列(本文也称为推送缓冲区),以启动数据结构中命令流的处理。在一个实施例中,ppu802从命令队列中读取命令流,然后相对于cpu702的操作异步地执行命令。在生成多个推送缓冲区的实施例中,可以由应用程序经由设备驱动程序为每个推送缓冲区指定执行优先级,以控制不同推送缓冲区的调度。

在一个实施例中,ppu802包括i/o(输入/输出)单元805,该i/o单元经由通信路径713和内存桥705与计算机系统700的其余部分进行通信。在一个实施例中,i/o单元805生成数据包(或其他信号),用于在通信路径713上发送,并且还接收来自通信路径713的所有传入数据包(或其他信号),将传入的数据包定向到ppu802的适当组件。例如,与处理任务相关的命令可以被定向到主机接口806,而与存储器操作相关的命令(例如,从pp存储器804读取或写入pp存储器804)可以定向到交叉开关单元810。在一个实施例中,主机接口806读取每个命令队列,并将存储在命令队列中的命令流发送到前端812。

如上结合图7所述,ppu802与计算机系统700的其余部分的连接可以是不同的。在一些实施例中,并行处理子系统712(其包括至少一个ppu802)被实现为可插入计算机系统700的扩展槽的插入卡。在其他实施例中,ppu802可以集成在具有总线桥的单个芯片上,如内存桥705或i/o桥707。同样,在其他实施例中,ppu802的部分或全部元件可以与cpu702一起包括在单个集成电路或芯片系统(soc)中。

在一个实施例中,前端812将从主机接口806接收的处理任务发送到任务/工作单元807内的工作分配单元(未示出)。在一个实施例中,工作分配单元接收指向处理任务的指针,这些任务被编码为任务元数据(tmd)并存储在存储器中。指向tmd的指针被包括在命令流中,该命令流被存储为命令队列并由前端单元812从主机接口806接收。可编码为tmd的处理任务包括与要处理的数据相关联的索引以及定义如何处理数据的状态参数和命令。例如,状态参数和命令可以定义要对数据执行的程序。还例如,tmd可以指定一组协作线程阵列(cta)的数量和配置。通常,每个tmd对应于一个任务。任务/工作单元807从前端812接收任务,并确保在每个tmd指定的处理任务启动之前将gpc808配置为有效状态。还可以为用于调度处理任务执行的每个tmd指定优先级。处理任务也可以从处理集群阵列830接收。可选地,tmd可以包括参数,该参数控制是否将tmd添加到处理任务列表的头部或尾部(或添加到指向处理任务的指针列表),从而提供对执行优先级的另一层控制。

在一个实施例中,ppu802基于处理集群阵列830实现高度并行处理体系架构,该阵列包括一组c个通用处理集群(gpc)808,其中c≥1。每个gpc808能够同时执行大量(例如数百或数千个)线程,其中每个线程都是程序的实例。在各个应用中,可以分配不同的gpc808来处理不同类型的程序或执行不同类型的计算。gpc808的分配可根据每种类型的程序或计算产生的工作负载而变化。

在一个实施例中,存储器接口814包括一组d个分区单元815,其中d≥1。每个分区单元815耦合到驻留在pp存储器804中的一个或更多个动态随机访问存储器(dram)820。在一些实施例中,分区单元815的数量等于dram820的数量,并且每个分区单元815耦合到不同的dram820。在其他实施例中,分区单元815的数量可以与dram820的数量不同。本领域普通技术人员将理解,dram820可更换为任何其他技术上合适的存储设备。在操作中,各种渲染目标(如纹理贴图和帧缓冲区)可以存储在dram820上,允许分区单元815并行写入每个渲染目标的部分,从而有效地使用pp存储器804的可用带宽。

在一个实施例中,给定的gpc808可以处理要写入pp存储器804内的任何dram820的数据。在一个实施例中,交叉开关单元810被配置为将每个gpc808的输出路由到任何分区单元815的输入或任何其他gpc808以进一步处理。gpc808经由交叉开关单元810与存储器接口814通信,以从各个dram820读取或写入各个dram820。在一些实施例中,交叉开关单元810与i/o单元805连接,还经由存储器接口814连接到pp存储器804,从而使不同gpc808中的处理核心能够与系统存储器704或非ppu802本地的其他存储器通信。在图8的实施例中,交叉开关单元810与i/o单元805直接连接。在各个实施例中,交叉开关单元810可以使用虚拟信道以分隔gpc808和分区单元815之间的业务流。

在一个实施例中,可以对gpc808进行编程以执行与各种应用程序相关的处理任务,包括但不限于线性和非线性数据变换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速度和其他属性)、图像渲染操作(例如,曲面细分着色器、顶点色色器、几何着色器和/或像素/片段着色器程序)、一般计算操作等。在操作中,ppu802被配置为将数据从系统存储器704和/或pp存储器804传输到一个或更多个片上存储器单元,处理数据,以及将结果数据写回系统存储器704和/或pp存储器804。然后,其他系统组件(包括cpu702,并行处理子系统712中的另一ppu802,或计算机系统700中的另一并行处理子系统712)可以访问结果数据。

在一个实施例中,并行处理子系统712中可包括任意数量的ppu802。例如,单个插入卡上可提供多个ppu802,或者多个插入卡可以连接到通信路径713,或者一个或更多个ppu802可以集成到桥芯片中。多ppu系统中的ppu802可彼此相同或不同。例如,不同的ppu802可具有不同数量的处理核心和/或不同数量的pp存储器804。在存在多个ppu802的实现中,这些ppu可以并行操作以比采用单个ppu802可能的吞吐量更高的吞吐量处理数据。包含一个或更多个ppu802的系统可以各种配置和外形因素实现,包括但不限于台式机、笔记本电脑、手持式个人计算机或其他手持设备、服务器、工作站、游戏机、嵌入式系统等。

图9是根据各个实施例的、图8的并行处理单元(ppu)802中包括的通用处理集群(gpc)808的框图。如图所示,gpc808包括但不限于管线管理器905、一个或更多个纹理单元915、预光栅操作单元925、工作分配交叉开关930和l1.5高速缓存935。

在一个实施例中,gpc808可配置为并行执行大量线程,以执行图形处理、一般处理和/或计算操作。如本文所使用的,“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,使用单指令、多数据(simd)指令发出技术来支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,使用配置为向gpc808中的一组处理引擎发出指令的公共指令单元,使用单指令、多线程(simt)技术来支持大量通常同步的线程的并行执行。与所有处理引擎通常执行相同指令的simd执行机制不同,simt执行允许不同的线程通过给定的程序更容易地遵循不同的执行路径。本领域普通技术人员可以理解,simd处理机制表示simt处理机制的功能子集。

在一个实施例中,gpc808的操作经由管线管理器905控制,该管线管理器905将从任务/工作单元807中的工作分配单元(未示出)接收到的处理任务分配到一个或更多个流式多处理器(sm)910。管线管理器905也可以配置为通过指定sm910输出的经处理数据的目的地来控制工作分配交叉开关930。

在各个实施例中,gpc808包括一组m个sm910,其中m≥1。此外,每个sm910包括一组功能执行单元(未示出),如执行单元和加载-存储单元。特定于任何功能执行单元的处理操作可以进行管线化,这使得能够在以前的指令完成执行之前发出新的指令以供执行。可以提供给定sm910中的功能执行单元的任意组合。在各个实施例中,功能执行单元可配置为支持各种不同的操作,包括整数和浮点算术(例如,加法和乘法)、比较运算、布尔运算(and、or、xor)、位移位、以及计算各种代数函数(例如,平面插值和三角函数、指数函数和对数函数等)。有利的是,可以配置相同的功能执行单元来执行不同的操作。

在各个实施例中,每个sm910包括多个处理核心。在一个实施例中,sm910包括大量(例如128个等)的不同处理核心。每个核心可以包括完全管线化、单精度、双精度和/或包括浮点算术逻辑单元和整数算术逻辑单元的混合精度处理单元。在一个实施例中,浮点算术逻辑单元实现浮点算术的ieee754-2008标准。在一个实施例中,核心包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心。

在一个实施例中,张量核心被配置为执行矩阵运算,在一个实施例中,一个或更多个张量核心包含在核心中。特别是,张量核心被配置为执行深度学习矩阵算术,例如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心对4×4矩阵运算,并执行矩阵乘法和累加运算d=a×b+c,其中a、b、c和d为4×4矩阵。

在一个实施例中,矩阵乘法输入a和b为16位浮点矩阵,而累加矩阵c和d可以是16位浮点矩阵或32位浮点矩阵。张量核心采用32位浮点累加对16位浮点输入数据进行运算。16位浮点乘法需要64次运算,得到全精度积,然后用32位浮点加法与其他中间积相加以得到4×4×4矩阵乘法。实际上,张量核心用于执行由这些较小元素构建的更大的二维或更高维矩阵运算。api(如cuda9c++api)公开专用矩阵负载、矩阵乘法和累加以及矩阵存储操作,以有效地使用来自cuda-c++程序的张量核心。在cuda级别,线程束级接口假定16×16大小的矩阵,其跨越线程束的所有32个线程。

神经网络严重依赖于矩阵数学运算,复杂的多层网络需要大量的浮点性能和带宽,以提高效率和速度。在各个实施例中,采用数千个针对矩阵数学运算优化的处理核心,并向数十至数百个tflops提供性能,sm910提供了计算平台,其能够提供基于深度神经网络的人工智能和机器学习应用程序所需的性能。

在各个实施例中,每个sm910还可以包括多个执行特殊功能(例如,属性评估、倒数平方根等)的特殊功能单元(sfu)。在一个实施例中,sfu可以包括被配置为遍历分层树数据结构的树遍历单元。在一个实施例中,sfu可以包括配置为执行纹理映射过滤操作的纹理单元。纹理单元被配置成从存储器加载纹理映射(例如,二维纹理像素阵列),并对纹理映射进行采样,以产生经采样的纹理值,用于在sm执行的着色程序中使用。在各个实施例中,每个sm910还包括多个加载/存储单元(lsu),它们在共享存储器/l1高速缓存和sm910内部的寄存器文件之间实现加载和存储操作。

在一个实施例中,每个sm910被配置为处理一个或更多个线程组。如本文所用,“线程组”或“线程束(warp)”是指一组线程,其对不同的输入数据同时执行同一程序,其中组中的一个线程被分配给sm910中的不同执行单元。线程组包括的线程可少于sm910中的执行单元的数量,在这种情况下,当正在处理该线程组时,某些执行在周期内可能处于空闲状态。线程组还可包括比sm910中执行单元的数量更多的线程,在这种情况下,处理可能发生在连续的时钟周期中。由于每个sm910可以同时支持多达g个线程组,因此多达g*m个线程组可以在任何给定时间在gpc808中执行。

此外,在一个实施例中,在sm910中可以有多个相关线程组同时处于活动状态(处于不同的执行阶段)。此线程组的集合在本文中称为“协作线程阵列”(“cta”)或“线程阵列”。特定cta的大小等于m*k,其中k是线程组中同时执行的线程的数量,其通常是sm910中执行单元的数目的整数倍,m是sm910中同时活动的线程组的数量。在一些实施例中,单个sm910可以同时支持多个cta,其中这些cta的粒度为工作分配给sm910的粒度。

在一个实施例中,每个sm910包含一级(l1)高速缓存,或使用sm910外部的相应l1高速缓存中的空间来支持执行单元执行的加载和存储操作等。每个sm910还可以访问在ppu802中所有gpc808之间共享的二级(l2)高速缓存(未示出)。l2高速缓存可用于在线程之间传输数据。最后,sm910还可以访问芯片外“全局”存储器,其可包括pp存储器804和/或系统存储器704。需要理解的是,ppu802外部的任何存储器都可以用作全局存储器。此外,如图9所示,1.5级(l1.5)高速缓存935可以包括在gpc808中,并配置为接收和保存sm910通过存储器接口814从存储器请求的数据。此类数据可以包括但不限于指令、统一数据和常数数据。在gpc808中具有多个sm910的实施例中,sm910可以有益地共享在l1.5高速缓存935中缓存的通用指令和数据。

在一个实施例中,每个gpc808可以具有关联的存储器管理单元(mmu)920,mmu920被配置为将虚拟地址映射到物理地址。在各个实施例中,mmu920可以驻留在gpc808或存储器接口814内。mmu920包括一组页表条目(pte),其用于将虚拟地址映射到图块(tile)或存储器页的物理地址以及可选的缓存行索引。mmu920可包括地址转换后备缓冲区(tlb)或可驻留在sm910、一个或更多个l1高速缓存或gpc808内的高速缓存。

在一个实施例中,在图形和计算应用中,可以配置gpc808以使每个sm910耦合到纹理单元915,以执行纹理映射操作,例如确定纹理采样位置、读取纹理数据和过滤纹理数据。

在一个实施例中,每个sm910将经处理的任务发送到工作分配交叉开关930,以便将经处理的任务提供给另一个gpc808以进行进一步处理,或将经处理的任务通过交叉开关单元810存储在l2高速缓存(未示出)、并行处理存储器804或系统存储器704中。此外,预光栅操作(prerop)单元925被配置为从sm910接收数据,将数据导向到分区单元815内的一个或更多个光栅操作(rop)单元,执行颜色混合优化、组织像素颜色数据,并执行地址转换。

应理解,本文描述的体系架构是说明性的,并且可以进行更改和修改。除此之外,gpc808中可包含任意数量的处理单元,如sm910、纹理单元915或prerop单元925。此外,如结合图8所述,ppu802可以包括任意数量的gpc808,这些gpc808被配置为在功能上彼此相似,因此执行行为不依赖于哪些gpc808接收特定处理任务。此外,每个gpc808独立于ppu802中的其他gpc808操作,以执行一个或更多个应用程序的任务。

综上所述,可以对神经网络中元素级别操作的输入层进行剪枝,使经剪枝的层的形状(如高度、宽度和深度)匹配。在各种实施例中,剪枝引擎将所有输入层识别为元素级别操作。对于输入层中的每个对应神经元集合,剪枝引擎将与神经元相关联的度量进行均衡,以生成与该集合相关联的经均衡度量。剪枝引擎基于为每个唯一对应神经元集合生成的经均衡度量对输入层进行剪枝。在一个实施例中,当与给定的对应神经元集合相关联的经均衡度量低于剪枝阈值时,剪枝引擎将来自输入层的对应神经元集合中的神经元失活。

本公开的技术的至少一个技术优势是:在进行剪枝操作之后,将经剪枝的输入层的形状(例如宽度、高度和深度)匹配到神经网络中的元素级别操作。此外,在剪枝操作之后,贯穿多个输入层的对应神经元集合位于每个经剪枝的输入层内的相同位置。因此,可以在经剪枝的输入层上精确地执行元素级别操作。

1.在一些实施例中,一种计算机执行的方法,包括:识别神经网络内多个网络层中的多个对应神经元,其中所述多个对应神经元中的每个神经元位于包含在所述多个网络层中的不同网络层中的匹配位置;以及至少部分地基于与所述多个对应神经元相关联的度量,使来自所述多个网络层中的所述多个对应神经元的每一个失活。

2.根据条款1所述的方法,还包括基于与所述多个对应神经元中每个神经元相关联的一个或更多个权重,计算与所述多个对应神经元相关联的所述度量。

3.根据条款1或2所述的方法,其中计算所述度量包括对与所述多个对应神经元中每个神经元相关联的一个或更多个权重执行一个或更多个均衡化操作以生成所述度量。

4.根据条款1-3中任一个所述的方法,其中执行所述一个或更多个均衡化操作包括对分配给所述多个对应神经元中的第一神经元的一个或更多个权重以及分配给所述多个对应神经元中的第二神经元的一个或更多个权重应用均衡化操作符。

5.根据条款1-4中任一个所述的方法,其中所述一个或更多个均衡化操作包括算术平均操作、几何平均操作、并集操作和交集操作中的至少一个。

6.根据条款1-5中任一个所述的方法,其中执行所述一个或更多个均衡化操作包括确定在所述多个对应神经元中的至少一个神经元与处于或高于阈值的单个度量相关联;以及将与所述多个对应神经元相关联的所述度量设置为所述阈值。

7.根据条款1-6中任一个所述的方法,其中所述神经网格包括残差网络,并且其中所述多个网络层包括所述残差网络的卷积层和所述残差网络的识别层。

8.根据条款1-7中任一个所述的方法,其中所述多个对应神经元中的每一个神经元向所述神经网络的给定计算组件产生不同的输入。

9.在一些实施例中,一种计算机执行的方法包括:识别神经网络内多个网络层中的多个对应神经元,其中所述多个对应神经元中的每一个神经元与匹配的特征类型相关联;以及至少部分地基于与所述多个对应神经元相关联的度量,使来自所述神经网络内所述多个网络层的多个对应神经元的每一个神经元失活。

10.根据条款9所述的方法,其中所述多个对应神经元中的每一个神经元可计算地确定在给定的输入数据中存在的具有所述特征类型的特征的概率。

11.根据条款9或10所述的方法,还包括基于与所述多个对应神经元中每个神经元相关联的一个或更多个权重,计算与所述多个对应神经元相关联的所述度量。

12.根据条款9-11中任一个所述的方法,其中计算所述度量包括对与所述多个对应神经元中每个神经元相关联的所述一个或更多个权重执行一个或更多个均衡化操作以生成所述度量。

13.根据条款9-12中任一个所述的方法,其中执行所述一个或更多个均衡化操作包括对分配给所述多个对应神经元中的第一神经元的一个或更多个权重以及分配给所述多个对应神经元中的第二神经元的一个或更多个权重应用均衡化操作符。

14.根据条款9-13中任一个所述的方法,其中所述一个或更多个均衡化操作包括算术平均操作、几何平均操作、并集操作和交集操作中的至少一个。

15.根据条款9-14中任一个所述的方法,其中执行所述一个或更多个均衡化操作包括确定在所述多个对应神经元中的至少一个神经元与处于或高于阈值的单个度量相关联;以及将与所述多个对应神经元相关联的所述度量设置为所述阈值。

16.根据条款9-15中任一个所述的方法,其中所述神经网格包括残差网络,并且其中所述多个网络层包括所述残差网络的卷积层和所述残差网络的识别层。

17.在一些实施例中,一种处理器包括:多个计算逻辑单元,用于基于一个或更多个输入和一个或更多个权重值产生多个结果,其中,所述多个计算逻辑单元是按照包含多个网络层的神经网络体系结构进行编程的,其中所述多个计算逻辑单元的每一个计算逻辑单元对应于所述多个层中的不同层且位于对应层中的匹配位置,并且其中所述多个计算逻辑单元是至少部分地基于与所述一个或更多个权重值相关联的度量而失活的。

18.根据条款17所述的处理器,其中所述多个对应神经元中的每一个神经元是与匹配的特征类型相关联的。

19.根据条款17或18所述的处理器,其中所述度量是基于对一个或更多个权重值执行的均衡化操作来计算的。

20.根据条款17-19中任一个所述的处理器,其中所述神经网络体系结构包括残差网络,并且其中所述多个网络层包括所述残差网络的卷积层和所述残差网络的识别层。

在本申请中以任何方式描述的任何权利要求和/或任何元素中记载的任何权利要求要素的组合均落入本公开和保护的所考虑的范围。

各个实施例的描述已出于说明目的进行了呈现,但并不意图穷尽列举,或限于所公开的实施例。不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。

本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的各个方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或软件和硬件结合的实施例(这里通常称为“模块”、“系统”)的形式。此外,本公开描述的任何硬件和/或软件技术、工艺、功能、组件、引擎、模块或系统都可以作为电路或一组电路实现。此外,本公开的方面可采取一种或更多种计算机可读介质中体现的计算机程序产品的形式,其中计算机可读介质具有体现在其上的计算机可读程序代码。

可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)包括以下:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包含或存储程序以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。

以上根据本公开的实施例参照方法、装置(系统)和计算机程序产品的流程图说明和/或框图描述了本公开的方面。应理解,流程图说明和/或框图的每个框,以及流程图说明和/或框图中框的组合,都可以通过计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理设备的处理器以产生机器。当通过计算机或其他可编程数据处理设备的处理器执行指令时,可实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。

图中的流程图和框图示出了根据本公开的各个实施例的、系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示模块、段或代码的部分,其包括用于实现指定逻辑函数的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中注明的功能可能按图中注明的顺序发生。例如,连续示出的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,具体取决于所涉及的功能。还应注意,框图和/或流程图说明中的每个框,以及框图和/或流程图说明中框的组合,可以由执行指定功能或动作或专用硬件和计算机指令的组合的基于专用的硬件的系统来实现。

虽然前述内容是针对本公开的实施例的,但本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由权利要求来确定。

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