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

用于稀疏矩阵计算的处理器的制作方法

2021-11-15 16:38:00 来源:中国专利 TAG:

用于稀疏矩阵计算的处理器


背景技术:

1.矩阵乘法是包括神经网络和机器学习在内的许多重要应用的基本运算。当使用数据处理器来执行时,有利的是处理器能够有效地执行运算,并且许多处理器被优化以执行通用矩阵乘法。
2.然而,通常所考虑的矩阵中的至少一者是稀疏的,这意味着元素的显著分数为零。在此类情况下,通用乘法是效率低下的,因为许多元素将乘以零。可通过在元素相乘之前检查稀疏矩阵中的非零元素来减小乘法的数量。然而,检查本身消耗处理资源。
3.例如,卷积神经网络(cnn)用于实现诸如图像分类的任务。用于在数据处理器上的神经网络中实现卷积层的常见方法是将卷积转换成通用矩阵乘法(gemm)运算。优化的软件库用于在数据处理器上有效地执行矩阵乘法。在现代神经网络中,由于所需的大量的乘法,这些矩阵乘法消耗显著的循环。例如,用于图像识别的最先进的感知cnn对于每个输入帧需要三十亿次运算。对神经网络的最近研究表明,这些矩阵中的许多矩阵是稀疏的。如果可避免这些“乘以零”运算,则计算和功率要求减小。已提出各种编码来减小稀疏矩阵的存储器和计算要求。这些方法的缺点是访问单独元素变得更复杂并且在处理器上引入显著开销。实际上,这导致这些稀疏编码仅可用于极高水平的稀疏度(例如,>98%零)。
4.因此,需要一种数据处理器,其在计算中涉及的矩阵中的至少一者为稀疏的时执行有效矩阵计算。
附图说明
5.附图提供了视觉表示,这些视觉表示将用于更全面地描述各种代表性实施方案,并且可由本领域的技术人员使用以更好地理解所公开的代表性实施方案及其固有优点。在这些附图中,类似的附图标号表示对应的元件。
6.图1是现有技术中的稀疏矩阵乘法的方法的流程图;
7.图2是根据各种代表性实施方案的指令集生成的示意图;
8.图3是根据各种代表性实施方案的数据处理装置的框图;
9.图4a和图4b是根据各种代表性实施方案的指令集生成的进一步图解说明;
10.图5是根据各种代表性实施方案的数据处理方法的流程图;并且
11.图6是示出所公开的方法的实施方案的示例性具体实施的性能改进的条形图。
具体实施方式
12.本文所述的各种装置和设备提供了用于在计算中涉及的矩阵中的至少一者为稀疏的时高效计算矩阵计算(诸如矩阵乘法)的系统、装置和方法。
13.虽然本公开能够具有许多不同形式的实施方案,但在附图中示出并将在本文详细描述具体实施方案,应当理解,本公开应被视为本公开的原理的示例,而并非旨在将本公开限制于所示和所述的具体实施方案。在下面的描述中,类似的附图标号用于描述附图的若干视图中的相同、类似或对应的部件。
14.在本文档中,关系术语,诸如第一和第二、顶部和底部等可仅用于将一个实体或动作与另一个实体或动作区分开,而不一定要求或暗示此类实体或动作之间的任何实际的此类关系或次序。术语“包括”、“包含”或它们的任何其他变型旨在涵盖非排他性的包括,使得包括一系列元件的过程、方法、制品或设备不仅包括那些元件,而且可包括未明确列出的或此类过程、方法、制品或设备固有的其他元件。前面带有“包括...一个”的元件在没有更多限制的情况下不排除在包括该元件的过程、方法、制品或装置中存在另外的相同元件。
15.贯穿本文档提及的“一个实施方案”、“某些实施方案”、“实施方案”或类似术语意指结合该实施方案描述的特定特征、结构或特性包括在本公开的至少一个实施方案中。因此,此类短语在本说明书内各个地方的出现不一定都是指相同的实施方案。此外,具体特征、结构或特性可以任何合适的方式无限制地组合在一个或多个实施方案中。
16.如本文所用,术语“或”将被解释为包含性的或意指任何一种或任何组合。因此,“a、b或c”意指“以下中的任一者:a;b;c;a和b;a和c;b和c;a、b和c”。只有当元件、功能、步骤或动作的组合以某种方式固有地相互排斥时,才会出现该定义的例外。
17.为了简化和清楚地说明,可在附图中重复附图标号以指示对应的或类似的元件。阐述了许多细节以提供对本文所述的实施方案的理解。可以在没有这些细节的情况下实践实施方案。在其它情况下,未详细描述熟知的方法、程序和部件以避免模糊所述实施方案。本说明书不应被视为限于本文所述的实施方案的范围。
18.如本文所用,术语处理器、控制器等可涵盖处理器、控制器、微控制器单元(mcu)、微处理器和其他合适的控制元件。应当理解,本文所述的本公开的实施方案可由一个或多个常规处理器和唯一存储的程序指令构成,该唯一存储的程序指令控制一个或多个处理器以结合某些非处理器电路实现本文所述功能中的一些、大多数或全部。非处理器电路可包括但不限于外围设备、信号驱动器、时钟电路、电源电路、输入和输出设备以及用户输入设备。因此,这些功能可被解释为执行根据与本公开一致的某些实施方案的功能的方法。或者,一些或所有功能可由不具有存储的程序指令的状态机或者在一个或多个专用集成电路(asic)中实现,其中每个功能或某些功能的一些组合被实现为定制逻辑。更进一步地,一些或所有的功能可在处理器的指令集架构(isa)中实现。当然,可使用这些方法的组合。因此,本文已描述了用于这些功能的方法和装置。此外,预期普通技术人员,尽管可能有大量的努力和许多设计选择由例如可用时间、当前技术和经济考虑因素促动,但当受本文所公开的概念和原理引导时,将能够以最少的实验容易地生成此类软件指令和程序以及集成电路。
19.本发明公开了一种用于计算矩阵的新型方法,当计算中涉及的矩阵中的至少一者具有一定稀疏度时,该方法是有效的。此类矩阵通常存在于人工神经网络的具体实施中,例如,其中将表示输入特征的多个输入数据集乘以权重的稀疏矩阵。
20.在本文中,术语“矩阵”被认为包括任何数量的维度的数据结构,包括矢量、二维阵列和具有多于两个维度的矩阵。以下公开内容是指2维矩阵,但对于本领域的普通技术人员将显而易见的是,该方法可应用于具有较高(或较低)维度的矩阵。此外,虽然相对于矩阵乘法描述了创新,但其也适用于矩阵之间的其他运算,其中矩阵中的至少一者具有一定稀疏度。
21.图1是现有技术中的稀疏矩阵乘法的方法的流程图。由矩阵a(具有维度n
i
×
n
j
)与矩阵b(具有维度n
j
×
n
k
)的乘积得到的矩阵c(具有维度n
i
×
n
k
)的元素i,k通常被计算为:
[0022][0023]
当矩阵a为稀疏的时,a的一些元素为零,因此乘积可被计算为
[0024][0025]
这需要更少的相乘/累加指令。然而,为了找到矩阵a的非零元素,测试a
ij
≠0需要处理器资源。图1中的流程图100描绘了矩阵c的一个元素的计算。在开始框102之后,在框104处从存储器中检索稀疏矩阵a的元素(a
ij
)。在决策框106处,测试元素以查看其是否为非零。如果元素不是非零的,如决策框106的负分支所示,则流程返回到框104。如果元素是非零的,如决策框106的正分支所示,则在框108处从存储器加载来自矩阵b的对应元素。在框110处将这两个元素相乘并累加。如果计算未完成,如决策框112的正分支所示,则在框104处加载矩阵a的下一个元素。否则,如决策框112的负分支所示,方法在框114处终止。相反,如果矩阵a的元素为零,如决策框106的负分支所示,则流程返回到框104。因此,由于对于矩阵a的零元素避免了框108和110,因此减少了计算。然而,该计算节省通过包括必须对所有元素执行的测试106而抵消。
[0026]
根据本公开的实施方案,对于待相乘的特定稀疏矩阵自动生成代码。自动生成的代码特定于稀疏矩阵中得数据的非零值以及这些值的位置。在处理的第一阶段中生成代码,这可在运行时使用“及时”(jit)代码生成来实现。处理的第一阶段可被视为数据相关编译,即,取决于待执行的矩阵运算和在该运算中使用的数据中的至少一些两者的编译。
[0027]
图2是示出用于简单矩阵乘法的自动代码生成的框图。在所示的示例中,矩阵y的第一元素可被计算为
[0028]
c
00
=a
00
b
00
a
03
b
30

