法律状态公告日
法律状态信息
法律状态
2019-06-14
授权
授权
2018-12-14
实质审查的生效 IPC(主分类):G06F8/30 申请日:20180529
实质审查的生效
2018-11-20
公开
公开
技术领域
本发明涉及GPDSP(General-Purpose Digital Signal Processor,通用计算数字信号处理器)技术领域,尤其涉及一种基于GPDSP的稠密矩阵乘法向量化汇编代码生成方法。
背景技术
基本线性代数算法库(Basic Linear Algebra Subroutines,BLAS)是各类科学计算最常用的核心数学算法库之一,工业界针对各自的处理器平台都推出了高度优化的BLAS实现,如IBM的ESSL、Intel的MKL、AMD的ACML等。其中,稠密矩阵乘法(General Matrix-Matrix Multiplication,GEMM)是BLAS库的核心算法,GEMM是典型的计算密集和访存密集型应用,对处理器的运算能力、访存带宽及延迟要求非常高,GEMM计算占据高性能基准测试程序(High Performance Linpack,HPL)运算量通常达90%以上。因此,针对处理器的体系结构特点研究GEMM优化方法对评测该处理器的计算效率、发挥处理器的计算优势和提高应用程序的运行速度均具有很重要的参考价值。
虽然从理论上来说编译器是实现性能优化最理想的解决方案,因为源代码并不需要重新编写,但是编译器的技术进步远远赶不上硬件的发展速度,即使是简单的计算问题,编译器往往产生低效率的代码,例如,由编译器生成的稠密矩阵乘法代码比手工优化编写的代码慢好几倍。通常高性能库函数都是采用手工汇编精心优化,然而新处理器平台的更新与发布使得手工编写的代码需要重新实现和优化,这仍然需要耗费大量的工作量,复杂度及成本高。
GPDSP作为一种异构多核处理器,它包含CPU核单元和DSP核单元,其中CPU核单元主要用于负责包括存储管理、文件控制、进程调度、中断管理任务在内的通用事务管理以及提供对通用操作系统的完整支持;DSP核单元包含若干具有强大计算能力的64位向量处理阵列,用于支持高密集运算任务的解算,DSP核包含标、向量寄存器文件,标量L1D、向量阵列存储、片内共享存储以及外部DDR存储等复杂的多级存储结构。而复杂的体系结构对高效代码的生成带来巨大的挑战,通过编译器产生的库函数汇编代码很难实现各级存储间的高效数据访问和传递,传统的面向Cache结构的分块矩阵乘法方法也不适合GPDSP的非Cache的向量阵列存储访存模式和向量处理阵列并发向量处理的体系结构特征,难以发挥GPDSP向量计算优势。
目前对实时性要求高的应用系统所调用的高性能库函数,通常都是用手工汇编精心优化,如何针对GPDSP复杂的体系结构特征快速生成高效的库函数汇编代码是当前面临的一个巨大挑战,而其中基于GPDSP架构实现稠密矩阵乘法的向量化汇编代码生成是亟待解决的问题。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种具有实现原理简单、操作简便、使用灵活、能够实现代码自动化生成,且生成效率及性能高的基于GPDSP的稠密矩阵乘法向量化汇编代码生成方法。
为解决上述技术问题,本发明提出的技术方案为:
一种基于GPDSP的稠密矩阵乘法向量化汇编代码生成方法,步骤包括:
S1. 构建用于实现不同任务的多个核心模板,包括用于实现子块矩阵乘法的GEMM_kernel模块、用于实现数据传输的DMA_Translate模块、用于检测DMA中数据搬移是否搬移完毕所对应的寄存器标志位的DMA_POLL模块以及用于执行循环过程的LOOP模块,各模板包括所需参数的参数列表;
S2. 构建稠密矩阵乘法的框架模板,所述框架模板中分别使用所述GEMM_kernel模块、DMA_Translate模块、DMA_POLL模块以及LOOP模块,以实现稠密矩阵乘法;
S3. 使用预先构建的汇编代码生成模块 Gen_GEMM将所述框架模板中各核心模块转换为汇编代码,最终生成所需的稠密矩阵乘法汇编代码。
作为本发明的进一步改进:所述GEMM_kernel模块的参数列表包括4个输入参数,其中第1参数为调用结束的返回地址,第2参数为A子块矩阵数据地址,第3参数为B子块矩阵数据地址,第4参数为C子块矩阵数据地址;构建所述GEMM_kernel模块时,以上述参数为输入进行汇编代码设置,实现稠密矩阵乘法对应的子块矩阵乘法任务,并在完成任务后跳转到第1参数传递的程序地址。
作为本发明的进一步改进:所述DMA_Translate模块的参数列表包括11个输入参数,其中第1参数为调用结束的返回地址,第2参数为DMA逻辑通道号,第3参数为逻辑通道优先级,第4参数为传输模式控制参数字1,第5参数为传输模式控制参数字2,第6参数为源地址,第7参数为源计数,第8参数为目的地址,第9参数为目的计数,第10参数为源/目的索引,第11参数为块索引;构建所述DMA_Translate模块时,以上述参数为输入进行汇编代码设置,实现源地址到目的地址的数据传输任务,并在任务完成后跳转到第1参数传递的程序地址。
作为本发明的进一步改进:所述DMA_POLL模块的参数列表包括2个输入参数,其中第1参数为调用结束的返回地址,第2参数为DMA逻辑通道号;构建所述DMA_POLL模块时,以上述参数为输入进行汇编代码设置,实现DMA逻辑通道号为第2参数的数据搬移是否搬移完毕的相应寄存器标志位检测任务,并任务完成后跳转到第1参数传递的程序地址。
作为本发明的进一步改进:所述LOOP模块的参数列表包括3个输入参数,其中第1参数为循环计数所用寄存器,第2参数为循环计数初始值,第3参数为每次循环的计数变化值。
作为本发明的进一步改进,当基于GPDSP架构计算的稠密矩阵乘法运算为C=C-A*B,其中A为M×K阶的矩阵,B为K×N阶的矩阵,C为M×N阶的矩阵,矩阵的M、K、N三个维数对应的分块大小分别标记为MB、KB、NB,令mi=M/MB,ki=K/ KB,ni=N/NB时,所述步骤S2中具体按如下步骤构建得到稠密矩阵乘法的框架模板:
步骤1:开启K维分块循环计算,设定计数器寄存器R0,计数器初始值为ki,每次循环计数器减1,直到计数器值为0;
步骤2:开启M维分块循环计算,设定计数器寄存器R1,计数器初始值为mi,每次循环计数器减1,直到计数器值为0,其中使用所述LOOP模块执行循环过程,循环计算过程中分别使用所述DMA_Translate模块传输A、B、C矩阵至数据缓冲区,使用所述DMA_POLL模块等待数据传输完毕,以及使用所述GEMM_kernel模块进行A、B、C矩阵子块的计算;
步骤3:判断计数器R1是否为0,若不是返回执行步骤2,若是转入执行步骤4;
步骤4:判断计数器R0是否为0,若不是返回执行步骤1,若是完成当前计算。
作为本发明的进一步改进,所述步骤2的具体步骤为:
步骤2.1:依次使用所述DMA_Translate模块传输A矩阵的一个子块MBxKB至标量L1D的数据缓冲区Abuf;
步骤2.2:使用所述DMA_POLL模块等待数据缓冲区Abuf数据传输完毕;
步骤2.3:分别使用所述DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf0,Cbuf0;
步骤2.4:分别使用所述DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf1,Cbuf1;
步骤2.5:开启N维分块循环计算,设定计数器寄存器R2,计数器初始值为ni-2,每次循环计数器减2,直到计数器值为0;
步骤2.6:分别使用所述DMA_POLL模块等待数据缓冲区Bbuf0,Cbuf0,Out0数据传输完毕;
步骤2.7:使用所述GEMM_kernel模块对数据缓冲区Abuf,Bbuf0,Cbuf0的A、B、C矩阵子块进行计算;
步骤2.8:使用所述DMA_Translate模块传输上述计算结果至外部存储区Out0;
步骤2.9:分别使用所述DMA_POLL模块等待数据缓冲区Bbuf1,Cbuf1,Out1数据传输完毕;
步骤2.10:使用所述GEMM_kernel模块对数据缓冲区Abuf,Bbuf1,Cbuf1的A、B、C矩阵子块进行计算;
步骤2.11:使用所述DMA_Translate模块传输上述计算结果至外部存储区Out1。
作为本发明的进一步改进,所述步骤2.5的具体步骤为:
步骤2.5.1:分别使用所述DMA_POLL模块等待数据缓冲区Bbuf0,Cbuf0,Out0数据传输完毕;
步骤2.5.2:使用所述GEMM_kernel模块对数据缓冲区Abuf,Bbuf0,Cbuf0的A、B、C矩阵子块进行计算;
步骤2.5.3:使用所述DMA_Translate模块传输上述计算结果至外部存储区Out0;
步骤2.5.4:分别使用所述DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf0,Cbuf0;
步骤2.5.5:分别使用所述DMA_POLL模块等待数据缓冲区Bbuf1,Cbuf1,Out1数据传输完毕;
步骤2.5.6:使用所述GEMM_kernel模块对数据缓冲区Abuf,Bbuf1,Cbuf1的A、B、C矩阵子块进行计算;
步骤2.5.7:使用所述DMA_Translate模块传输上述计算结果至外部存储区Out1;
步骤2.5.8:分别使用所述DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf1,Cbuf1;
步骤2.5.9:判断计数器R2是否为0,若不为0返回执行步骤2.5.1,若为0转入执行步骤2.6。
作为本发明的进一步改进:所述汇编代码生成模块 Gen_GEMM根据目标核心模板的类型以及对应的参数列表生成目标核心模板的汇编代码。
与现有技术相比,本发明的优点在于:
1、本发明基于GPDSP的体系结构特征,通过构建多个实现不同任务的核心模块,基于各核心模块构建稠密矩阵乘法的框架模板,模板中包含多个核心模块表示和相应的参数列表,由各核心模块实现对应的任务,再基于该模板通过预先构建的汇编代码生成模块 Gen_GEMM进行汇编代码转换,通过汇编代码生成模块 Gen_GEMM根据框架模板中包含的核心模块表示和相应的输入参数列表自动生成对应的汇编代码,最终生成所需的向量化汇编代码,能够实现基于GPDSP架构的稠密矩阵乘法向量化汇编代码自动生成。
2、本发明实现原理简单、操作方便,能够适用于GPDSP架构快速获得高度优化的高性能稠密矩阵乘法库函数汇编代码,实现软件流水、指令并行、向量化等核心汇编优化并参数化,且无需关注底层硬件实现,且便于库函数汇编代码的维护,当需更新时,只需要更新模板中包含的核心模块表示及相应的参数列表,能够避免后续的IP化中涉及向量计算核心数量需要适应不同应用时导致库函数汇编代码全部需要重新向量化和优化
3、本发明既能够快速获得高度优化的高性能稠密矩阵乘法库函数汇编代码,能够充分发挥DSP核的强大向量化计算能力,同时对用户屏蔽底层硬件实现细节,极大减轻了程序员对底层硬件实现技术熟悉要求以及维护库函数汇编代码的负担,当内核更新需实现更新优化核心模块功能或者扩展新的核心模块功能时,仅需更新模板重新生成就能够自动获得新的优化库函数汇编代码,从而能够避免后续的IP化中涉及向量计算核心数量需要适应不同应用而导致的库函数汇编代码全部需要重新向量化和优化等问题。
附图说明
图1是本实施例基于GPDSP的稠密矩阵乘法向量化汇编代码生成方法的实现流程示意图。
图2是本实施例稠密矩阵乘法向量化汇编代码生成的实现原理示意图;
图3是本实施例中稠密矩阵乘法框架模板实现稠密矩阵乘法计算的实现流程示意图。
图4是本发明具体应用实施例中对循环模块生成汇编代码的实现原理示意图。
图5是本发明具体应用实施例中对DMA_Translate核心模块生成汇编代码的实现原理示意图;
图6是本发明具体应用实施例中对DMA_POLL核心模块生成汇编代码的实现原理示意图;
图7是本发明具体应用实施例中对GEMM_kernel核心模块生成汇编代码的实现原理示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1、2所示,本实施例基于GPDSP的稠密矩阵乘法向量化汇编代码生成方法,步骤包括:
S1. 构建用于实现不同任务的多个核心模板,包括用于实现子块矩阵乘法的GEMM_kernel模块、用于实现数据传输的DMA_Translate模块、用于检测DMA中数据搬移是否搬移完毕所对应的寄存器标志位的DMA_POLL模块以及用于执行循环过程的LOOP模块,各模板包括所需参数的参数列表;
S2. 构建稠密矩阵乘法的框架模板,框架模板中分别使用GEMM_kernel模块、DMA_Translate模块、DMA_POLL模块以及LOOP模块,以实现稠密矩阵乘法;
S3. 使用预先构建的汇编代码生成模块 Gen_GEMM将框架模板中各核心模块转换为汇编代码,最终生成所需的稠密矩阵乘法汇编代码。
本实施例基于GPDSP的体系结构特征,通过构建多个实现不同任务的核心模块,基于各核心模块构建稠密矩阵乘法的框架模板,模板中包含多个核心模块表示和相应的参数列表,由各核心模块实现对应的任务,再基于该模板通过预先构建的汇编代码生成模块 Gen_GEMM进行汇编代码转换,通过汇编代码生成模块 Gen_GEMM根据框架模板中包含的核心模块表示和相应的输入参数列表自动生成对应的汇编代码,最终生成所需的向量化汇编代码,实现基于GPDSP架构的稠密矩阵乘法向量化汇编代码自动生成。
本实施例上述代码生成方法,原理简单、操作方便,能够适用于GPDSP架构,快速获得高度优化的高性能稠密矩阵乘法库函数汇编代码,无需关注底层硬件实现,且便于库函数汇编代码的维护,当需更新时,只需要更新模板中包含的核心模块表示及相应的参数列表,能够避免后续的IP化中涉及向量计算核心数量需要适应不同应用时导致的库函数汇编代码全部需要重新向量化和优化等问题。
本实施例所需实现的基于GPDSP架构的稠密矩阵乘法运算为C=C-A*B,其中A为M×K阶的矩阵,B为K×N阶的矩阵,C为M×N阶的矩阵;设矩阵的M、K、N三个维数对应的分块大小分别标记为MB、KB、NB,令mi=M/MB,ki=K/ KB,ni=N/NB,假定mi,ki是整数,ni是偶数。
为实现上述稠密矩阵乘法运算C=C-A*B,本实施例首先构建子块矩阵乘法核心模块,使用GEMM_kernel模块表示,即GEMM_kernel模块,GEMM_kernel模块对应的参数列表包括4个输入参数,其中第1参数为调用结束的返回地址,第2参数为A子块矩阵数据地址,第3参数为B子块矩阵数据地址,第4参数为C子块矩阵数据地址;构建GEMM_kernel模块时,以上述参数为输入进行汇编代码设置,实现稠密矩阵乘法C=C-A*B对应的子块矩阵乘法任务,并在完成任务后跳转到第1参数传递的程序地址,实现的GEMM_kernel核心模块汇编代码具体保存为独立的文件GEMM_kernel.s。
构建数据传输核心模块,使用DMA_Translate模块表示,即DMA_Translate模块,DMA_Translate核心模块对应的参数列表包括11个输入参数,其中第1参数为调用结束的返回地址,第2参数为DMA逻辑通道号,第3参数为逻辑通道优先级,第4参数为传输模式控制参数字1,第5参数为传输模式控制参数字2,第6参数为源地址,第7参数为源计数,第8参数为目的地址,第9参数为目的计数,第10参数为源/目的索引,第11参数为块索引;构建DMA_Translate模块时,以上述参数为输入进行汇编代码设置,通过DMA实现源地址到目的地址的数据传输任务,并在任务完成后跳转到第1参数传递的程序地址,实现的DMA_Translate核心模块汇编代码具体保存为独立的文件DMA_Translate.s。
构建数据搬移标志位检测核心模块,使用DMA_POLL模块表示,即DMA_POLL模块,DMA_POLL模块对应的参数列表包括2个输入参数,其中第1参数为调用结束的返回地址,第2参数为DMA逻辑通道号;构建DMA_POLL模块时,以上述参数为输入进行汇编代码设置,实现DMA逻辑通道号为第2参数的数据搬移是否搬移完毕的相应寄存器标志位检测任务,并任务完成后跳转到第1参数传递的程序地址,实现的DMA_POLL核心模块汇编代码具体保存为独立的文件DMA_POLL.s。
构建循环模块,使用配对的LOOP、END表示,其中LOOP表示循环开始、END表示配对的循环结束,即LOOP模块,LOOP模块对应的参数列表包括3个输入参数,其中第1参数为循环计数所用寄存器,第2参数为循环计数初始值,第3参数为每次循环的计数变化值。
构建得到上述各核心模块后,即可由上述各核心模块共同构建一个基于GPDSP架构的稠密矩阵乘法框架模板。本实施例根据GPDSP的多级存储体系结构特征,步骤S2按照稠密矩阵乘法的执行流程组合多个核心模块构成分块稠密矩阵乘法计算框架模板,模板中包括多个核心模块功能表示和参数列表,以实现高效的分块稠密矩阵乘法计算;步骤S3再利用汇编代码生成模块Gen_GEMM根据模板中包含的核心模块表示、相应的输入参数列表和核心模块汇编代码文件自动生成稠密矩阵乘法汇编代码,完成稠密矩阵乘法的向量化代码自动生成。
如图3所示,本实施例步骤S2中具体按如下步骤构建得到稠密矩阵乘法的框架模板:
步骤1:开启K维分块循环计算,设定计数器寄存器R0,计数器初始值为ki,每次循环计数器减1,直到计数器值为0;
步骤2:开启M维分块循环计算,设定计数器寄存器R1,计数器初始值为mi,每次循环计数器减1,直到计数器值为0,其中使用LOOP模块执行循环过程,循环计算过程中分别使用DMA_Translate模块传输A、B、C矩阵至数据缓冲区,使用DMA_POLL模块等待数据传输完毕,以及使用GEMM_kernel模块进行A、B、C矩阵子块的计算,其中DMA_Translate模块表示为数据传输核心模块, DMA_POLL模块表示为数据搬移标志位检测核心模块,GEMM_kernel模块表示为子块矩阵乘法核心模块;
步骤3:判断计数器R1是否为0,若不是返回执行步骤2,若是转入执行步骤4;
步骤4:判断计数器R0是否为0,若不是返回执行步骤1,若是完成当前计算。
本实施例中,步骤2实现M维分块循环计算的具体步骤为:
步骤2.1:依次使用DMA_Translate模块传输A矩阵的一个子块MBxKB至标量L1D的数据缓冲区Abuf;
步骤2.2:使用DMA_POLL模块等待Abuf数据传输完毕;
步骤2.3:分别使用DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf0,Cbuf0;
步骤2.4:分别使用DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf1,Cbuf1;
步骤2.5:开启N维分块循环计算,设定计数器寄存器R2,计数器初始值为ni-2,每次循环计数器减2,直到计数器值为0;
步骤2.6:分别使用DMA_POLL模块等待Bbuf0,Cbuf0,Out0数据传输完毕;
步骤2.7:使用GEMM_kernel模块对Abuf,Bbuf0,Cbuf0的A、B、C矩阵子块进行计算;
步骤2.8:使用DMA_Translate模块传输上述计算结果至外部存储区Out0;
步骤2.9:分别使用DMA_POLL模块等待Bbuf1,Cbuf1,Out1数据传输完毕;
步骤2.10:使用GEMM_kernel模块对Abuf,Bbuf1,Cbuf1的A、B、C矩阵子块进行计算;
步骤2.11:使用DMA_Translate模块传输上述计算结果至外部存储区Out1。
本实施例中,步骤2.5执行N维分块循环计算的具体步骤为:
步骤2.5.1:分别使用DMA_POLL模块等待Bbuf0,Cbuf0,Out0数据传输完毕;
步骤2.5.2:使用GEMM_kernel模块对Abuf,Bbuf0,Cbuf0的A、B、C矩阵子块进行计算;
步骤2.5.3:使用DMA_Translate模块传输上述计算结果至外部存储区Out0;
步骤2.5.4:分别使用DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf0,Cbuf0;
步骤2.5.5:分别使用DMA_POLL模块等待Bbuf1,Cbuf1,Out1数据传输完毕;
步骤2.5.6:使用GEMM_kernel模块对Abuf,Bbuf1,Cbuf1的A、B、C矩阵子块进行计算;
步骤2.5.7:使用DMA_Translate模块传输上述计算结果至外部存储区Out1;
步骤2.5.8:分别使用DMA_Translate模块传输B、C矩阵的一个子块KBxNB,MBxNB至向量阵列存储的数据缓冲区Bbuf1,Cbuf1;
步骤2.5.9:判断计数器R2是否为0,若不为0返回执行步骤2.5.1,若为0转入执行步骤2.6。
通过上述稠密矩阵乘法的框架模板,能够结合GPDSP的结构体系特征实现高效的分块稠密矩阵乘法计算,且模板中通过使用构建的各核心模块实现不同任务,后续结合汇编代码生成模块Gen_GEMM即可快速获得高度优化的高性能稠密矩阵乘法库函数汇编代码,无需关注底层硬件实现细节,当需要更新优化或扩展时,仅需更新模板就能够自动获得更新的优化库函数汇编代码。
本实施例中,汇编代码生成模块 Gen_GEMM具体根据目标核心模板的类型以及对应的参数列表生成目标核心模板的汇编代码。
如图4所示,本发明在具体应用实施例中汇编代码生成模块Gen_GEMM对循环模块生成汇编代码具体为:
模板中的循环模块和输入参数列表表示如下:
LOOP(Ri,count,len)
……
END
则Gen_GEMM将上述循环模块生成如下汇编代码:
LOOP_Ri:
SMOVI count, Ri
……
[Ri] SBR LOOP_Ri
[Ri] SSUB1en, Ri, Ri
SNOP4
如图5所示,本发明在具体应用实施例汇编代码生成模块Gen_GEMM对DMA_Translate核心模块生成汇编代码具体为:
模板中的DMA_Translate模块和输入参数列表表示如下:
DMA_Translate (para1,para2,para3,para4,para5,para6,para7,para8,para9,para10,para11)
则Gen_GEMM将上述DMA_Translate模块生成如下汇编代码:
SBR DMA_Translate
SMOVI para1, R63
|SMOVI.M1para2, R62
|SMOVI.M2para3, R61
SMOVI para4, R60
|SMOVI.M1para5, R59
|SMOVI.M2para6, R58
SMOVI para7, R67
|SMOVI.M1para8, R56
|SMOVI.M2para9, R55
SMOVI para10,R54
SMOVI.M1para11,R53
若DMA_Translate表示是在模板中首次出现,则将DMA_Translate.s文件的代码插入到待生成汇编文件尾部。
如图6所示,本发明具体实施例中汇编代码生成模块Gen_GEMM对DMA_POLL核心模块生成汇编代码具体为:
模板中的DMA_POLL模块和输入参数列表表示如下:
DMA_POLL (para1,para2)
则Gen_GEMM将上述DMA_POLL模块生成如下汇编代码:
SBR DMA_POLL
SMOVI para1, R63
SMOVI para2, R62
SNOP4
若DMA_POLL表示是在模板中首次出现,则将DMA_POLL.s文件的代码插入到待生成汇编文件尾部。
如图7所示,本发明在具体应用实施例中汇编代码生成模块Gen_GEMM对GEMM_kernel核心模块生成汇编代码具体为:
模板中的GEMM_kernel模块和输入参数列表表示如下:
GEMM_kernel (para1,para2, para3,para4)
则Gen_GEMM将上述GEMM_kernel模块生成如下汇编代码:
SBR GEMM_kernel
SMOVI para1, R63
SMOVI para2, R62
SMOVI para3, R61
SMOVI para4, R60
SNOP2
若GEMM_kernel表示是在模板中首次出现,则将GEMM_kernel.s文件的代码插入到待生成汇编文件尾部。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
机译: 通过基于汇编程序测试程序的目标代码生成存储器测试模式来测试嵌入在包括微处理器在内的集成电路芯片中的存储器
机译: 早期插入汇编语言代码生成宏以进行优化的方法和装置
机译: 目标处理器的汇编代码生成器的设计方法