识别矩阵中的偏离值 背景技术 [0001] 已经描述了诸如“忆阻器”的电阻式存储器设备,其中电子部件能够以非易失性的方式写入电阻。已经提出使用这种设备的阵列进行逻辑运算。 附图说明 [0002] 现在将参考附图描述非限制性示例,其中: [0003] 图1是示出示例方法的流程图; [0004] 图2是示例性的电阻式存储器阵列装置的简化示意图; [0005] 图3a和3b分别示出了矩阵和替代矩阵的示例; [0006] 图4是示出识别偏离值的示例性方法的流程图; [0007] 图5是执行矩阵运算的示例性方法的流程图; [0008] 图6a,6b和6c示出了矩阵的另外的示例; [0009] 图7是示出执行矩阵运算的示例性方法的流程图; [0010] 图8是示出执行矩阵运算的另一示例性方法的流程图; [0011] 图9示出了矩阵的另外的示例; [0012] 图10是与处理器相关联的机器可读介质的示意性示例;以及 [0013] 图11是处理装置的示意性示例。 具体实施方式 [0014] 图1示出了方法100的示例,其可以是替代将被映射到电阻性存储器阵列的矩阵中的值的方法,并且其可以是计算机实现的方法。方法100包括:接收要映射到电阻性存储器阵列的值的第一矩阵,其中矩阵中的每个值被表示为电阻性存储器元素的电阻(框102),识别第一矩阵中的偏离值(框104),并且用至少一个替代值替代包含偏离值的第一矩阵的一部分的至少一个值来形成替代的第一矩阵(框106)。 [0015] 在一些示例中,第一矩阵表示要用于数据处理的内核。在一个示例中,第一矩阵可以表示用于图像处理的内核,例如,第一矩阵可以表示要与图像的至少一部分进行卷积的图像锐化内核。在其他示例中,第一矩阵可以表示用于在要执行对象或文本识别的图像的至少一部分上进行操作的内核,或者将执行语音识别的音频数据。在其他示例中,矩阵可以表示用于对要从中提取结论或其他信息的科学实验的结果进行操作的内核,或者可以表示用于任何形式的处理的任何其他形式的操作数。 [0016] 在一个示例中,电阻性存储器阵列包括电阻性存储器元素的二维栅格,其可以是纵横(crossbar)阵列。图2中示出了电阻性存储器元素202(例如,忆阻器或其他电阻性存储器元素)的纵横电阻式存储器阵列200的示例。该电阻性存储器阵列200包括至少一个输入行或“字线”,以至接收输入数据和至少一列或“位线”以输出值。每个电阻性存储器元素202可以具有位深度,其可以为阵列200的元素202所共用。在该示例中,术语“位深度”是可以由单个电阻性存储器元素202表示的位的数量。 [0017] 在一些示例中,元素202可以是具有例如表示0或1(一位的位深度)的两个值之一的二进制元素,然而已经证实了可以取多个值(例如,16个不同级别(四位的位深度))的电阻性存储器元素。可以通过向元素202中的每一个施加电压脉冲来将矩阵映射或“编程”到阵列200上,每个电压脉冲递增地改变该元素202的电阻。电阻级别然后由元素202“记住”作为电阻级别,即使电源被去除。 [0018] 一旦将矩阵映射到阵列200(即阵列以阵列的表示形式写入),阵列200可用于矩阵运算。例如,如果输入电压矢量通过阵列200,则通过阵列200的每个元素202处的电导,有效地加权输入电压矢量,因此输出电压实际上是输入电压矢量和映射的电阻值阵列(即输入矩阵和映射矩阵)的点积。这样的输入电压矢量可以从被提供用于使用电阻性存储器阵列 200进行处理的模拟数据获得。数据例如可以表示图像的至少一个像素,或语音的词(或子词或短语),或者科学实验的结果,或任何其他数据。输入数据可以被提供为矢量,即一维数据串,并且作为电压值(通常是低于用于设置阵列元素202的电阻的电压,使得元素202的电阻在该操作中不改变)施加到阵列。 [0019] 在一些示例中,阵列200可以包括用于将矩阵相乘在一起的点积引擎的一部分。已经提出了这样的点积引擎用于深度学习装置并执行复杂的计算操作。 [0020] 在本文的示例中,这样的阵列200可以被写入替代的矩阵的表示,例如由图1的方法产生的替代的第一矩阵,其中至少一个偏离值被替代。 [0021] 当将矩阵映射到电阻性存储器阵列时,矩阵中的最高(h)和最低(l)数值可以被映射到电阻性存储器元素的最高和最低电阻(例如使用偏移量,如下面列出)。然后根据其与h和l的比例,其他元素的值可以成比例映射。因此,为了将矩阵映射到单个电阻性存储器阵列,值(即h-l)的范围应小于或等于在电阻性存储器阵列中的元素的电阻值的范围。在一些示例中,数值的映射也可以解释阵列寄生电流、数据模式和单元在阵列中的位置。可以理解,这里给出的示例是简化的示例,并且在一些示例中,映射可能更复杂,例如,可以应用比例因子,或者映射可以是非线性的。 [0022] 为了更详细地考虑使用偏移量的映射的示例,在简单示例中,矩阵中的每个元素,除了一个值“110”(二进制为1101110)之外,是“99”(二进制为1100011)。在映射过程中,可应用偏移量。在该特定示例中,99可以表示为例如“1”且110表示为“12”,即在映射中应用98的负偏移量。 [0023] 当输入矩阵(为了示例的目的,矢量[5;10])乘以行矩阵(同样为了示例的目的,[99 110]),将参照原始矩阵执行的计算是: [0024] 5*99+10*110 [0025] 实际上,使用如使用上面的偏移量陈述的映射的阵列,由阵列所执行的计算是: [0026] 5*1+10*12 [0027] 偏移项可以被添加到该结果以补偿在映射中施加到原始矩阵的偏移量。在该示例中,这是基于在映射中应用的偏移项,由输入矩阵元素的总和缩放(在该示例中为矢量元素 5和10,在该示例中给出要应用于(5+10)*98的输出的偏移项)。在这个示例中,可以证实: [0028] 5*99+10*110=5*1+10*12+(5+10)*98。 [0029] 偏移项对于所有列的计算是共用的。换句话说,如果原始矩阵(在该示例中为矩阵[99 99])中有另一行,在阵列中表示为[1;1],则缩放项是相同的,并且对于该行的该计算将是: [0030] 5*1+10*1+(5+10)*98 [0031] 现在考虑图3中的示例矩阵,为了将图3a中的矩阵A映射到电阻性存储器阵列,每个元素应当能够处理十个不同的级别(即-1,0,1...8)。3的位深度意味着这些元素每个均支持23=8个不同的级别,但是这个特定的矩阵需要10个级别,这反过来表明最小位深度为 4。换句话说,每个元素应该提供4位的存储空间使得最低电阻电平可以被映射到“-1”,并且最高可映射到“8”。 [0032] 在该示例中,可以注意到,除了偏离值“8”之外,整个矩阵可以映射到位深度为1的阵列,因为矩阵现在包括单个值“-1”。包含偏离值意味着更多的级别应该是可表示的,这可能会对写入电路、精度、写入能量和写入周期造成更大的压力,并可能降低电阻式存储器阵列的效率。 [0033] 使用方法100可以减少这种开销,如通过替代或“修剪(pruning)”偏离值(例如矩阵中的最高和/或最低值),可以减少矩阵中的数字的范围,这可以意味着可以用更小的电阻范围来表示值,即元素可以具有较小的位深度。示例性的替代矩阵A'示于图3b中。A'与A类似,除了偏离值“8”已被替换为更接近其他值的值,在本示例中,值为“-1”。实际上,在本示例中,“-1”是最显著地降低矩阵A'中的值的范围的值。 [0034] 根据一些示例,在框104中识别偏离值包括识别最显著脱离多个值的代表性“平均”的值,例如矩阵的平均值、中值或模态值。在其他示例中,其可以包括扫描矩阵元素以获得矩阵的最高值和/或最低值,并且将矩阵的最高元素和/或最低元素中的至少一个识别为偏离值。 [0035] 在一些示例中,识别偏离值包括计算位深度以表示第一矩阵中的值的范围,然后依次取每个值,如果表示值的范围的位深度大于表示矩阵中其他值的范围的位的数量,则确定该特定值为偏离值。 [0036] 在一些示例中,识别偏离值包括,计算位深度以表示第一矩阵中的值的统计范围,并且如果在值被去除的情况下表示值的范围的位深度减小则确定该值是偏离值。 [0037] 图4示出了在该示例中如何识别偏离值以减小矩阵中的值的范围而使得矩阵可以被映射到固定位深度的电阻性存储器阵列的另一示例。该方法包括,计算矩阵中的值的范围(框402),并确定表示该范围的位的数量是否大于电阻性存储器阵列中的元素的位深度(框404)。如果表示范围的位的数量大于电阻性存储器阵列的元素的位深度,则可以确定减小矩阵的位深度(即,值范围),使得矩阵可以映射到电阻性存储器阵列。因此,在该示例中,在框406中,该方法包括如果表示矩阵中的其他值(即,除了所讨论的值之外)的范围的位的数量等于该电阻性存储器阵列的位深度,则确定该值是偏离值。 [0038] 显而易见的是,上面给出的示例可以很容易地被推广以识别两个或更多个偏离值。 [0039] 一旦已经识别出偏离值,则该方法可以移动到用至少一个替代值替代包含偏离值的第一矩阵的一部分的至少一个值来形成替代的第一矩阵(例如,如在框106中描述的)。 [0040] 在一个实例中,替代的框包括将偏离值替代为替代值,如上面在图3a和图3b中所示的。 [0041] 在这种情况下,可以选择“-1”,因为它是最显著地减小矩阵A'中的值的范围的值,因此,在一些示例中,可以选择替代值,以便当与(未替代的)第一矩阵相比时减小替代的第一矩阵中的值的范围。这可以包括选择位于或接近代表性“平均值”的替代值,例如第一矩阵的平均值、中值或模态值。 [0042] 在一些示例中,可以使用用于选择偏离值的标准的逆(如上所述)来选择要替代的适当的非偏离值。例如,适当的替代值可以是与矩阵的其他值的范围进行比较,当被替代时不增加替代的第一矩阵中的值的范围的替代值。在另一示例中,适当的替代值可以是其中如果替代值存在或从矩阵中移除则表示替代的第一矩阵中的值的范围的位深度相同的替代值。 [0043] 一旦获得了替代的第一矩阵,并且如图5所示,该方法可以包括将替代的第一矩阵映射到电阻性存储器阵列(框502)。可以例如在缓冲器或任何其他存储介质中存储第一矩阵(在该示例中,A[1][1]=8)中的偏离值的值和位置(框504)。然后通过将与V对应的电压矢量传递通过具有映射到其的矩阵的电阻性存储器阵列,可以使用电阻性存储器阵列来执行矩阵运算(框506),例如矩阵V=[2,3,4](在该示例中,一维矩阵或矢量)可以与替代的矩阵相乘。一旦已经执行了使用电阻元素阵列的矩阵运算,CPU可以使用所存储的离群值信息来对输出进行后处理以补偿被替换的非偏离值(框508)。这校正了输出,以考虑到替代了偏离值A[1][1]的事实。 [0044] 在矩阵乘法中,已经发现以这种方式后处理的开销随着离群值的数量而线性增加。因此,在诸如图像处理的场景中,其中内核(即,矩阵)通常很小并且具有很少的离群值,因此以这种方式的后处理的附加开销相对较低。因此,提供架构支持以减轻如上所述的离群值的影响可以增强电阻式存储器阵列在诸如深度学习加速器的应用中的适用性。 [0045] 现在转到图6和图7,在另一示例中,框106的替代可以包括用包含替代值的多个替换线来替代包含偏离值的第一矩阵的线(框702)。替代的第一矩阵可以被映射到电阻性存储器阵列(框704)。如本文所使用的,线可以是矩阵的列或行,或者在矩阵包括单个列或行的情况下,线可以表示单列/行中的元素。在一些示例中,线可以是旨在映射到电阻性存储器阵列中的列(或位线)或行(字线)的线(将矩阵的列映射到电阻性存储器阵列的列或行将在下面更详细地讨论)。考虑到图6a中的矩阵A和图6b中的替代矩阵A”,包括矩阵A中的偏离值“8”的列(为了清楚起见,在虚线框内示出)已被矩阵A”中的三个新列替换(也在虚线框内)。以这种方式,大的偏离值被分解为三个部分(即元素A[1][1]:A[3][1]),以便每个新列处理较大值的一部分。 [0046] 更一般地,在一些示例中,偏离值分布在多个替换线中的替代值之间。在一些示例中,多个替换线中的替代值的总和等于偏离值。在另外的示例中,多个替换线中的替代值可以由具有比偏离值更小的位深度的存储器元素表示。在一些示例中,将偏离值分为两个或更多个替代值以减小矩阵中的值的范围,使得减小表示电阻性存储器阵列上的矩阵的位深度。 [0047] 在一些示例中,来自替代列的非偏离值(例如,图6a中的A[1][0]和A[1][2]处的“- 1”值)保持在它们相对于矩阵A”中的最左列的相应位置上。新列中与偏离值不在同一行的其他元素设置为0(例如在图6b中的示例中为A”[2][0],A”[3][0],A[2][2]和A”[3][2])。在一些示例中,替代列的非偏离值(例如图6a中的A[1][0]和A[1][2]处的“-1”值)可以被移位,例如在这种情况下移位到更靠右的列。在非偏离值移位的示例中,输入矩阵中的对应元素也可以被调整。 [0048] 通过这种修改,A”(以及因此将矩阵映射到电阻性存储器阵列的元素级别的数量)中值的范围现在为5(即-1,0,1,2和3),并且因此3位元素足以处理矩阵A”,而不是处理矩阵A的4位元素。 [0049] 在该过程的进一步迭代中,A”中的值“3”,“3”和“2”可以被识别为离群值,并且仍替换为具有较低位深度的替代值,例如,如图6c中的替代矩阵A”'所示。A”'中的值的范围是 3,因此2位元素足以处理矩阵A”'。在一些示例中,该替代过程在给定电阻性存储器阵列的尺寸和维度的情况下可能尽可能继续,因此替代矩阵的位深度可以是具有较低位深度的较大矩阵与电阻性存储器阵列中的电阻性存储器元素的数量之间的折衷。 [0050] 当A”被映射到电阻性存储器阵列时,在一些示例中,列2,3和4将成为电阻性存储器阵列的行2,3和4。列是否被映射到电阻性存储器阵列中的列或行取决于阵列的设计。如上所述,映射阵列可用于矩阵运算,例如点积计算。为了计算输入矩阵的点积(其在示例中可以是一维矩阵,即矢量)和映射的矩阵,在其中矩阵中的列映射到阵列中的行的电阻性存储器阵列设计中,输入电压乘以每个单元电导,并且电流沿着列聚合。在将矩阵行映射为阵列行的设计的示例中,然后为了计算点积,输入矩阵可以通过列而不是通过行馈送,并且结果沿行而不是列收集。 [0051] 例如,考虑将输入矩阵(在本示例中为输入矢量V=[2,3,4])与矩阵A相乘。根据示例,首先将矩阵A替代以形成替代矩阵A”,如上所述。然后复制输入矩阵中的至少一条线,以获得修改的输入矩阵(在本示例中为修改的输入矢量)V'(框706)。这是为了补偿矩阵A”(或A”')的附加列。对于替代为A的每个附加列,还向V添加一个附加列,它与原始值重复。例如,为了将V乘以A”,V被替代变为V'=[2,3,3,3,4]以考虑已经被替代为A以形成A”的附加列。 然后使用映射的电阻性存储器阵列在修改的输入矢量上执行该操作(框708)。在操作期间,流过位线-2的有效位线电流将为 其与V*A的积相同。如上所述,在 一些示例中,矩阵的第二行被映射到电阻性存储器阵列的第二列。 [0052] 在可以与图7的方法结合使用的一些示例中,识别偏离值包括确定要映射矩阵的电阻性存储器阵列中的字线的数量是否大于被映射到字线的矩阵中的线的数量。如果这样的字线比要映射到其的矩阵线更多,则偏离值可以分布在多个字线上,并且可以使用以其他方式在电阻性存储器阵列中的“备用”行来减少与偏离值相关联的计算开销。 [0053] 现在转到图8,在另一个示例中,替代至少一个值(例如,如关于图1的框106所描述的)包括用空值(即“0”)替代至少一个偏离值(框802),并且确定至少一个新的矩阵,其包括在替代的第一矩阵的每个非替代值的位置中的空值和在新的矩阵内的与第一矩阵的偏离值的位置对应的位置上的第一矩阵的至少一个偏离值(框804)。 [0054] 这在图9a中示出,其示出了矩阵A,其中根据上文提供的定义,值“8”是偏离值。在该示例中,框804可以包括形成如图9b所示的替代的第一矩阵A',其中偏离矩阵值被替代为空值。然后形成新的矩阵A1,其包括在新矩阵A1中与它们在第一矩阵A中的相同位置处的偏离值。 [0055] 在该示例中,然后可以将新的矩阵A1和替代的第一矩阵A'均映射到用于与输入矩阵相乘的单独的电阻性存储器阵列。 [0056] 可以注意到,与矩阵A相比,矩阵A1具有更大的范围。然而,矩阵A1可以被缩放为映射过程的一部分。 [0057] 在图9的示例中,矩阵A1可以写为[0 0 1;0 0 0;1 0 1]*[8]。换句话说,矩阵A1可以通过将所有元素除以8来进行缩放,并且将阵列控制为表示按比例缩放的矩阵。这可以通过将输出乘以比例因子来解释(在本例中,将输出乘以8)。 [0058] 因此,在一些示例中,方法可以包括确定其中一些值被空值替代的替代的矩阵或新的矩阵(例如,A1),以及应用比例因子,例如作为矩阵的值映射到阵列的过程的一部分。 这可以允许使用具有与原始矩阵(在该示例中为矩阵A)和/或未按比例缩放的替代矩阵(在该示例中,A1)所需要的位深度相比减小的位深度的阵列来表示替代的矩阵。可以选择比例因子以减少或在一些示例中最小化矩阵所需要的位深度。矩阵还可以包括将这种阵列的输出乘以比例因子。 [0059] 然后可以组合使用A1和A'映射到其上的阵列的两个操作的输出以产生最终输出。 [0060] 在另一示例中,可以在新矩阵A'上迭代上述过程,使得矩阵A'中的离群值(即值“4”)被替代为空值,并有效地移动到第二新矩阵A2。这在图9c中示出,其中矩阵A2表示第二新矩阵,并且双重替代的第一矩阵由矩阵A”表示。 [0061] 在该示例中,矩阵A1,A2和A”可以各自映射到电阻性存储器阵列(其可以如上所述包括使用比例因子)。通过对每个阵列单独执行操作,然后组合输出(如果在映射中使用缩放,则可以是缩放的输出),可以使用三个映射的阵列对输入矩阵执行诸如点积的运算。 [0062] 在一些示例中,替代的偏离值对应于第一范围内的值。例如,如果值落在第一矩阵中的值的最高四分之一之内,或者例如值的最高的三分之一内,则该值可以被归类为离群值。应当理解,本文提供的百分位数仅仅是示例,并且可以选择任何百分位数范围。在另一示例中,第一矩阵中的值可以被分成多于一个范围,例如,矩阵可以被分成对应于矩阵中的高,中和低值的范围。例如,参考图9,原始矩阵A可以例如基于值的范围直接分为三个矩阵A1,A2,A”。 [0063] 图10示出了与处理器1002相关联的机器可读介质1000。机器可读介质1000存储指令,当由处理器1002执行时,指令使处理器1002识别接收到的第一矩阵中的要被映射到电阻性存储器阵列的偏离值,其中矩阵中的每个值被表示为电阻性存储元素的电阻,并且将包含偏离值的第一矩阵的一部分的至少一个值替代为至少一个替代值以形成替代的第一矩阵。 [0064] 在一些示例中,指令可以使处理器1002实现图1、图4、图5、图7或图8的任何框或框的任何组合。 [0065] 图11示出了包括电阻性存储器元素1104的阵列1102(其中仅一个被标记以避免模糊该图)和控制器1106的处理装置1100的示例。控制器1106接收要映射到电阻性存储器阵列1102的值的第一矩阵,识别第一矩阵中的偏离值,用至少一个替代值替代包含偏离值的第一矩阵的一部分的至少一个值来形成替代的第一矩阵,并且将替代的第一矩阵分配给电阻性存储器元素1104的阵列1102。在一些示例中,控制器可以包括一个或多个处理器。 [0066] 本公开中的示例可以作为方法、系统或机器可读指令来提供,例如软件、硬件、固件等的任何组合。这种机器可读指令可以被包括于在其中或其上具有计算机可读程序代码的计算机可读存储介质(包括但不限于盘存储设备,CD-ROM,光存储设备等)上。 [0067] 参考根据本公开的示例的方法、设备和系统的流程图和/或框图来描述本公开。虽然上面描述的流程图显示了特定的执行顺序,但执行顺序可能与所描述的顺序不同。关于一个流程图描述的框可以与另一个流程图的那些框组合。应当理解,流程图和/或框图中的每个流程和/或框以及流程图和/或框图中的流程和/或图的组合可以通过机器可读指令来实现。 [0068] 机器可读指令可以例如由通用计算机、专用计算机、嵌入式处理器或其他可编程数据处理设备的处理器执行,以实现在描述和示意图中描述的功能(例如,处理器1002)。特别地,处理器或处理装置可以执行机器可读指令。因此,装置和设备的功能模块可以由执行存储在存储器中的机器可读指令的处理器或者根据嵌入在逻辑电路中的指令进行操作的处理器来实现。术语“处理器”将被广泛地解释为包括CPU、处理单元、ASIC、逻辑单元或可编程门阵列等。方法和功能模块可以全部由单个处理器执行或者被划分到若干处理器中。 [0069] 这样的机器可读指令还可以存储在计算机可读存储设备(例如,机器可读存储器 1000)中,其可以引导计算机或其他可编程数据处理设备在特定模式下操作。 [0070] 这样的机器可读指令还可以被加载到计算机或其他可编程数据处理设备上,使得计算机或其他可编程数据处理设备执行一系列操作以产生计算机实现的处理,因此在计算机或其他可编程设备上执行的指令实现由流程图中的流程和/或框图中的框指定的功能。 [0071] 此外,本文的教导可以以计算机软件产品的形式来实现,计算机软件产品被存储在存储介质中,并且包括用于使计算机设备实现在本公开的示例中所述的方法的多条指令。 [0072] 虽然已经参考某些示例描述了方法、装置和相关方面,但是在不脱离本公开的精神的情况下,可以进行各种修改、改变、省略和替换。因此,意图是所述方法、装置和相关方面仅受所附权利要求及其等同物的范围的限制。应当注意,上述示例是说明而不是限制本文所描述的内容,并且本领域技术人员将能够设计许多备选实现而不脱离所附权利要求的范围。关于一个示例描述的特征可以与另一示例的特征组合。 [0073] “包括”一词不排除在权利要求中列出的元素之外的元素的存在,“一个(a)”或“一个(an)”不排除多个,并且单个处理器或其他单元可以实现在权利要求中叙述的多个单元的功能。 [0074] 任何从属权利要求的特征可以与任何独立权利要求或其他从属权利要求的特征组合。