ꢀꢀꢀ
(3)
[0029]
因为a
01
和a
02
均为零。使用矩阵a的实际值得出
[0030]
c
00
=1
×
b
00
2
×
b
30
ꢀꢀꢀ
(4)
[0031]
也可使用矩阵b的实际值。然而,在许多常见应用中,矩阵a包含应用于具有不同值的多个矩阵b的滤波器系数或权重值。假设使用相同的模式将矩阵存储在存储器中,则要在计算中使用的b的元素可经由存储器中的基本地址连同与该基本地址的偏移一起被访问。
[0032]
参见图2,矩阵c中的元素的计算使用来自矩阵a的非零值202连同矩阵b的对应存储器偏移204。这些可在处理的第一阶段中获得。根据值和偏移,自动生成代码206,如箭头208所指示。因此,例如,来自矩阵a的值210将乘以来自矩阵b的元素212。类似地,来自矩阵a的值214将乘以来自矩阵b的元素216。在所示的示例中,矩阵b的元素按行存储,因此元素b
jk
的地址为addr(b
00
) k j
×
n
k
。因此,b
00
以偏移0存储并且b
30
以偏移12存储等。
[0033]
根据本公开的实施方案,第一矩阵的非零值和第二矩阵的对应存储器偏移在处理的第一阶段中被识别,并且用于自动生成将在处理阶段中用于计算第一矩阵和第二矩阵的函数的处理指令(代码)。例如,函数可为第一矩阵和第二矩阵的矩阵乘积。作为特殊情况,函数可以是两个矢量的标量积。可指定其他函数,诸如矩阵和/或差值或schur乘积。处理指令可用于在存储器中具有相同存储模式的附加第二矩阵。
[0034]
预处理阶段使用对稀疏矩阵a的数据值的了解。在一个实施方案中,预处理阶段使
用在运行时执行的“即时”编译来执行。在另一实施方案中,在运行时之前执行预处理阶段。
[0035]
表1概述了在图2中的示例性代码206中使用的指令。
[0036]
表1
[0037][0038]
图3是根据本公开的用于处理稀疏数据的装置300的框图。装置300包括存储器系统302、第一级处理器304和第二级处理器306。装置300被配置为实现稀疏矩阵a和矩阵b的矩阵或矢量函数f(a,b)。该函数可由存储在存储器系统中的指令308指定。代码生成引擎310产生实现指定函数的指令集312。指令集可存储在指令缓冲器313中。稀疏矩阵a存储在存储器系统302的区域314中。第一级处理器304包括非零元素定位器316,该非零元素定位器识别矩阵a中的非零元素并且将非零元素318提供给代码生成引擎310。此外,非零元素定位器316识别矩阵b的将与a的非零元素组合的位置。这些位置被标识为与矩阵b的基本地址的偏移320。因此,非零元素定位器316使用存储器中的矩阵b的存储图案322来确定偏移。
[0039]
如图2的框206所示,所生成的指令包含矩阵a的显式非零值,以及矩阵b与基本地址(存储在寄存器x0中)的偏移。
[0040]
再次参见图3,第二级处理器306的执行引擎324从第一级处理器304接收所生成的指令312,并且此外从地址生成器328接收矩阵b的基本地址326。例如,当指令312实现矩阵b的列与矩阵a的行的相乘时,可针对矩阵b的每个连续列生成基本地址。在图2所示的示例中,基本地址存储在寄存器x0中。所生成的代码的执行致使执行引擎324生成矩阵b中的元素的地址330(存储在存储器区域332中)以及访问值334。在336处输出矩阵c的所得元素。
[0041]
存储在存储器区域332中的矩阵b可由输入数据338填充。
[0042]
稀疏矩阵a的值作为立即值嵌入在所生成的指令中。例如,在一个实施方案中,这些值为8位整数值。这样,稀疏矩阵a的加载操作被完全消除。
[0043]
在一些应用中,函数f(a,b)可使用高重用度来实现。例如,对于矩阵乘法,稀疏矩阵a的单行被分析或解析一次,但是可重复使用所得代码

