运算装置及方法转让专利

申请号 : CN201811085529.2

文献号 : CN110147222B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

申请人 : 安徽寒武纪信息科技有限公司

摘要 :

本公开属于计算机领域,更具体地涉及一种运算装置及方法,所述运算装置,包括:运算控制模块,用于接收或确定分块信息;迭代运算模块,用于根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵。本公开提出的装置及方法,在降低操作时间复杂度的同时也使运算操作的使用更为简单高效。

权利要求 :

1.一种运算装置,包括:

运算控制模块,用于接收分块信息,所述分块信息包括分块大小信息,所述分块大小信息表示将运算矩阵进行分块后,所获得的各个分块矩阵的大小信息;

其中,所述分块信息是从输入数据直接获取的;

迭代运算模块,用于根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵,从而使用一条单独指令完成矩阵转置;其中,转置运算为:获取n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;

迭代合并运算为:获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数;

其中,所述迭代运算模块包括:迭代分块单元,用于根据分块信息对运算矩阵进行迭代分块运算得到n个分块矩阵;

所述迭代分块单元包括:第一矩阵判断单元、矩阵分块单元和第一缓存单元;其中,所述矩阵分块单元用于根据分块信息对运算矩阵进行分块并将分块矩阵发送至所述第一缓存单元;所述第一缓存单元用于将分块矩阵输入至所述第一矩阵判断单元;若有超过预定规模阈值M的分块矩阵,则将其发送至所述矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均小于或等于所述预定规模阈值M。

2.如权利要求1所述的运算装置,其中,所述迭代运算模块还包括:

矩阵运算单元,用于获取所述n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;

迭代合并单元,用于获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。

3.如权利要求2所述的运算装置,其中,所述矩阵运算单元包括第一地址映射生成单元、第一地址计数器和元素交换单元;其中,所述第一地址映射生成单元用于根据输入的矩阵规模信息和地址信息生成地址映射表;所述元素交换单元用于根据地址映射表进行矩阵相应位置元素的交换;所述第一地址计数器用于判断矩阵是否已经全部处理完毕。

4.如权利要求2所述的运算装置,其中,所述迭代合并单元包括第二缓存单元,第二地址映射生成单元、第二地址计数器、矩阵合并单元和第二矩阵判断单元;其中,所述第二缓存单元用于接收转置后的分块矩阵;所述矩阵合并单元接收所述转置后的分块矩阵并合并;所述第二地址映射生成单元和第二地址计数器用于将每个分块矩阵作为一个元素,进行元素交换操作;所述第二矩阵判断单元用于确定合并得到的矩阵的规模。

5.如权利要求1至4中任一项所述的运算装置,还包括:

地址存储模块,用于存储所述运算矩阵的地址信息;以及

数据存储模块,用于存储所述运算矩阵,并存储运算后的转置矩阵;

其中,所述运算控制模块用于接收所述运算矩阵的地址信息和分块信息;

所述迭代运算模块,用于从所述运算控制模块获取运算矩阵的地址信息及分块信息,根据所述运算矩阵的地址信息从所述数据存储模块提取运算矩阵,并对所述运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵,并将所述运算矩阵的转置矩阵反馈至所述数据存储模块。

6.如权利要求5所述的运算装置,其中,所述地址存储模块包括标量寄存器堆或通用内存单元;所述数据存储模块包括高速暂存存储器或通用内存单元;所述运算矩阵的地址信息为矩阵的起始地址信息和矩阵大小信息。

7.如权利要求5所述的运算装置,还包括:输入输出模块,用于向所述数据存储模块输入所述运算矩阵,还用于从所述数据存储模块获取运算后的转置矩阵,并输出所述运算后的转置矩阵。

8.一种运算方法,包括:

运算控制模块接收分块信息,所述分块信息包括分块大小信息,所述分块大小信息表示将运算矩阵进行分块后,所获得的各个分块矩阵的大小信息;其中,所述分块信息是从输入数据直接获取的;

迭代运算模块根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵;其中,转置运算包括:获取n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵,从而使用一条单独指令完成矩阵转置;迭代合并运算包括:获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数;

其中,迭代运算模块的迭代分块单元根据分块信息对运算矩阵进行迭代分块运算得到n个分块矩阵:迭代分块单元的矩阵分块单元根据分块信息对运算矩阵进行分块并将分块矩阵发送至迭代分块单元的缓存单元;迭代分块单元的缓存单元将分块矩阵输入至迭代分块单元的矩阵判断单元,经所述迭代分块单元的矩阵判断单元判断若有超过预定规模阈值M的分块矩阵,则将其发送至所述迭代分块单元的矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均小于或等于所述预定规模阈值M。

9.如权利要求8所述的运算方法,其中,所述迭代运算模块根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵的步骤还包括:迭代运算模块的矩阵运算单元获取所述n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;

迭代运算模块的迭代合并单元获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。

10.如权利要求9所述的运算方法,其中,在所述迭代运算模块的迭代合并单元获取并迭代合并所述n个分块矩阵的转置矩阵的步骤中;

迭代合并单元的缓存单元接收转置后的分块矩阵;

迭代合并单元的矩阵合并单元接收所述迭代合并单元的缓存单元发送的转置后的分块矩阵并合并;

迭代合并单元的地址映射生成单元和迭代合并单元的地址计数器将合并后的矩阵中的每个分块矩阵作为一个元素,进行元素交换操作;

迭代合并单元的矩阵判断单元确定合并得到的矩阵的规模。

