逻辑操作的制作方法

文档序号:13518261阅读:167来源:国知局
逻辑操作的制作方法



背景技术:

描述了一种用于允许在存储器内处理(pim)的处理装置的架构。在pim中,不是从远程存储器取回数据以用于处理,而是在存储器本地执行该处理。

附图说明

现在将参考附图来描述非限制性示例,在附图中:

图1是执行逻辑操作的方法的示例的流程图;

图2是示例性电阻式存储器阵列装置的简化示意图;

图3和图4是处理装置的示意性示例;以及

图5是用于执行逻辑操作的另一方法的另一示例的流程图。

具体实施方式

图1示出了方法的示例。在框102中,该方法包括在存储在存储器中的多个不同的数据对象中,识别要使用相同的逻辑操作被处理的不同的数据对象的数据部分。例如,数据对象可以与至少一个图像相关联,并且操作可以包括对象识别方面的阶段。例如,特定逻辑操作(例如卷积)可以用于执行诸如对象识别(例如面部检测)之类的任务。数据对象可以包括一组图像像素,或者例如从一组图像像素导出的一组特征图谱,并且该操作包括面部检测方面的阶段。这样的输入可以被称为“输入神经元”。数据对象可以是完全不相关的(例如,包括来自多种来源的图像或从来自多种来源导出的图像)。

识别数据部分可以包括例如基于多个数据对象和/或数据部分、数据输出以及存储器资源(其可以是用于接收数据部分的缓冲器等、和/或存储操作数、数据对象和/或数据部分的存储器)中的至少一个,来确定数据部分的大小。识别数据部分可以包括确定数据部分的顺序,例如,使得数据部分可以是交错的。如下面进一步讨论的,可以确定数据部分的顺序、大小以及数量,以便提供基本上连续的数据的供应以用于使用相同的操作数或多个操作数来进行处理。

框104包括识别存储器中的操作数的表示以提供逻辑操作;并且在框106中,逻辑引擎被提供有操作数(其可以例如包括矩阵)。逻辑引擎可以是向量-矩阵乘法引擎。在一些示例中,可以提供逻辑引擎作为电阻式存储器阵列。在一些示例中,逻辑引擎可以包括算术逻辑单元(alu)。

在框108中,数据部分被存储在多个输入数据缓冲器中。输入数据缓冲器中的每一个都包括不同的数据对象的数据部分。这可以包括根据预期的处理顺序(即,数据部分将按照其经受逻辑操作的顺序)来存储数据部分。框110包括对数据部分中的每一个执行逻辑操作。这可以包括执行矩阵-向量乘法等。在其中数据部分与顺序相关联的示例中,该顺序可以被确定使得执行逻辑操作的逻辑引擎的利用率是高的,在一些示例中是基本上连续的(即,处理流水线至少基本上是满的,并且在一些示例中,尽可能是满的)。框112包括存储每个数据部分的输出,其中每个输出包括从不同的数据对象导出的数据。在一些示例中,输出可以被存储在多个输出数据缓冲器中,其中输出数据缓冲器中的每一个都包括从不同的数据对象导出的数据。

可以使用具有存储器内处理(pim)架构的装置来执行该方法。在这样的架构中,计算处理装置被放置在存储器内或存储器附近(例如,在存储器阵列或子阵列内)以避免长的通信路径。

在一些示例中,例如在使用电阻式存储器设备例如“忆阻器”(其是能够以非易失性方式被写入有电阻的电气组件)时,存储器本身可以提供处理组件。电阻式存储器设备的阵列可以用于执行逻辑操作。

在一些示例中,逻辑引擎可以与动态随机存取存储器(dram)相关联。在示例中,这种关联可以包括逻辑引擎与还包括dram的(例如,芯片上或管芯上的)组件进行物理接近和/或集成。在一些示例中,逻辑引擎和dram可以被提供在相同的管芯上。在一些示例中,逻辑引擎可以与dram缓冲器相关联(例如,物理上被布置在邻近dram缓冲器处),或者可以提供逻辑引擎作为双列直插式存储器模块(dimm)上的负载减少双列直插式存储器模块(lrdimm)缓冲器(或作为其一部分),所述双列直插式存储器模块还可以包括至少一个dram芯片。在另一示例中,可以提供逻辑层作为还包括存储器部分(例如,dram部分)的管芯的一部分。例如,存储器可以被提供在管芯的一侧上,而逻辑引擎可以被提供在管芯的另一侧上。