针对矩阵b的每列使用一次。
[0044]
例如,通过将稀疏矩阵a的值硬编码到二进制指令序列中来实现矩阵a和b的这种乘法,其中a是稀疏的。这可在运行时或在预处理步骤中进行。稀疏矩阵a的非零元素和矩阵b中的数据的对应地址偏移作为立即值或确切值嵌入到指令中。
[0045]
在该方法之后,如图2所示,基本相乘和累加(mac)操作仅需要三个指令:
[0046]
load w1,[x0,12];#从矩阵b加载值
[0047]
move w2,2;#将(来自a的)的立即值分配给寄存器
[0048]
madd w3,w1,w2,w3#相乘和累加
[0049]
与需要至少四个指令的常规方法相比,这将指令的数量减少了25%,这相当于33%的速度增加。
[0050]
进一步的潜在优化是可能的,诸如在来自矩阵a的立即值为2的幂时,通过利用移位寄存器的add来替换move指令和madd指令。
[0051]
如上所述,当矩阵a具有维度n
i
×
n
j
时,处理的第一阶段的开销约是o(n
i
×
n
j
)。与全矩阵乘法的计算成本(n
i
×
n
j
×
n
k
)相比,该开销较小。
[0052]
此外,由于稀疏矩阵中的数据成为编码其自身的指令的一部分,因此其在处理的第二阶段中不通过高速缓存机构。这导致更好的高速缓存利用率。
[0053]
以上讨论的方法也可用于提供单指令多数据(simd)指令的处理器中。
[0054]
图4a和图4b示出了使用4向矢量指令来计算结果矩阵c的第一行的示例。当可用时,可以使用其他宽度的simd指令。如图4a所示,通过将矩阵a的元素210乘以矩阵b的第一行404以及与元素214和矩阵b的最后一行406的乘积相加来获得所得矩阵c的第一行402。所得矢量指令在图4b中的框408中示出。需注意,寄存器x0包含矩阵b的起始地址。总共生成六个指令以计算结果矩阵c的一行。与需要10个指令来完成相同任务的正常方法相比,指令计数减小40%。
[0055]
在另选的实施方案中,使用一种指令序列,该指令序列利用矩阵a的稀疏度而不使用要执行的代码中的a的确切值。相反,使用非零元素的位置(而不是值)来选择执行哪个代码。这可通过根据非零元素的位置在预编译代码之间切换来进行。在另选实施方案的一个实施方案中,生成矩阵a中存在的稀疏度的位矢量表示,其中每个断言位的位置对应于非零元素的位置。例如,图2中矩阵a的第一行的非零元素可由位矢量1001或十进制值9指示。提供了函数集,其封装针对长度n的所有可能的稀疏模式的指令序列。稀疏矢量的位被消耗,一次消耗n位,并且用于根据所找到的稀疏度模式来引导编程流。执行对应的预编译指令序列以执行期望的动作。例如,在n=8的情况下,稀疏矢量每次被消耗8位,其中在切换声明中使用8位以选择对应于256个预编译函数的256个可能路径中的一者(每一者针对每个可能位排列)。
[0056]
在该实施方案中,权重(矩阵a的值)未被硬编码到这些更一般的函数中。相反,针对值的move操作由load操作代替。load操作可以与b的元素类似的方式指定非零元素的偏移。另选地,矩阵a的非零权重可被包装成串行权重阵列并且由该阵列中的偏移指示。
[0057]
因此,该处理器操作方法的实施方案包括:识别存储在所述处理器的存储器中的第一矩阵的非零元素的存储器位置;确定将与所述第一矩阵的所述非零元素组合以产生第三矩阵的元素的存储在所述处理器的所述存储器中的第二矩阵的元素的存储器位置;以及由所述处理器取决于第一矩阵的非零元素的所识别的存储器位置来选择处理器指令集,所述处理器指令用于将所述第一矩阵的所述非零元素与所述第二矩阵的在所确定的存储器位置处的元素组合以产生第三矩阵的所述元素。
[0058]
所述处理器指令集中的指令包括所述第一矩阵的非零元素的所识别的存储器位置和所述第二矩阵的元素的所确定的存储器位置。然后由所述处理器执行所选择的指令集,这致使处理器访问在所述指令中识别的地址处存储在所述存储器中的第一矩阵和第二矩阵的元素。所述第一矩阵的非零元素的所识别的存储器位置可由与第一基本存储器地址的第一偏移指定,并且所述第二矩阵的元素的所确定的存储器位置包括与第二基本存储器地址的第二偏移。
[0059]
现有的相乘累加指令诸如指令madd w
d
,w
n
,w
m
,w
a
(其对w
d
=w
n
*w
m
w
a
进行编码)通常
仅支持寄存器操作数。然而,可通过向处理器的指令集架构(isa)提供专用扩展来进一步提高效率。
[0060]
在一个实施方案中,将指令madd w
d
,w
n
,imm,w
d
添加到isa。这对表达式w
d
=w
n
*imm w
a
进行编码,其中imm为立即值或确切值。例如,imm可以是8位或12位符号的立即值。
[0061]
使用该指令,可将move指令和madd指令(例如,在图2中的框206)组合成单个指令。这使得能够仅使用两个指令来实现相乘/累加操作:
[0062]
load w1,[x0,12];#从矩阵b加载值
[0063]
madd w3,w1,imm,w3#通过来自矩阵a的imm的相乘累加
[0064]
这表示相对于正常方法的指令计数的50%减小,或速度的100%增加。指令可以是单指令单数据(sisd)指令或单指令多数据(simd)指令,其中[x0,12]是指矢量。
[0065]
在又一个实施方案中,提供了isa,其中load、move和madd指令全部组合成单个加载