11.如权利要求8所述的运算方法,还包括:

地址存储模块存储所述运算矩阵的地址信息;

数据存储模块存储所述运算矩阵及运算后的转置矩阵;

其中,所述运算控制模块从输入数据中直接获取所述运算矩阵的地址信息和分块信息;

所述迭代运算模块从所述运算控制模块获取运算矩阵的地址信息及分块信息,根据所述运算矩阵的地址信息从所述数据存储模块提取运算矩阵,并对所述运算矩阵进行分块、转置及合并运算,得到所述运算矩阵的转置矩阵,并将所述运算矩阵的转置矩阵反馈至所述数据存储模块。

说明书 :

运算装置及方法

技术领域

[0001] 本公开属于计算机技术领域,更具体地涉及一种运算装置及方法。

背景技术

[0002] 矩阵转置运算是各领域中使用频率很高的一种基本数学运算。除普通的矩阵转置(即使矩阵行与列互换)之外,还有行转置、列转置、反转置、90°左翻转、90°右翻转等特殊的矩阵转置操作,在矩阵运算中也十分常用。当前阶段,使用计算机进行矩阵转置(包括非常规转置,以下均称转置)操作的通常方法为利用通用处理器编写两层循环进行不同地址上的数据交换,其时间复杂度为O(n^2)。这样时间复杂度的矩阵转置运算在复杂系统中会成为提高性能的瓶颈之一,尤其是在矩阵元素量很大的情况下。

发明内容

[0003] 基于以上问题,本公开的目的在于提出一种运算装置及方法,用于解决以上技术问题的至少之一。
[0004] 为了达到上述目的,作为本公开的一个方面,提供了一种运算装置,包括:
[0005] 运算控制模块,用于接收或确定分块信息;
[0006] 迭代运算模块,用于根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵。
[0007] 在一些实施例中,所述迭代运算模块包括:
[0008] 迭代分块单元,用于根据分块信息对运算矩阵进行迭代分块运算得到n个分块矩阵;
[0009] 矩阵运算单元,用于获取所述n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;
[0010] 迭代合并单元,用于获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。
[0011] 在一些实施例中,所述迭代分块单元包括:矩阵判断单元、矩阵分块单元和缓存单元;其中,所述矩阵分块单元用于根据分块信息对运算矩阵进行分块并将分块矩阵发送至所述缓存单元;所述缓存单元用于将分块矩阵重新输入至所述矩阵判断单元;若有超过预定规模阈值M的分块矩阵,则将其发送至所述矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均小于或等于所述预定规模阈值M。
[0012] 在一些实施例中,所述矩阵运算单元包括地址映射生成单元、地址计数器和元素交换单元;其中,所述地址映射生成单元用于根据输入的矩阵规模信息和地址信息生成地址映射表;所述元素交换单元用于根据地址映射表进行矩阵相应位置元素的交换;所述地址计数器单元用于判断矩阵是否已经全部处理完毕。
[0013] 在一些实施例中,所述迭代合并单元包括缓存单元,地址映射生成单元、地址计数器、矩阵合并单元和矩阵判断单元;其中,所述缓存单元用于接收转置后的分块矩阵;所述矩阵合并单元接收所述转置后的分块矩阵并合并;所述地址映射生成单元和地址计数器用于将每个分块矩阵作为一个元素,进行元素交换操作;所述矩阵判断单元用于确定合并得到的矩阵的规模。
[0014] 在一些实施例中,所述的运算装置还包括:
[0015] 地址存储模块,用于存储所述运算矩阵的地址信息;以及
[0016] 数据存储模块,用于存储所述运算矩阵,并存储运算后的转置矩阵;
[0017] 其中,所述运算控制模块用于接收所述运算矩阵的地址信息和分块信息,或者用于从所述地址存储模块提取所述运算矩阵的地址信息,并根据所述运算矩阵的地址信息分析得到分块信息;
[0018] 所述迭代运算模块,用于从所述运算控制模块获取运算矩阵的地址信息及分块信息,根据所述运算矩阵的地址信息从所述数据存储模块提取运算矩阵,并对所述运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵,并将所述运算矩阵的转置矩阵反馈至所述数据存储模块。
[0019] 在一些实施例中,所述运算控制模块包括:
[0020] 指令缓存单元,用于存储待执行的运算指令;
[0021] 指令处理单元,用于从指令缓存单元中获取所述运算指令,对所述运算指令进行译码,并根据所述译码后的所述运算指令从所述地址存储模块中获取运算矩阵的地址信息;
[0022] 矩阵判断单元,用于对所述运算矩阵的地址信息进行分析,得到所述分块信息;
[0023] 依赖关系处理单元,用于判断所述译码后的所述运算指令和运算矩阵的地址信息是否与上一运算存在冲突,若存在冲突,则暂存所述译码后的所述运算指令和运算矩阵的地址信息;若不存在冲突,则发射所述译码后的所述运算指令和运算矩阵的地址信息至所述矩阵判断单元;
[0024] 指令队列存储器,用于缓存所述存在冲突的译码后的所述运算指令和运算矩阵的地址信息,当所述冲突消除后,将缓存的所述译码后的所述运算指令和运算矩阵的地址信息发射至所述矩阵判断单元。
[0025] 在一些实施例中,所述地址存储模块包括标量寄存器堆或通用内存单元;所述数据存储模块包括高速暂存存储器或通用内存单元;所述运算矩阵的地址信息为矩阵的起始地址信息和矩阵大小信息。
[0026] 在一些实施例中,所述的运算装置还包括:输入输出模块,用于向所述数据存储模块输入所述运算矩阵数据,还用于从所述数据存储模块获取运算后的转置矩阵,并输出所述运算后的转置矩阵。
[0027] 根据本公开的另一个方面,提供了一种运算方法,包括:
[0028] 运算控制模块接收或确定分块信息;
[0029] 迭代运算模块根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵。
[0030] 在一些实施例中,所述迭代运算模块根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵的步骤包括:
[0031] 迭代运算模块的迭代分块单元根据分块信息对运算矩阵进行迭代分块运算得到n个分块矩阵;
[0032] 迭代运算模块的矩阵运算单元获取所述n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;
[0033] 迭代运算模块的迭代合并单元获取并迭代合并所述n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。
[0034] 在一些实施例中,在所述迭代分块单元根据分块信息对运算矩阵进行迭代分块运算的步骤中,
[0035] 矩阵分块单元根据分块信息对运算矩阵进行分块并将分块矩阵发送至缓存单元;
[0036] 缓存单元将分块矩阵输入至矩阵判断单元,经所述矩阵判断单元判断若有超过预定规模阈值M的分块矩阵,则将其发送至所述矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均小于或等于所述预定规模阈值M。
[0037] 在一些实施例中,在所述迭代运算模块的迭代合并单元获取并迭代合并所述n个分块矩阵的转置矩阵的步骤中;
[0038] 缓存单元接收转置后的分块矩阵;
[0039] 矩阵合并单元接收所述缓存单元发送的转置后的分块矩阵并合并;
[0040] 地址映射生成单元和元素交换单元将合并后的矩阵中的每个分块矩阵作为一个元素,进行元素交换操作;
[0041] 矩阵判断单元确定合并得到的矩阵的规模。
[0042] 在一些实施例中,所述的运算方法还包括:
[0043] 地址存储模块存储所述运算矩阵的地址信息;
[0044] 数据存储模块存储所述运算矩阵及运算后的转置矩阵;
[0045] 其中,所述运算控制模块从所述地址存储模块提取所述运算矩阵的地址信息,并根据所述运算矩阵的地址信息分析得到分块信息;或所述运算控制模块从输入数据中直接获取所述运算矩阵的地址信息和分块信息;
[0046] 所述运算模块从所述运算控制模块获取运算矩阵的地址信息及分块信息,根据所述运算矩阵的地址信息从所述数据存储模块提取运算矩阵,并对所述运算矩阵进行分块、转置及合并运算,得到所述运算矩阵的转置矩阵,并将所述运算矩阵的转置矩阵反馈至所述数据存储模块。
[0047] 本公开提出的运算装置及方法,由于可以对运算矩阵进行分块,通过对多个分块矩阵分别进行转置运算得到多个分块矩阵的转置矩阵,最终对多个分块矩阵的转置矩阵进行合并,得到运算矩阵的转置矩阵,因此可以实现使用一条单独指令在常数时间复杂度内完成任意大小矩阵的转置操作。相比较传统的矩阵转置操作实现方法,在降低操作时间复杂度的同时也使矩阵转置操作的使用更为简单高效。