一些计算任务使用“深度学习”技术。在采用深度学习处理技术时,对输入数据执行逻辑操作以提供处理的第一层中的输出。然后对处理的后续层中的输出执行逻辑操作,在一些示例中以用于多个迭代。深度学习可以用于例如大数据分析、图像和语音识别以及其他计算复杂任务之类的领域中。处理层中的至少一些可以包括卷积,例如使用矩阵乘法对输入数据应用逻辑操作。卷积操作数(例如,矩阵)可以被称作处理内核。

为了加速深度学习工作负载,数据的卷积的加速可以被特别地认为是可以占据高达或大约80%的用于一些深度学习应用的执行时间。

在一些示例中,保持在存储装置中的内核的数量可以很大。例如,虽然共享的内核可以用于从数据对象导出的一组输入数据部分(其可以被称作输入神经元)中的多个或全部输入数据部分,但是在其他示例中,使用不同的内核来处理来自相同的数据对象的不同的输入神经元。在一些示例中,从数据对象导出的每一个输入神经元可以与不同的“私有”内核相关联。例如,用于一些应用的私有内核可以占据多于千兆字节的存储器空间。

在其中输入神经元各自与私有内核相关联的示例中,时间局部性(即,当数据将被重复处理时该数据可以被在本地保持)可以是低的,这可以影响技术(例如高速缓存)的效用。

为了考虑特定的示例,例如可以将面部检测应用于视频文件。在处理层中,可以提供数据对象中的ni个数据对象。在示例中,这些可以是视频文件内的ni个图像,并且从视频文件内的ni个图像导出的nxxny个数据部分(输入神经元,例如像素或特征图谱)可以与大小为kxxky的内核进行卷积以形成no个输入特征图谱。在这种情况下,每个输出条目都具有其自己的内核(即,内核是私有的),并且可以基于以下等式来进行运算:

其中map和w分别表示在卷积层中的特征图谱条目和权重。

基于上述等式,这样的层占据:

nxxnyxnixn0xkxxky

的内核空间,这在现实生活应用中很容易超过1gb。另外,由于内核是私有的,所以不存在时间局部性(不重复使用本地高速缓存的数据),这强加了高带宽压力。

根据图1的方法,要使用相同的逻辑操作被处理的不同的数据对象(例如,不同的图像或不同的特征图谱)的数据部分被识别并且被存储在数据缓冲器中。这允许批量处理,即,可以利用相同的内核来处理数据部分(其可以从不同的数据对象导出)中的每一个。这样,减少了内核被重用时对新内核进行取回的频率。例如,相同的内核可以用于在内核被改变之前对针对多个图像中的每一个图像的相对应的输入神经元(例如,像素或特征图谱)应用相同的卷积。这提供了关于内核的时间局部性,即使在其中关于数据对象或数据部分方面不存在时间局部性或存在较低的时间局部性的示例中。

数据部分可以被取回并且按顺序被提供给数据缓冲器,使得多个数据部分被存储在数据缓冲器中,并且可以对数据部分基本上连续地执行使用特定的操作数的逻辑操作。换言之,可以取回数据部分,使得可以提供要由逻辑引擎处理的数据的基本上连续的流水线。在一些示例中,数据对象可以与变化的延迟相关联,例如,取回一些数据对象可以比取回其他数据对象要花费更长的时间,这可以取决于存储器类型、位置等。用于不同的数据对象或数据部分的存储器资源在大小上是不同的。数据的批处理可以考虑这种差异,使得可以通过早期请求数据并将其保持在本地缓冲器中而减少流水线中的任何间隙,所述间隙可以例如是在数据部分按顺序地被请求并且“及时”进行处理时由于数据部分的供应所引起的。

如上所述,在一些示例中,在pim架构中,处理能力可以被提供在非常接近存储器处或可以被嵌入在存储器中。在一些示例中,存储器本身可以提供逻辑引擎(例如,向量-矩阵乘法引擎)。在一个示例中,内核可以被体现为包括电阻式存储器元件的二维网格的电阻式存储器阵列,其可以是交叉开关阵列。图2中示出了电阻式存储器元件202(例如,忆阻器或其他电阻式存储器元件)的交叉开关阵列200的示例。该电阻式存储器阵列200包括至少一个输入行以用于接收输入数据,并且每个电阻式存储器元件都具有位深度。在该示例中,术语“位深度”是可以由单个电阻式存储器元件202表示的位的数量。在一些示例中,元件202可以是具有两个值(例如,表示0或1(一位的位深度))中的一个值的二进制位,但是已经示出了可以采用多个值(例如32个不同的级别(五位的位深度))的电阻式存储器元件。可以通过将元件提交给电压脉冲来对阵列200进行“编程”,每个电压脉冲递增地改变所述元件202的电阻,并且然后,该电阻级别也由元件202“记忆”为电阻级别,即使在电力供应被移除之后。