缩放

添加

增加指令,该指令从存储器地址[xm imm12]加载数据元素,将其缩放立即值(乘以imm),并且然后将结果累加到目标寄存器w
d
中。例如,指令可采用以下形式:
[0066]
ldr_sc_acc w
d
,imm8,[x
m
,imm12]
[0067]
其中imm8是8位立即数据值,并且imm12是12位地址偏移。
[0068]
这对以下表达式进行编码:w
d
=w
d
imm8*mem[x
m
imm12]。利用该指令,用单个指令替换3个指令(load、move和madd)。因此,指令计数减少75%,从而提供速度的300%增加。指令可以是sisd指令或simd指令,其中[x
m
,imm12]是指矢量。
[0069]
在多处理器系统中,如果处理器不支持硬件高速缓存一致性,则上述类型的自动代码生成可能需要由软件进行的显式指令/数据高速缓存无效。为了充分利用上述益处,其中处理器架构或微架构为快速代码生成提供支持,硬件可被配置为实现指令高速缓存的窥探。这继而为指令和/或数据流相干提供了支持。相干指令高速缓存使得总体流程更快且更简单。此外,相干指令高速缓存避免了与软件管理的相干方案相关联的编码错误的风险。
[0070]
在又一个实施方案中,处理器被配置为实现与相乘或相乘/累加指令并行的load和move指令。例如,用于实现c[0]=1
×
b[0] 3
×
b[4] 7
×
b[12]的所生成的代码序列可被生成为:
[0071]
load w1,[x0,0];move w2,1;#w1=b[0],w2=1mult w3,w1,w2;load w1,[x0,4];move w2,3;#w3=1
×
b[0],madd w3,w1,w2;load w1,[x0,12];move w2,7;#w3=w3 3
×
b[4]madd w3,w1,w2;#w3=w3 7
×
b[12]
[0072]
在该示例中,并行地执行在同一行上列出的指令。与使用串行load/move/madd操作的9个循环相比,该具体实施仅使用4个循环。
[0073]
图5是根据实施方案的处理器的操作方法的流程图500。在开始框502后,在框504处识别存储在处理器的存储器中的第一矩阵的非零元素的值。例如,第一矩阵(比方说,a)可以是稀疏矩阵。在框506处,确定将与第一矩阵的非零元素组合以产生第三矩阵(比方说,c)的元素的存储在处理器的存储器中的第二矩阵(比方说,b)的元素的存储器位置。在框508处,由处理器生成处理器指令集,其用于将第一矩阵的非零元素与第二矩阵的在所确定的存储器位置处的元素组合以产生第三矩阵的元素。在框510处,由处理器针对特定的第二矩阵执行处理器指令集。该处理器指令集中的指令包括第二矩阵中的所确定的存储器位置以及第一矩阵的所识别的非零元素的确切值或立即值。第二矩阵的元素的所确定的存储器
位置可在指令中由与基本存储器地址的偏移指定。指令还可指定存储基本存储器地址的寄存器。所识别的非零元素的值可嵌入在处理器指令集中的指令中作为立即值。
[0074]
第三矩阵可表示第一矩阵和第二矩阵的矩阵乘积或矩阵的某个其他组合。
[0075]
在一个实施方案中,指令集中的指令是对第二矩阵的多个数据元素进行操作的单指令多数据(simd)指令。
[0076]
指令集可包括:(i)第一指令,所述第一指令用于将所述第一矩阵的所识别的非零元素移动到第一寄存器中,其中所识别的非零元素嵌入在所述第一指令中作为立即值;(ii)第二指令,所述第二指令用于将存储在所述第二矩阵中的所确定的地址处的数据值加载到第一寄存器中;和(iii)第三指令,所述第三指令用于组合所述第一寄存器和所述第二寄存器中的所述值。第三指令可以是例如乘法指令或相加和相加指令。
[0077]
在又一个实施方案中,所述指令集包括:(i)第一指令,所述第一指令用于将存储在所述第二矩阵中的所确定的地址处的数据值加载到第一寄存器中;和(ii)第二指令,所述第二指令用于将所述第一寄存器中的所述值与所述第一矩阵的所识别的非零元素组合,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令。
[0078]
在又另一个实施方案中,所述指令集包括用于将存储在所述第二矩阵中的所确定的地址处的数据值与所述第一矩阵的所识别的非零元素组合的指令,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令。
[0079]
第一矩阵的非零元素的值的识别、第二矩阵的元素的存储器位置的确定以及处理器指令集的生成可由处理器在恰好在执行处理器指令集之前的运行时执行。这可被实现为例如“即时”编译,其取决于第一矩阵中的数据。在“即时”编译(也称为动态转换或运行时编译)中,程序的指令(例如,其可以是源代码或字节代码)在程序的执行期间(即,在运行时)被编译或转换成机器代码指令。该方法先前已被用于使得源代码或字节代码能够在具有不同指令集架构的处理器上执行。在本公开中,即时编译使得能够生成明确包括数据的机器代码指令。
[0080]
图6是示出所公开的方法的实施方案的示例性具体实施的性能改进的条形图600。条形图600示出了广义矩阵乘法(gemm)的性能图。条形图600中的每个条表示不同矩阵稀疏度的gops(千兆运算每秒)的性能。例如,在99%稀疏度下,矩阵之一中的元素的99%为零。在条形图中,gops的高水平表示更好的性能。框602指示不同矩阵乘法的条颜色。白色条示出了致密矩阵的标准gemm(表示为“dense gemm”)的性能,这并不假设矩阵中的值。黑色条示出了稀疏矩阵的示例性开源emm库例程(表示为eigen3)的性能。浅灰色条和深灰色条对应于以上公开的方法的具体实施,使用即时(jit)编译和两个不同水平的代码优化(表示为情况1和情况2)。基于该基准,当稀疏水平介于80%和99%之间时,上文所公开的方法胜过其他方法。
[0081]
在矩阵计算中,矩阵b的每列乘以稀疏矩阵a的每行。矩阵b的列可被加载一次并且然后再用于矩阵a的多行。这避免了多次从存储器加载相同值。然而,该方法可能受到可用于保持中间数据的cpu寄存器的数量以及用于保持所生成的指令的l1指令高速缓存的大小的限制。在图6中,情况1一次为矩阵a的四行生成代码,从而允许矩阵b的加载列的重复使
用,而情况2一次为矩阵a的单行生成代码。
[0082]
本领域的技术人员将认识到,已经基于使用编程处理器以示例性实施方案描述了本公开。处理器可被设计成实现指令集架构,该指令集架构包括在矩阵中的至少一者为稀疏的时可用于矩阵乘法的有效计算的特定指令。然而,本公开不应如此限制,因为本公开可使用硬件部件等效物诸如专用硬件和/或专用处理器来实现,该专用硬件和/或专用处理器是如所描述和要求保护的本公开的等效物。类似地,通用计算机、基于微处理器的计算机、微控制器、光学计算机、模拟计算机、专用处理器和/或专用硬连线逻辑可用于构造本公开的另选等效实施方案。此类实施方案的指令集架构可包括用于增强矩阵计算的性能的特定指令,其中所涉及的矩阵中的至少一者具有一定稀疏度。
[0083]
此外,本领域的技术人员应当理解,用于实现上述实施方案的程序流和相关联数据可使用各种形式的存储装置来实现,诸如只读存储器(rom)、随机存取存储器(ram)、电可擦除可编程只读存储器(eeprom);非易失性存储器(nvm);海量存储装置,诸如硬盘驱动器、软盘驱动器、光盘驱动器;在不脱离本公开的情况下,光存储元件、磁存储元件、磁光存储元件、闪存存储器、磁芯存储器和/或其他等效存储技术。此类可供选择的存储装置应被视为等同物。
[0084]
使用执行编程指令的编程处理器来实现本文所述的各种实施方案,该编程指令以流程图形式广义描述,该编程指令可存储在任何合适的电子存储介质上或通过任何合适的电子通信介质传输。然而,本领域的技术人员应当理解,在不脱离本公开的情况下,上述过程可以任何数量的变型和许多合适的编程语言来实现。例如,在不脱离本公开的情况下,执行的某些操作的顺序通常可以改变,可以添加附加操作或者可以删除操作。在不脱离本公开的情况下,可以增加和/或增强错误捕捉,并且可以在用户界面和信息呈现中进行改变。此类变型是可设想的并且被认为是等同的。
[0085]
因此,所公开的实施方案的一些方面和特征在以下编号的项目中列出:
[0086]
1.一种数据处理器的操作方法,包括:接收用于将第一矩阵与第二矩阵组合以产生第三矩阵的第一处理器指令集;识别存储在所述数据处理器的存储器中的所述第一矩阵的非零元素的值;确定将与所述第一矩阵的所述非零元素组合以产生所述第三矩阵的元素的存储在所述数据处理器的所述存储器中的所述第二矩阵的元素的存储器位置;由所述数据处理器根据所述第一处理器指令集生成第二处理器指令集,所述第二处理器指令集用于将所述第一矩阵的所述非零元素与所述第二矩阵的在所确定的存储器位置处的元素组合以产生所述第三矩阵的所述元素;以及由所述数据处理器执行所述第二处理器指令集,其中所述第二处理器指令集中的指令包括确定的存储器位置或识别的非零元素的值。
[0087]
2.根据项目1所述的方法,其中所述第二矩阵的元素的确定的存储器位置包括与基本存储器地址的偏移,并且其中所述第二处理器指令集中的所述指令包括所述基本存储器地址和所述偏移。
[0088]
3.根据项目1所述的方法,其中识别的非零元素的值嵌入在所述第二处理器指令集中的指令中作为立即值。
[0089]
4.根据项目1所述的方法,其中所述第三矩阵包括所述第一矩阵和所述第二矩阵的矩阵乘积。
[0090]
5.根据项目1所述的方法,其中所述第一矩阵包括稀疏矩阵。
[0091]
6.根据项目1所述的方法,其中所述第二指令集中的指令包括单指令多数据(simd)指令。
[0092]
7.根据项目1所述的方法,其中所述第二指令集包括:第一指令,所述第一指令用于将所述第一矩阵的识别的非零元素移动到第一寄存器中,其中所识别的非零元素嵌入在所述第一指令中作为立即值;第二指令,所述第二指令用于将存储在所述第二矩阵中的确定的地址处的数据值加载到第二寄存器中;和第三指令,所述第三指令用于组合所述第一寄存器和所述第二寄存器中的所述值。
[0093]
8.根据项目7所述的方法,其中所述第三指令包括乘法指令或相乘和相加指令。
[0094]
9.根据项目1所述的方法,其中所述第二指令集包括:第一指令,所述第一指令用于组合存储在第一寄存器和第二寄存器中的值;第二指令,所述第二指令用于将所述第一矩阵的下一个识别的非零元素移动到所述第一寄存器中,其中所述下一个识别的非零元素嵌入在所述第二指令中作为立即值;和第三指令,所述第三指令用于将存储在所述第二矩阵中的确定的地址处的下一个数据值加载到所述第二寄存器中,其中所述第一指令、所述第二指令和所述第三指令并行地执行。
[0095]
10.根据项目1所述的方法,其中所述第二指令集包括:第一指令,所述第一指令用于将存储在所述第二矩阵中的确定的地址处的数据值加载到第一寄存器中;和第二指令,所述第二指令用于将所述第一寄存器中的所述值与所述第一矩阵的识别的非零元素组合,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令。
[0096]
11.根据项目1所述的方法,其中所述第二指令集包括:用于将存储在所述第二矩阵中的确定的地址处的数据值与所述第一矩阵的识别的非零元素组合的指令,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令。
[0097]
12.根据项目1所述的方法,其中识别所述第一矩阵的非零元素的值、确定所述第二矩阵的元素的存储器位置以及根据所述第一处理器指令集生成所述第二处理器指令集由所述数据处理器在恰好在执行所述第二处理器指令集之前的运行时执行。
[0098]
13.一种数据处理器的操作方法,包括:识别存储在所述数据处理器的存储器中的第一矩阵的非零元素的存储器位置;确定将与所述第一矩阵的所述非零元素组合以产生第三矩阵的元素的存储在所述数据处理器的所述存储器中的第二矩阵的元素的存储器位置;由所述数据处理器取决于第一矩阵的非零元素的所识别的存储器位置来选择处理器指令集,所述处理器指令集用于将所述第一矩阵的所述非零元素与所述第二矩阵的在所确定的存储器位置处的元素组合以产生第三矩阵的所述元素;以及由所述数据处理器执行所述处理器指令集,其中所述处理器指令集中的指令包括所述第一矩阵的非零元素的识别的存储器位置或所述第二矩阵的元素的确定的存储器位置。
[0099]
14.根据项目13所述的方法,其中所述第一矩阵的非零元素的识别的存储器位置包括与第一基本存储器地址的第一偏移,并且所述第二矩阵的元素的确定的存储器位置包括与第二基本存储器地址的第二偏移。
[0100]
15.一种数据处理装置,所述数据处理装置包括:存储器系统;第一级处理器,所述第一级处理器可操作地耦接到所述存储器系统并且被配置为:识别存储在所述存储器中的
第一矩阵的非零元素的值;确定将与所述第一矩阵的所述非零元素组合以产生第三矩阵的元素的存储在所述存储器系统中的第二矩阵的元素的存储器位置;以及生成处理器指令集,所述处理器指令集用于将所述第一矩阵的所述非零元素与所述第二矩阵的在所确定的存储器位置处的元素组合以产生第三矩阵的所述元素,其中所述处理器指令集中的指令包括确定的存储器位置和识别的非零元素的值;和第二级处理器,所述第二级处理器可操作地耦接到所述存储器系统并且被配置为执行所述处理器指令集,其中执行所述处理器指令集包括访问存储在所述存储器系统中的所述第二矩阵的元素以及由此产生所述第三矩阵的元素。
[0101]
16.根据项目15所述的数据处理装置,其中所述第一级处理器和所述第二级处理器彼此集成。
[0102]
17.根据项目15所述的数据处理装置,还包括指令缓冲器,其中所述第一级处理器被配置为在恰好在由所述第二级处理器执行所述指令集之前的运行时生成所述指令集。
[0103]
18.根据项目15所述的数据处理装置,其中所述第二矩阵的元素的确定的存储器位置包括与基本存储器地址的偏移,并且其中所述处理器指令集中的所述指令包括所述基本存储器地址和所述偏移。
[0104]
19.根据项目18所述的数据处理装置,其中所述第二级处理器被配置为针对多个基本存储器地址中的每个基本存储器地址执行所述指令集。
[0105]
20.根据项目15所述的数据处理装置,其中识别的非零元素的值嵌入在所述处理器指令集中的指令中作为立即值。
[0106]
21.根据项目15所述的数据处理装置,其中所述指令集中的指令包括单指令多数据(simd)指令。
[0107]
22.根据项目15所述的数据处理装置,其中所述指令集包括:第一指令,所述第一指令用于将存储在所述第二矩阵中的确定的地址处的数据值加载到第一寄存器中;和第二指令,所述第二指令用于将所述第一寄存器中的所述值与所述第一矩阵的识别的非零元素组合,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令,其中所述第二指令在所述第二级处理器的架构中实现。
[0108]
23.根据项目22所述的数据处理装置,其中所述指令集包括:用于将存储在所述第二矩阵中的确定的地址处的数据值与所述第一矩阵的识别的非零元素组合的指令,其中所识别的非零元素嵌入在所述第二指令中作为立即值,并且其中所述第二指令包括乘法指令或相乘和相加指令,其中所述第二指令在所述第二级处理器的所述架构中实现。
[0109]
已在本文中详细描述的各种代表性实施方案以举例的方式而非限制的方式给出。本领域的技术人员应当理解,可对所述实施方案的形式和细节进行各种改变,从而得到保持在所附项目的范围内的等同实施方案。
再多了解一些

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

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

相关文献