附图说明

[0048] 图1是本公开提出的运算装置的结构示意图。
[0049] 图2是本公开提出的运算装置的信息流示意图。
[0050] 图3是本公开提出的运算装置中运算模块的结构示意图。
[0051] 图4是本公开提出的运算模块进行矩阵运算示意图。
[0052] 图5是本公开提出的运算模块进行矩阵运算另一示意图。
[0053] 图6是本公开提出的运算装置中运算控制模块的结构示意图。
[0054] 图7是本公开一实施例提出的运算装置的详细结构示意图。
[0055] 图8是本公开另一实施例提出的运算方法的流程图。
[0056] 图9是本公开提出的运算装置的另一结构示意图。
[0057] 图10是本公开提出的运算装置的另一信息流示意图。
[0058] 图11是本公开提出的迭代分块单元的结构示意图。
[0059] 图12是本公开提出的矩阵运算单元的结构示意图。
[0060] 图13是本公开提出的迭代合并运算单元的结构示意图。

具体实施方式

[0061] 为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开作进一步的详细说明。
[0062] 本公开提供了一种运算装置,包括:
[0063] 运算控制模块,用于接收或确定分块信息;
[0064] 运算模块,用于根据所述分块信息对运算矩阵进行分块得到分块矩阵,以及根据运算指令对所述分块矩阵进行转置得到分块矩阵的转置矩阵。
[0065] 所述运算模块还用于在分块、转置运算之后进行合并运算,将分块矩阵的转置矩阵进行合并得到所述运算矩阵的转置矩阵。
[0066] 其中,所述运算模块根据运算指令获得的转置方式,对矩阵进行转置操作。所述运算指令包括常规转置指令(常规转置即将矩阵A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置)、行转置指令、列转置指令、反转置指令、90°左翻转转置指令、90°右翻转转置指令等。所述运算指令中至少包括指令类型、数据类型、矩阵首地址、矩阵行数,矩阵列数及目标存储地址,的具体格式如表1所示。
[0067] 表1运算指令格式
[0068]
[0069] 下面举例说明本公开转置操作所涉及的运算指令及其对应的转置方式。
[0070] 以所述运算指令为矩阵求常规转置MTRAN为例,对给定的矩阵求常规转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0071]
[0072] 以所述运算指令为矩阵求行转置MRTRAN为例,对给定的矩阵求行转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0073]
[0074] 以所述运算指令为矩阵求列转置MCTRAN为例,对给定的矩阵求列转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0075]
[0076] 以所述运算指令为矩阵求反转置MOTRAN为例,对给定的矩阵求反转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0077]
[0078] 以所述运算指令为矩阵求向左翻转90°转置MLTTRAN为例,对给定的矩阵求向左翻转90°转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0079]
[0080] 以所述运算指令为矩阵求向右翻转90°转置MRTTRAN为例,对给定的矩阵求向右翻转90°转置矩阵运算。具体实现中,给定一个方阵A,按照如下公式计算该矩阵A的转置(以4x4矩阵为例)。
[0081]
[0082] 具体的,所述分块信息可以包括分块大小信息,分块方式信息,分块合并信息的至少一种。其中,分块大小信息表示将所述运算矩阵进行分块后,所获得的各个分块矩阵的大小信息。分开方式信息表示对所述运算矩阵进行分块的方式。分开合并信息表示将各个分块矩阵进行转置运算后,重新合并获得运算矩阵的转置矩阵的方式。
[0083] 由于本公开运算装置可以对运算矩阵进行分块,通过对多个分块矩阵分别进行转置运算得到多个分块矩阵的转置矩阵,最终对多个分块矩阵的转置矩阵进行合并,得到运算矩阵的转置矩阵,因此可以实现使用一条单独指令在常数时间复杂度内完成任意大小矩阵的转置操作。相比较传统的矩阵转置操作实现方法,本公开在降低操作时间复杂度的同时也使矩阵转置操作的使用更为简单高效。
[0084] 如图1-2所示,在本公开的一些实施例中,所述运算装置,还包括:运算控制模块2、运算模块3、地址存储模块1和数据存储模块4。
[0085] 具体的,所述运算控制模块,用于接收或确定分块信息;
[0086] 运算模块,用于对运算矩阵进行分块、转置运算,以得到所述运算矩阵的转置矩阵;进一步的,所述运算模块根据所述分块信息对运算矩阵进行分块得到分块矩阵,根据运算指令对所述分块矩阵进行转置得到分块矩阵的转置矩阵。更进一步的,所述运算模块还用于在分块、转置运算之后进行合并运算,将分块矩阵的转置矩阵进行合并得到所述运算矩阵的转置矩阵。
[0087] 地址存储模块,用于存储运算矩阵的地址信息;以及
[0088] 数据存储模块,用于存储原始矩阵数据,该原始矩阵数据包括所述运算矩阵,并存储运算后的转置矩阵;
[0089] 其中,所述运算控制模块用于接收所述运算矩阵的地址信息和分块信息,或者用于从地址存储模块提取运算矩阵的地址信息,并根据运算矩阵的地址信息分析得到分块信息;所述运算模块用于从运算控制模块获取运算矩阵的地址信息及分块信息,根据运算矩阵的地址信息从数据存储模块提取运算矩阵,并根据分块信息对运算矩阵进行分块、根据运算指令对分块矩阵进行转置,并对分块矩阵转置后的得到的矩阵进行合并运算,得到运算矩阵的转置矩阵,并将运算矩阵的转置矩阵反馈至数据存储模块。
[0090] 如图3所示,在本公开的一些实施例中,上述运算模块包括矩阵分块单元、矩阵运算单元和矩阵合并单元,其中:
[0091] 矩阵分块单元31,用于从运算控制模块获取运算矩阵的地址信息及分块信息,并根据运算矩阵的地址信息从数据存储模块提取运算矩阵,根据分块信息对运算矩阵进行分块运算得到n个分块矩阵;
[0092] 矩阵运算单元32,用于获取n个分块矩阵,并对n个分块矩阵分别根据运算指令获得的转置方式进行转置运算,得到n个分块矩阵的转置矩阵;
[0093] 矩阵合并单元33,用于根据运算指令获得的转置方式获得相应的合并方式(合并方式与相应的转置方式相同,即将每个分块作为元素以相应的转置方式进行转置),获取并合并n个分块矩阵的转置矩阵,得到所述运算矩阵的转置矩阵,其中,n为自然数。
[0094] 举例而言,如图4所示,对于存储于数据存储模块中的一运算矩阵X,运算模块的矩阵分块单元从数据存储模块中提取所述运算矩阵X,根据分块信息对运算矩阵X进行分块运算操作,得到4个分块矩阵X1、X2、X3、X4,并输出至矩阵运算单元;矩阵运算单元从矩阵分块单元中获取这4个分块矩阵,并对这4个分块矩阵分别进行转置运算操作,得到4个分块矩阵T T T T的转置矩阵X1、X2 、X3、X4 ,并输出至矩阵合并单元;矩阵合并单元从矩阵运算单元中获取这4个分块矩阵的转置矩阵并进行合并,得到运算矩阵的转置矩阵XT,还可进一步将转置矩阵XT输出至数据存储模块。
[0095] 如图5所示,是本公开的一些实施列中实现矩阵向左翻转90°转置(以4x4为例)的过程。(该过程为分块内进行矩阵向左翻转90°转置,然后将所有分块进行向左翻转90°转置,其他转置操作与之类似,此处不再赘述,另外,分块方式不唯一,在此仅作示例性说明。)[0096] 在本公开的一些实施例中,请继续参照图3所示,上述运算模块还包括缓存单元34,用于缓存n个分块矩阵,以供矩阵运算单元获取。
[0097] 在本公开的一些实施例中,上述矩阵合并单元还可以包括存储器,用于暂时存储获取的分块矩阵的转置矩阵,当矩阵运算单元完成所有分块矩阵的运算后,矩阵合并单元即可获取到所有分块矩阵的转置矩阵,再根据不同的转置方式选择相应的合并方式对n个分块矩阵的转置矩阵进行合并操作,得到转置后的矩阵,并将输出结果写回到数据存储模块中。
[0098] 本领域技术人员应当可以理解的是,上述矩阵分块单元、矩阵运算单元及矩阵合并单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。所述矩阵分块单元及矩阵合并单元可包括一个或多个控制元件、所述矩阵运算单元可包括一个或多个控制元件、计算元件。
[0099] 如图6所示,在本公开的一些实施例中,上述运算控制模块包括指令处理单元22、指令缓存单元21和矩阵判断单元23,其中:
[0100] 指令缓存单元,用于存储待执行的矩阵运算指令;
[0101] 指令处理单元,用于从指令缓存单元中获取矩阵运算指令,对矩阵运算指令进行译码,并根据译码后的矩阵运算指令从地址存储模块中提取运算矩阵的地址信息;
[0102] 矩阵判断单元,用于根据运算矩阵的地址信息判断是否需要进行分块,并根据判断结果得到分块信息。
[0103] 在本公开的一些实施例中,请再参照图6所示,上述运算控制模块还包括依赖关系处理单元24,用于判断译码后的矩阵运算指令和运算矩阵的地址信息是否与上一运算存在冲突,若存在冲突,则暂存译码后的矩阵运算指令和运算矩阵的地址信息;若不存在冲突,则发射译码后的矩阵运算指令和运算矩阵的地址信息至矩阵判断单元。
[0104] 在本公开的一些实施例中,请继续参照图6所示,上述运算控制模块还包括指令队列存储器25,用于缓存存在冲突的译码后的矩阵运算指令和运算矩阵的地址信息,当所述冲突消除后,将所缓存的译码后的矩阵运算指令和运算矩阵的地址信息发射至矩阵判断单元。
[0105] 具体地,矩阵运算指令访问数据存储模块时,前后指令可能会访问同一块存储空间,为了保证指令执行结果的正确性,当前指令如果被检测到与之前的指令的数据存在依赖关系,该指令必须在指令队列存储器内等待至依赖关系被消除。
[0106] 在本公开的一些实施例中,请继续参照图6所示,上述指令处理单元包括取指单元221和译码单元222,其中:
[0107] 取指单元,用于从指令缓存单元中获取矩阵运算指令,并将此矩阵运算指令传输至译码单元;
[0108] 译码单元,用于对矩阵运算指令进行译码,根据该译码后的矩阵运算指令从地址存储模块中提取运算矩阵的地址信息,并将译码后的矩阵运算指令和提取的运算矩阵的地址信息传输至所述依赖关系处理单元。
[0109] 在本公开的一些实施例中,上述运算装置还包括输入输出模块,用于向数据存储模块输入所述运算矩阵,还用于从数据存储模块获取运算后的转置矩阵,并输出运算后的转置矩阵。
[0110] 在本公开的一些实施例中,上述运算矩阵的地址信息为矩阵的起始地址信息和矩阵大小信息。
[0111] 在本公开的一些实施例中,运算矩阵的地址信息是矩阵在数据存储模块中的存储地址。
[0112] 在本公开的一些实施例中,地址存储模块为标量寄存器堆或通用内存单元;数据存储模块为高速暂存存储器或通用内存单元。
[0113] 在本公开的一些实施例中,地址存储模块可以是标量寄存器堆,提供运算过程中所需的标量寄存器,标量寄存器不只存放矩阵地址,还可存放有标量数据。当对大规模矩阵进行转置时进行了分块操作后,标量寄存器中的标量数据可以用于记录矩阵块的数量。
[0114] 在本公开的一些实施例中,数据存储模块可以是高速暂存存储器,能够支持不同大小的矩阵数据。
[0115] 在本公开的一些实施例中,矩阵判断单元用于判断矩阵大小,如果超过预定规模阈值M,则需要对矩阵进行分块操作,矩阵判断单元根据此判断结果分析得到分块信息。
[0116] 在本公开的一些实施例中,指令缓存单元,用于存储待执行的矩阵运算指令。指令在执行过程中,同时也被缓存在指令缓存单元中,当一条指令执行完之后,如果该指令同时也是指令缓存单元中未被提交指令中最早的一条指令,该指令将被提交,一旦提交,这条指令进行的操作对装置状态的改变将无法撤销。该指令缓存单元可以是重排序缓存。
[0117] 在本公开的一些实施例中,矩阵运算指令为矩阵转置运算指令(简称运算指令),包括操作码和操作域,其中,操作码用于指示该矩阵转置运算指令的功能,矩阵运算控制模块通过识别该操作码确认进行矩阵转置操作,操作域用于指示该矩阵转置运算指令的数据信息,其中,数据信息可以是立即数或寄存器号,例如,要获取一个矩阵时,根据寄存器号可以在相应的寄存器中获取矩阵起始地址和矩阵规模,再根据矩阵起始地址和矩阵规模在数据存储模块中获取相应地址存放的矩阵。
[0118] 在一些实施例中,如图7所示,本实施例运算装置包括地址存储模块、运算控制模块、运算模块、数据存储模块和输入输出模块5,其中
[0119] 可选的,所述运算控制模块包括指令缓存单元、指令处理单元、依赖关系处理单元、指令队列存储器和矩阵判断单元,其中指令处理单元又包括取指单元和译码单元;
[0120] 可选的,所述运算模块包括矩阵分块单元、矩阵缓存单元、矩阵运算单元和矩阵合并单元;
[0121] 可选的,所述地址存储模块为一标量寄存器堆;
[0122] 可选的,所述数据存储模块为一高速暂存存储器;输入输出模块为一IO内存存取模块。
[0123] 本公开使用一种新的运算结构简单高效的实现对矩阵的转置运算,降低了这一运算的时间复杂度。
[0124] 本公开还提供了一种运算方法,包括以下步骤:
[0125] 运算控制模块接收或确定分块信息;
[0126] 运算模块根据所述分块信息对运算矩阵进行分块得到分块矩阵,以及根据运算指令对所述分块矩阵进行转置得到分块矩阵的转置矩阵。
[0127] 在转置运算的步骤之后,还可包括:合并运算,运算模块将分块矩阵的转置矩阵进行合并得到所述运算矩阵的转置矩阵。
[0128] 在一些实施例中,如图8所示,本公开运算方法,包括以下步骤:
[0129] 步骤1、运算控制模块从地址存储模块提取运算矩阵的地址信息;
[0130] 步骤2、运算控制模块根据运算矩阵的地址信息得到分块信息,并将运算矩阵的地址信息和分块信息传输至运算模块;
[0131] 步骤3、运算模块根据运算矩阵的地址信息从数据存储模块提取运算矩阵;并根据分块信息将运算矩阵分成n个分块矩阵;
[0132] 步骤4、运算模块根据运算指令对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;
[0133] 步骤5、运算模块合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵并反馈至数据存储模块;
[0134] 其中,n为自然数。
[0135] 在一些实施例中,本实施例提出一种运算方法,用于执行大规模矩阵的转置运算,具体包括以下步骤:
[0136] 步骤1、运算控制模块从地址存储模块提取运算矩阵的地址信息,具体包括以下步骤:
[0137] 步骤1-1、取指单元提取运算指令,并将运算指令送至译码单元;
[0138] 步骤1-2、译码单元对运算指令进行译码,根据译码后的运算指令从地址存储模块获取运算矩阵的地址信息,并将译码后的运算指令和运算矩阵的地址信息送往依赖关系处理单元;
[0139] 步骤1-3、依赖关系处理单元分析该译码后的运算指令与前面的尚未执行结束的指令在数据上是否存在依赖关系;具体而言,所述依赖关系处理单元可根据运算指令所需读取的寄存器的地址,判断该寄存器是否存在待写入的情况,如有,则存在依赖关系,待数据写回后,才可执行该运算指令。
[0140] 若存在依赖关系,这条译码后的运算指令与相应的运算矩阵的地址信息需要在指令队列存储器中等待至其与前面的未执行结束的指令在数据上不再存在依赖关系为止;
[0141] 步骤2、运算控制模块根据运算矩阵的地址信息得到分块信息;
[0142] 具体的,依赖关系不存在后,指令队列存储器发射这条译码后的运算指令与相应的运算矩阵的地址信息至矩阵判断单元,判断矩阵是否需要进行分块,矩阵判断单元根据判断结果得到分块信息,并将分块信息和运算矩阵的地址信息传输至矩阵分块单元;
[0143] 步骤3、运算模块根据运算矩阵的地址信息从数据存储模块提取运算矩阵;并根据分块信息将运算矩阵分成n个分块矩阵;
[0144] 具体的,矩阵分块单元根据传入的运算矩阵的地址信息从数据存储模块中取出需要的运算矩阵,再根据传入的分块信息,将运算矩阵分成n个分块矩阵,完成分块后依次将每个分块矩阵传入到矩阵缓存单元;
[0145] 步骤4、运算模块根据译码得到的转置方式分别对n个分块矩阵进行转置运算,得到n个分块矩阵的转置矩阵;
[0146] 具体的,矩阵运算单元依次从矩阵缓存单元提取分块矩阵,并对每个提取的分块矩阵进行转置操作,再将得到的每个分块矩阵的转置矩阵传入到矩阵合并单元。
[0147] 步骤5、运算模块合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵,并将该转置矩阵反馈给数据存储模块,具体包括以下步骤:
[0148] 步骤5-1、矩阵合并单元接收每个分块矩阵的转置矩阵,当接收到的分块矩阵的转置矩阵数量达到总的分块数后,根据译码得到的转置方式对所有的分块进行矩阵合并操作,得到运算矩阵的转置矩阵;并将该转置矩阵反馈至数据存储模块的指定地址;
[0149] 步骤5-2、输入输出模块直接访问数据存储模块,从数据存储模块中读取运算得到的运算矩阵的转置矩阵。
[0150] 本公开还提供了另一种运算装置,包括:
[0151] 运算控制模块,用于接收或确定分块信息;
[0152] 迭代运算模块,用于根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵。
[0153] 在本公开的一些实施例中,如图9-10所示,本公开运算装置,包括地址存储模块、数据存储模块、所述运算控制模块和运算模块。
[0154] 其中,地址存储模块,用于存储运算矩阵的地址信息;
[0155] 数据存储模块,用于存储原始矩阵数据,并存储运算后的转置矩阵;
[0156] 运算控制模块,用于从地址存储模块提取运算矩阵的地址信息,并根据运算矩阵的地址信息分析得到分块信息;
[0157] 运算模块,为所述迭代运算模块3’,用于从运算控制模块获取运算矩阵的地址信息及分块信息,根据运算矩阵的地址信息从数据存储模块提取运算矩阵,并根据分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到运算矩阵的转置矩阵,并将运算矩阵的转置矩阵反馈至数据存储模块。
[0158] 本公开由于可以对运算矩阵进行迭代分块获得符合预期规模的待转置的分块矩阵,通过对多个分块矩阵分别进行转置运算得到多个分块矩阵的转置矩阵,最终对多个分块矩阵的转置矩阵进行迭代合并,得到运算矩阵的转置矩阵,因此可以实现使用一条单独指令在常数时间复杂度内完成任意大小矩阵的转置操作。相比较传统的矩阵转置操作实现方法,在降低操作时间复杂度的同时也使矩阵转置操作的使用更为简单高效。
[0159] 如图9所示,在本公开的一些实施例中,所述迭代运算模块包括迭代分块单元31’、矩阵运算单元32’和迭代合并单元33’。
[0160] 其中,如图11所示,迭代分块单元31’,用于从运算控制模块获取运算矩阵的地址信息及分块信息,并根据运算矩阵的地址信息从数据存储模块提取运算矩阵,根据分块信息对运算矩阵进行迭代分块运算得到n个分块矩阵,其包括矩阵判断单元311’、矩阵分块单元312’和缓存单元313’;矩阵分块单元根据分块信息对运算矩阵进行分块,分块之后,将分块矩阵发送至缓存单元;矩阵判断单元用于接收缓存单元发送的矩阵信息,对矩阵的规模进行判断;缓存单元可以将分块矩阵重新输入迭代分块单元的矩阵判断单元中,如仍有超过预定规模阈值M的分块矩阵,则需要对超出规定的最大规模的分块矩阵发送至矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均满足小于或等于预定规模阈值M的需求。
[0161] 如图12所示,矩阵运算单元32’,用于获取n个分块矩阵,并对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵,其包括地址映射生成单元321’、地址计数器322’和元素交换单元323’;地址映射生成单元用于根据输入的矩阵规模信息、地址信息、转置方式信息(矩阵转置指令译码所得)生成地址映射表;元素交换单元用于根据地址映射表进行矩阵相应位置元素的交换;计数器单元用于判断矩阵是否已经全部处理完毕。
[0162] 如图13所示,迭代合并单元33’,用于获取并迭代合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵,其中,n为自然数;具体的,用于接收并暂时缓存转置后的分块矩阵,待所有分块矩阵都进行完转置运算后,对n个分块矩阵的转置矩阵进行迭代合并运算,得到运算矩阵的转置矩阵;其包括缓存单元334’,地址映射生成单元331’、地址计数器332’、矩阵合并单元333’和矩阵判断单元335’;在矩阵运算单元完成所有分块矩阵的转置后,迭代合并单元的缓存单元接收并暂时缓存转置后的分块矩阵;矩阵合并单元接收所述转置后的分块矩阵并合并,地址映射生成单元和地址计数器将每个分块矩阵作为一个元素,进行如矩阵运算单元中所述的元素交换操作,即进行选中的分块矩阵的元素交换的批处理操作,然后利用矩阵判断单元,确保合并至最初未分块的规模。
[0163] 本实施例中,迭代合并单元还可以包括元素交换单元,也就是对应地址下逐元素交换,也可以包括内存交换单元,即将对应地址下的矩阵块(已被转置好的小矩阵块)批量交换。
[0164] 本实施例中,运算模块中也可以不包括矩阵判断单元,在矩阵分块单元、矩阵合并单元进行迭代分块、迭代合并时直接通过所述运算控制模块包括的矩阵判断单元进行矩阵规模判断。
[0165] 本实施例中迭代分块单元、迭代合并单元及矩阵运算单元的结构不限于图11-13所示结构。换句话说,所述计算装置中的矩阵判断单元既可以非共享使用也可以共享使用,所述运算模块中可以包括地址映射生成单元、地址计数器、元素交换单元、缓存单元,而且这些单元既可以非共享使用也可以共享使用,不限于迭代分块单元、迭代合并单元中均分别包括地址映射生成单元、地址计数器、元素交换单元、缓存单元。
[0166] 需要说明的是,由于矩阵转置和矩阵合并在时序上是分开的,即所有分块都进行转置操作之后,此时运算单元的相应装置空闲,这时进行矩阵合并可以复用相应单元。但若应用于流水线,例如三级流水,此时当一矩阵进行完矩阵转置即将进入矩阵合并单元时,下一个待转置矩阵的分块进入运算单元,下下个待转置矩阵进入矩阵分块单元,即分块、运算、合并三个单元均被占用,因此,此时分块单元、转置单元和合并单元的任意小模块均不可复用。
[0167] 相应的,本公开还提供了一种运算方法,包括以下步骤:
[0168] 运算控制模块接收或确定分块信息;
[0169] 迭代运算模块根据所述分块信息对运算矩阵进行迭代分块、转置及迭代合并运算,得到所述运算矩阵的转置矩阵。
[0170] 在一些实施例中,所述运算方法包括:
[0171] 运算控制模块从地址存储模块提取运算矩阵的地址信息;
[0172] 运算控制模块根据运算矩阵的地址信息得到分块信息,并将运算矩阵的地址信息和分块信息传输至运算模块;
[0173] 运算模块根据运算矩阵的地址信息从数据存储模块提取运算矩阵;并根据分块信息将运算矩阵迭代分成n个符合转置要求规模的分块矩阵;
[0174] 运算模块对n个分块矩阵分别进行转置运算,得到n个分块矩阵的转置矩阵;运算模块迭代合并n个分块矩阵的转置矩阵,得到运算矩阵的转置矩阵并反馈至数据存储模块;其中,n为自然数。
[0175] 在所述迭代分块单元根据分块信息对运算矩阵进行迭代分块运算的步骤中:
[0176] 矩阵分块单元根据分块信息对运算矩阵进行分块并将分块矩阵发送至缓存单元;
[0177] 缓存单元将分块矩阵输入至矩阵判断单元,经所述矩阵判断单元判断若有超过预定规模阈值M的分块矩阵,则将其发送至所述矩阵分块单元继续进行分块操作,如是迭代,直至任一分块矩阵的规模均小于或等于所述预定规模阈值M。
[0178] 在所述迭代运算模块的迭代合并单元获取并迭代合并所述n个分块矩阵的转置矩阵的步骤中:
[0179] 缓存单元接收转置后的分块矩阵;
[0180] 矩阵合并单元接收所述缓存单元发送的转置后的分块矩阵并合并;
[0181] 地址映射生成单元和元素交换单元将合并后的矩阵中的每个分块矩阵作为一个元素,进行元素交换操作;
[0182] 矩阵判断单元确定合并得到的矩阵的规模。
[0183] 在前述实施例中,所述分块信息可以由地址信息分析得到,也可以由输入数据中直接获取,也即运算控制模块的输入数据中包括了分块信息
[0184] 以下对本公开运算装置中涉及的各组成部分进一步详细说明:
[0185] 取指单元,该单元负责从指令缓存单元中取出下一条将要执行的运算指令,并将该运算指令传给译码单元;
[0186] 译码单元,该单元负责对运算指令进行译码,并将译码后的运算指令发送至标量寄存器堆,得到标量寄存器堆反馈的运算矩阵的地址信息,将译码后的运算指令和得到的运算矩阵的地址信息传输给依赖关系处理单元;
[0187] 依赖关系处理单元,该单元处理运算指令与前一条指令可能存在的存储依赖关系。矩阵运算指令会访问高速暂存存储器,前后指令可能会访问同一块存储空间。为了保证指令执行结果的正确性,当前运算指令如果被检测到与之前的运算指令的数据存在依赖关系,该运算指令必须缓存至指令队列存储器内等待至依赖关系被消除;如当前运算指令与之前的运算指令不存在依赖关系,则依赖关系处理单元直接将运算矩阵的地址信息和译码后的运算指令传输至矩阵判断单元。
[0188] 指令队列存储器,考虑到不同运算指令所对应的/指定的标量寄存器上有可能存在依赖关系,用于缓存存在冲突的译码后的运算指令和相应的运算矩阵的地址信息,当依赖关系被满足之后发射译码后的运算指令和相应的运算矩阵的地址信息至矩阵判断单元;
[0189] 矩阵判断单元,用于根据运算矩阵的地址信息判断矩阵大小,如果超过预定规模阈值M,则需要对矩阵进行分块操作,矩阵判断单元根据此判断结果分析得到分块信息,并将运算矩阵的地址信息和得到的分块信息传输至矩阵分块单元。
[0190] 矩阵分块单元,该单元负责根据运算矩阵的地址信息,从高速暂存器中提取需进行转置运算的运算矩阵,并根据分块信息对该运算矩阵进行分块,得到n个分块矩阵。矩阵缓存单元,该单元用于缓存经过分块后的n个分块矩阵,依次传输至矩阵运算单元进行转置运算;
[0191] 矩阵运算单元,负责依次从矩阵缓存单元中提取分块矩阵根据译码单元获得的矩阵转置方式进行转置运算,并将转置后的分块矩阵传输至矩阵合并单元;
[0192] 矩阵合并单元,负责接收并暂时缓存转置后的分块矩阵,待所有分块矩阵都进行完转置运算后,根据译码单元获得的矩阵转置方式对n个分块矩阵的转置矩阵进行合并运算,得到运算矩阵的转置矩阵。
[0193] 标量寄存器堆,提供装置在运算过程中所需的标量寄存器,为运算提供运算矩阵的地址信息;
[0194] 高速暂存暂存器,该模块是矩阵数据专用的暂存存储装置,能够支持不同大小的矩阵数据。
[0195] IO内存存取模块,该模块用于直接访问高速暂存存储器,负责从高速暂存存储器中读取数据或写入数据。
[0196] 需要说明的是,本公开运算装置和运算方法,运算控制模块可直接接收所述运算矩阵的地址信息和分块信息,或者用于从所述地址存储模块提取所述运算矩阵的地址信息,并根据所述运算矩阵的地址信息分析得到分块信息。
[0197] 此外,在一些实施例里,本公开还提供了一种芯片,其包括了上述运算装置。
[0198] 在一些实施例里,本公开还提供了一种芯片封装结构,其包括了上述芯片。
[0199] 在一些实施例里,本公开还提供了一种板卡,其包括了上述芯片封装结构。
[0200] 在一些实施例里,本公开还提供了一种电子设备,其包括了上述板卡。
[0201] 电子设备包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
[0202] 所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
[0203] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。
[0204] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0205] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
[0206] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0207] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
[0208] 所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0209] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
[0210] 以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。