在一些示例中,这样的阵列200可以对输入电压向量(其例如可以使用数字-模拟转换器adc来将数字数据位转换为模拟电压值来被提供)进行处理以提供输出向量,其中输入值由阵列200的每个元件202处的电导来进行加权。这有效地表明阵列200对输入执行点积矩阵操作以产生输出。可以通过使元件202经受电压脉冲,来对元件202的权重进行单独“编程”,如上所述。这样的阵列200可以与高密度、低功耗、长周期承受度和/或快速切换速度相关联。因此这样的阵列可以执行矩阵组合操作。在一些示例中,阵列可以包括用于将矩阵相乘到一起的点积引擎的一部分。这种点积引擎可以用在深度学习装置中,并用于执行复杂计算操作。

在示例中,可以供应模拟数据以用于使用电阻式存储器阵列200来进行处理。数据可以例如表示图像的至少一个像素、或语音的词语(或子字或短语)、或科学实验的结果、或任何其他数据。可以提供输入数据作为向量(即,一维数据字符串),并且阵列被应用为电压值(通常低于用于设置阵列元件202的电阻的电压,使得元件202的电阻在该操作中不改变)。

如果使用这样的电阻式存储器阵列200,则图1中的框106可以包括将电阻式存储器阵列写入有电阻值。

图3示出了处理装置300的示例,其包括存储器302、逻辑引擎304、多个输入缓冲器306、多个输出缓冲器308以及数据批处理模块310,所述缓冲器306、308与逻辑引擎304相关联(并且在一些示例中,是在逻辑引擎304本地的)。

存储器302包括至少一个存储器部分,并且保持多个不同的数据对象和多个逻辑算子,其中逻辑算子用于对数据对象的数据部分进行操作。

存储器302可以包括至少一个存储器部分,其中的一些可以是远程存储器部分。在其中提供了多个存储器部分的示例中,存储器部分可以包括多个不同的存储器类型和/或大小。存储器302可以包括至少一个非易失性存储器部分和/或至少一个易失性存储器部分(例如,sram或dram)。在一些示例中,至少多个逻辑算子被存储在相对于逻辑引擎304是本地的存储器部分中。在一些示例中,逻辑引擎304可以被嵌入到存储多个逻辑算子的存储器中。在其他示例中,逻辑引擎304可以经由具有相对高带宽的数据总线(例如,硅通孔(tsv))连接到存储多个逻辑算子的存储器。

在示例中,通过缓冲器306、308的供给和批处理模块310的动作,可以将存储器302的能力的规范与逻辑引擎304的能力分开,例如使得可以根据计算效率来设计逻辑引擎304,而存储器302可以被设计为用于存储能力。例如,存储器302可以针对其至少一部分包括基于nmos的存储器(其可以是相对密集和缓慢的)。在其他示例中,考虑到速度和密度之间的权衡,可以实现存储器302和/或缓冲器306、308。

逻辑引擎304对至少一个数据部分执行逻辑操作,并且在一些示例中,对多个数据部分执行逻辑操作。逻辑引擎304可以由任何处理器来提供。在一些示例中,逻辑引擎304可以包括现场可编程门阵列(fpga)、专用集成电路(asic)、单指令多数据(simd)处理元件等,其可以提供卷积神经网络(cnn)或深度神经网络(dnn)的组件。在一些示例中,逻辑引擎304可以包括电阻式存储器阵列。

在使用装置300时,数据批处理模块310在多个不同的数据对象中识别要通过公共操作数对其进行操作的数据部分(每个数据部分包括数据对象中的所有或一部分),并且将多个不同的数据对象的数据部分发送到输入数据缓冲器306。逻辑引擎304对该数据部分中的每一个连续地(在一些示例中,至少基本上连续地)使用公共操作数来执行逻辑操作,并将来自每个操作的输出提供给多个输出缓冲器308中的一个。

在一些示例中,数据批处理模块310可以被布置为基于多个输入数据集合、输出集合以及各种存储器资源(例如,缓冲器306、308或存储器302中的至少一部分)中的至少一个,来确定要被存储在缓冲器306中的数据部分的大小。数据批处理模块310可以被布置为确定数据部分的交错,例如以便确保通过操作数体现的内核的利用率是高的(例如,使得逻辑引擎304针对使用特定内核的时间段基本上连续地执行逻辑操作)。

如上所述,通过针对多个数据对象使用公共操作数(其表示公共操作数或内核),可以实现内核的时间局部性。

在一些示例中,处理装置300可以具有pim架构,其中操作数对于逻辑引擎304是本地存储的。通过采用pim架构,可以通过相对应的电力和时间节省来避免用于提取内核的片外带宽。然而,这可以表明可以用于存储内核的片上存储器存储体占据相对大的面积,并且将内核传输到处理器仍将消耗电力,这可以导致显著的能量消耗。

图4示出了包括3d存储器堆栈400的处理装置的示例。堆栈400包括多个存储器管芯402、404以及至少一个处理管芯406。存储器管芯402中的每一个都包括至少一个存储器部分408a-h。这些存储器部分408在类型、大小等中的至少一个方面可以是类似的(例如,相同的存储器类型和/或大小)或可以是不同的。在该示例中,逻辑引擎304被提供在将逻辑引擎304连接到第一存储器管芯402的tsv410旁边(即,在物理上极为接近tsv410)。物理接近可以使得在tsv410和逻辑引擎之间不存在布线。

在该示例中,第一存储器管芯402存储多个逻辑算子。在一些示例中,用于存储逻辑算子、数据对象和/或数据部分的存储器的至少一部分408包括片上存储器,并且逻辑引擎304是片上处理元件。在一些示例中,多个逻辑算子可以被分布在多个存储器管芯402、404上。在该示例中,示出了一个tsv410。然而,在其他示例中,可以提供例如与不同的管芯相关联的多个tsv410,或者一个管芯可以具有多个tsv410以将其与处理管芯406进行互连。在该示例中,处理管芯406还包括多个输入和输出缓冲器306、308。处理管芯406还可以包括数据批处理模块310,或者这可以被提供在装置中的其他地方。

在其他示例中,逻辑引擎304可以被提供在与存储多个逻辑算子的存储器相同的管芯上,尽管这可以增加装置400的覆盖区。

在一些示例中,尽管数据对象还可以被存储在远程存储器部分中,并且数据对象的至少一部分可以从这样的远程存储器部分来接收,但是数据对象还可以被存储在存储器管芯402、404上。如上所述,数据对象可以被存储在多个不同的存储器资源中,所述存储器资源可以具有不同的大小并可以供应具有变化的延迟(其可以与用于从特定存储器资源取回数据的时间和用于将数据转移到处理管芯406的时间中的至少一个相关联)的数据。

在一些示例中,考虑与将逻辑算子提供给逻辑引擎相关联的延迟。即使可以相对快速地取回逻辑算子,但是这样的装置400仍具有延迟,其可以导致(或增加)处理流水线中的间隙或“气泡”,并因此降低性能。例如,访问具有128位tsv总线的3d存储器中的行可以与16ns的存储器延迟相关联。当不存在时间局部性时,在这样的装置中可以在16ns内计算出矩阵算子的一行(例如,针对3d存储器大约1kb)。作为结果,在这样的示例中,每3dtsv的计算被限于每tsv总线在16ns内处理1kb的矩阵算子(如果逻辑引擎304被提供在示例性的1ghz处理装置中时,是16个周期)。然而,如果数据可用,则逻辑引擎304可以在1ns内对其进行处理(在1ghz中是1个周期)。换言之,数字单元的计算效率下降到1/16,这是因为矩阵算子存储器延迟比计算延迟高16倍。

在一些示例中,因此,提供多个输入和输出缓冲器306、308允许这种存储器延迟的补偿,使得装置可以以完全的计算速度进行操作,而在流水线中没有“气泡”。在一些示例中,可以选择缓冲器306、308的数量来完全补偿差异。例如,可以使用周期延迟来确定缓冲器306、308的数量,这使存储器延迟与计算延迟有关。在上述示例中,周期延迟是十六,并因此可以存在十六个输入缓冲器306和十六个输出缓冲器308,并且相同的矩阵操作可以被执行16次(假设存在要对其应用操作的足够的数据部分)。

这样的装置400可以利用片上3d容量来存储内核(例如,作为矩阵算子),所述内核可以是私有内核,并且可以用于计算密集操作,例如用于深度学习应用的数据的卷积中。通过将独立的管芯(或多个管芯)上的内核存储到逻辑引擎304,这可以释放处理管芯406(其在一些示例中可以是相对昂贵的组件)上的空间(例如,用于更多计算逻辑)。还应注意,在处理管芯406上的内核存储器空间的覆盖区恰好是由tsv410占据的空间。将独立的管芯402、404上的存储器提供给逻辑引擎304还可以减少堆栈400的覆盖区。此外,装置400利用批处理来实现高计算效率。

3d存储器堆栈可以具有高容量,例如,具有在4个管芯上的4gb的存储器空间。这样的3d存储器能够存储逻辑算子(例如,深度学习内核)以用于一个或多个多层处理应用的多于一个卷积层。这可以实现按需在不同的卷积层之间的快速上下文切换。

图5是方法的示例的流程图,该方法包括在框502中,提取与多个不同的数据对象相关联的多个向量。多个向量可以包括或从数据对象导出的数据部分,如上所述。在一些示例中,向量从图像特征图谱导出或从其他数据导出。向量可以包括数字数据的字符串,并且可以从本地存储器(例如,从还提供逻辑操作的3d存储器堆栈内的存储器)取回,或从不同的(例如,更多远程的)存储器取回。在框504中,多个向量被存储在位于与3d存储器堆栈一体的逻辑引擎本地的不同的数据缓冲器中。框506包括提取存储在3d存储器堆栈中的逻辑算子,在框508中将所述逻辑算子提供给逻辑引擎。

在框510中,使用逻辑引擎根据逻辑算子来执行多个连续向量与矩阵的乘法,其中相同的逻辑算子与同多个不同的数据对象相关联的多个向量中的每一个均相乘。在一些示例中,例如使用电阻式存储器阵列的那些,向量可以经历数字到模拟转换以提供向量的表示作为模拟电压值。在一些示例中,针对数据对象中的每一个提供不同的输出向量。例如,这样的向量输出可以被保持在不同的数据缓冲器或寄存器中。

可以重复执行所述方法,在一些示例中包括针对每次迭代向逻辑引擎提供新的逻辑算子。

本公开中的示例可以被提供为方法、系统或机器可读指令,例如软件、硬件、固件等的任意组合。这样的机器可读指令可以被包括在其中或其上具有计算机可读程序代码的计算机可读存储介质上(包括但不限于盘存储装置、cd-rom、光存储装置等)。

参考根据本公开的示例的方法、设备和系统的流程图和/或框图描述了本公开。尽管上述流程图示出了执行的特定顺序,但是执行的顺序可以不同于所描绘的顺序。关于一个流程图所描述的框可以与另一流程图中的那些框进行组合。应该理解的是,可以由机器可读指令来实现流程图和/或框图中的每个流和/或框以及流程图和/或框图中的流和/或图的组合。

机器可读指令例如可以由通用计算机、专用计算机、嵌入式处理器或其他可编程数据处理设备的处理器来执行以实现说明书和附图中描述的功能(例如,处理装置300、400的功能)。特别地,处理器或处理装置可以执行机器可读指令。因此,装置和设备的功能模块(例如,批处理模块310或逻辑引擎304)可以通过处理器执行被存储在存储器中的机器可读指令来实现,或者通过处理器根据被嵌入在逻辑电路内的指令进行操作来实现。术语“处理器”被广泛地解释为包括cpu、处理单元、asic、逻辑单元、或可编程门阵列等。所述方法和功能模块都可以由单个处理器来执行或被划分到若干处理器之中。

这样的机器可读指令还可以被存储在计算机可读存储装置(例如,存储器302)中,所述指令可以引导计算机或其他可编程数据处理设备以特定模式进行操作。

这样的机器可读指令还可以被加载到计算机或其他可编程数据处理设备上,使得计算机或其他可编程数据处理设备执行一系列操作来产生计算机实现的处理,因此在计算机或其他可编程设备上执行的指令实现由流程图中的流和/或框图中的框所指定的功能。

此外,本文中的教导可以以计算机软件产品的形式被实现,所述计算机软件产品被存储在存储介质中,并包括用于使计算机设备实现在本公开的示例中记载的方法的多个指令。

虽然已经参考某些示例描述了方法、装置和相关方面,但是在不背离本公开的精神的情况下可以做出各种修改、改变、省略和替代。因此,所述方法、装置和相关方面旨在仅由以上权利要求及其等同物的范围来限制。应该注意,上述示例说明而非限制了本文中描述的内容,并且本领域技术人员将能够在不背离随附权利要求的范围的情况下来设计多种替代实现方式。关于一个示例描述的特征可以与另一示例的特征进行组合。

词语“包括”不排除存在除了在权利要求中列出的那些元件之外的元件,“一(a)”或“一个(an)”不排除多个,并且单个处理器或其他单元可以完成在权利要求中记载的若干单元的功能。

任何从属权利要求的特征可以与独立权利要求或其他从属权利要求中的任何一个的特征进行组合。

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