CN112184536B - 基于gemm处理图像数据的方法、装置、设备和介质 - Google Patents
基于gemm处理图像数据的方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN112184536B CN112184536B CN202011016965.1A CN202011016965A CN112184536B CN 112184536 B CN112184536 B CN 112184536B CN 202011016965 A CN202011016965 A CN 202011016965A CN 112184536 B CN112184536 B CN 112184536B
- Authority
- CN
- China
- Prior art keywords
- image data
- operand
- register
- registers
- assembly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本公开提供了一种基于GEMM处理图像数据的方法、装置、设备和介质。所述方法包括:获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列;对所述汇编指令集进行分析,得到指令集分析结果;根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器;读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列。本公开提供的方法由于不是通常所采用的在处理图像数据的同时分配寄存器,而是在对指定针对图像数据的预定操作序列的汇编指令集分析之后统一分配寄存器,从而提高了GPU对图像数据的处理速度,并且合理利用了存储资源。
Description
技术领域
本公开涉及图像处理技术,更具体地,涉及基于通用矩阵乘法GEMM处理图像数据的方法、装置、设备和介质。
背景技术
图形处理器(GPU)主要用于对图形或图像数据进行处理,其中通用矩阵乘法(General Matrix to Matrix Multiplication,GEMM)是GPU编程中最重要的模块,而目前的GEMM模块在对图像数据进行处理时,是在处理图像数据的同时分配寄存器,这将存在重复分配寄存器和频繁释放寄存器等问题,进而导致GPU对图像数据的处理速度慢、占用不必要的存储资源。
因此,需要一种提高GPU对图像数据的处理速度,并且合理利用存储资源的方法。
发明内容
本公开的实施例提供了一种基于通用矩阵乘法GEMM处理图像数据的方法,包括:获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列;对所述汇编指令集进行分析,得到指令集分析结果;根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器;以及读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列。
根据本公开的实施例,所述汇编指令集包括自定义的汇编指令,所述自定义的汇编指令位于所述预定操作序列的每一操作的起始位置。
根据本公开的实施例,所述自定义的汇编指令包括汇编字符串和操作数约束条件。
根据本公开的实施例,对所述汇编指令集进行分析包括:解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。
根据本公开的实施例,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器包括:在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
根据本公开的实施例,利用所分配的寄存器对所述图像数据执行所述预定操作序列包括:将图像数据的第一矩阵块和第二矩阵块加载到内存中;将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;将通过逻辑运算操作获得的结果矩阵存回内存中。
本公开的实施例提供了一种基于通用矩阵乘法GEMM处理图像数据的装置,包括:获取模块,被配置为获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列;分析模块,被配置为对所述汇编指令集进行分析,得到指令集分析结果;分配模块,被配置为根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器;以及执行模块,被配置为读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列。
根据本公开的实施例,所述汇编指令集包括自定义的汇编指令,所述自定义的汇编指令位于所述预定操作序列的每一操作的起始位置。
根据本公开的实施例,所述自定义的汇编指令包括汇编字符串和操作数约束条件。
根据本公开的实施例,对所述汇编指令集进行分析包括:解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。
根据本公开的实施例,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器包括:在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
根据本公开的实施例,利用所分配的寄存器对所述图像数据执行所述预定操作序列包括:将图像数据的第一矩阵块和第二矩阵块加载到内存中;将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;将通过逻辑运算操作获得的结果矩阵存回内存中。
本公开的实施例提供了一种基于通用矩阵乘法GEMM处理图像数据的设备,包括:处理器,和存储器,所述存储器存储有计算机可执行指令,所述计算机可执行指令当由处理器执行时促使处理器执行如上所述的方法。
本公开的实施例提供了一种计算机可读记录介质,存储有计算机可执行指令,其中,所述计算机可执行指令当由处理器执行时促使处理器执行如上所述的方法。
本公开的实施例提供了一种基于GEMM处理图像数据的方法、装置、设备和介质。本公开的所述方法、装置、设备和介质由于是在对指定针对图像数据的预定操作序列的汇编指令集进行分析之后,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器并利用所分配的寄存器对所述图像数据执行所述预定操作序列,而不是通常所采用的在处理图像数据的同时分配寄存器,因此,提高了GPU对图像数据的处理速度,并且合理利用存储资源。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本公开的一些示例性实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出了根据本公开的实施例的基于GEMM处理图像数据的方法的流程图。
图2示出了根据本公开的实施例的分配用于执行预定操作序列的寄存器的流程图。
图3示出了根据本公开的实施例的针对图像数据的预定操作序列的流程图。
图4示出了根据本公开的实施例的基于GEMM处理图像数据的装置的框图。
具体实施方式
为了使得本公开的目的、技术方案和优点更为明显,下面将参考附图详细描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。
在本说明书和附图中,基本上相同或相似的步骤和元素用相同或相似的附图标记来表示,并且对这些步骤和元素的重复描述将被省略。同时,在本公开的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性或排序。
在本说明书和附图中,根据实施例,元素以单数或复数的形式来描述。然而,单数和复数形式被适当地选择用于所提出的情况仅仅是为了方便解释而无意将本公开限制于此。因此,单数形式可以包括复数形式,并且复数形式也可以包括单数形式,除非上下文另有明确说明。
目前基于GEMM对图像数据进行处理时,均是在执行汇编指令集中的每一条汇编指令的同时分配相应的寄存器,若是不同的汇编指令里有相同的变量会多次分配寄存器,在分配的寄存器使用完后会释放寄存器,这将导致出现重复分配寄存器和频繁释放寄存器等问题,从而使得GPU对图像数据的处理速度慢、占用不必要的存储资源。
为了解决上述问题,本公开提供了一种基于GEMM处理图像数据的方法,本公开的方法通过先对指定针对图像数据的预定操作序列的汇编指令集进行分析,然后根据分析结果来统一分配寄存器,从而避免了重复分配寄存器和频繁释放寄存器等问题的出现,提高了GPU对图像数据的处理速度,并且合理利用了存储资源。
下面将参照附图对本公开的方法和装置进行详细的描述。
图1示出了根据本公开的实施例的基于GEMM处理图像数据的方法(以下,为描述方便,将其简称为“图像数据处理方法”)的流程图。
参照图1,在S110,获取汇编指令集。这里,所述汇编指令集可以指定针对图像数据的预定操作序列。
根据本公开实施例,所述汇编指令集可以包括自定义的汇编指令,所述自定义的汇编指令可以位于所述预定操作序列的每一操作的起始位置。
通常GEMM对图像数据的加载顺序可以是先将数据加载到内存中,然后,将内存中的数据存储到缓存中,再将缓存中数据加载到寄存器中,最后再从寄存器中加载图像数据进行逻辑运算操作。因此,根据本公开实施例,所述预定操作系列可以包括以下操作:从内存加载图像数据的第一矩阵块和第二矩阵块;将所述第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的第一矩阵块和第二矩阵块循环执行以下操作:每次从缓存中将第一矩阵块中的一列矩阵和第二矩阵块中的一行矩阵加载到寄存器中,然后通过算术逻辑单元对该一列矩阵和该一行矩阵执行逻辑运算操作并累加运算,直至第一矩阵块和第二矩阵块全部运算结束,得到结果矩阵;将第一矩阵块和第二矩阵块逻辑运算后的结果矩阵存回内存中。然而,应了解,本公开实施例的预定操作序列并不限于此,而是可以根据需求设计不同的操作序列。
根据本公开实施例,所述自定义的汇编指令可以包括汇编字符串和操作数约束条件。汇编字符串可以包括操作符和操作数,操作数约束条件是针对汇编字符串中包括的操作数的约束条件,而操作数可以包括目的操作数和源操作数。根据本公开实施例,可以根据操作数来分配寄存器。
根据本公开实施例,可以指定源操作数和目的操作数对应的变量的地址,在此情况下,可以根据源操作数和目的操作数所对应的变量的地址来分配寄存器。替换地,可以为操作数指定保留的关键字,在此情况下,可以根据操作数所对应的保留的关键字来分配寄存器。
根据本公开实施例,寄存器例如可以是向量通用寄存器(Vector GeneralPurpose Register,VGPR)和(Scalar General Purpose Register,SGPR)。VGPR和SGPR分别是两套独立的寄存器,并且互不影响。根据具体的硬件结构可以设定VGPR或SGPR寄存器数量的上限。通常按照GPU的常规设置,VGPR寄存器数量的上限可以设置为例如256,但不限于此。SGPR寄存器数量的上限可以设置为例如112,但不限于此。
根据本公开实施例的一个示例,可以指定源操作数和目的操作数对应的变量的地址,在此情况下,可以根据源操作数和目的操作数所对应的变量的地址来分配寄存器。操作数可以用%n(n为正整数)表示,例如,汇编字符串和操作数约束条件可以如以下示例(1)所示:
如以上示例(1)所示,可以通过先定义两个字符串流std::stringstream类型的汇编字符串流和约束条件流,再通过符号“<<”分别向汇编字符串流和约束条件流写入内容,再将写入的内容转变成汇编指令中包括的汇编字符串和操作数约束条件。汇编字符串和操作数约束条件可以被push_asm函数调用。操作符可以是sl_add,操作数可以是%0、%1或%2,其中,%0可以是目的操作数,%1或%2可以是源操作数。对于操作数有多个的情况,可以用逗号“,”隔开。“=r("<<&i<<")”和“r("<<&j<<")或r("<<&k<<”)”分别是目的操作数和源操作数的约束条件,括号内分别放入的是目的操作数%0以及源操作数%1或%2对应的变量的地址,约束条件中目的操作数可以加前缀“=”,r可以表示VGPR。
可替换地,根据本公开实施例的另一示例,操作数还可以用保留的关键字表示,在此情况下,可以根据操作数所对应的保留的关键字来分配寄存器如以下示例(2)示出了保留的关键字及其约束条件。
在以上示例(2)中,保留的关键字可以由伪汇编指令“sl_reserved”及约束条件“=sr[sgpr_ID](%reserved_name)”初始化生成,该约束条件表示为保留的关键字:reserved_name分配预定义的寄存器sr[sgpr_ID],其中,sr表示SGPR(scalar generalpurpose register)。该伪汇编指令表示事前为保留的关键字分配好相应的寄存器,并且该伪汇编指令不会出现在最终生成的汇编文本中。
在以上示例(2)中,伪汇编指令带有后缀x2(即,sl_reserved_2)表示为保留的关键字(即,output_ptr)分配2个寄存器,例如:sr[sgpr_ID]、sr[sgpr_ID+1];若“sl_reserved”带有后缀x4(即,sl_reserved_4)则表示为保留的关键字分配4个寄存器,例如sr[sgpr_ID]、sr[sgpr_ID+1]、sr[sgpr_ID+2]、sr[sgpr_ID+3];而若“sl_reserved”不带后缀,则表示为保留的关键字分配1个寄存器,例如sr[sgpr_ID]。在以后的汇编字符串中就可以直接用%reserved_name表示操作数,而无需再添加相应的约束条件。
在以上示例(2)中,第一行表示为保留字matrix_m分配寄存器sgpr0,第二行表示为保留字matrix_n分配寄存器sgpr1,第三行表示为保留字output_ptr分配寄存器sgpr2和sgpr3。在以后的汇编字符串需要用变量matrix_m、matrix_n或output_ptr的操作数的位置可以直接用%matrix_m,%matrix_n,%output_ptr表示即可,并且无需再添加相应的约束条件。
以上已结合示例对汇编字符串中包括的操作数及其约束条件进行了示例性说明。
根据本公开实施例,汇编字符串除了可以包括操作数之外,还可以包括操作符。
下面,结合示例对操作符进行示例性说明。操作符可具有多种类型,例如,可以是在汇编字符串中预先设置的标签,例如,label语句,而“=label”作为该标签的标识符。可选地,操作符还可以是用于保留的关键字的操作符,例如,reserved语句。以下示例(3)示出了标签及其标识符。
返回参照图1,在S120,对所述汇编指令集进行分析,得到指令集分析结果。根据示例性实施例,对所述汇编指令集进行分析可以包括:解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。
操作符通常可以是汇编字符串的空格前第一个字符串。对操作符的解析包括操作符类型的解析和操作数所需寄存器数量的解析,但不限于此。例如,操作符的类型可以包括以上描述的label和reserved,但不限于此,例如,还可以是普通变量操作符(sl_op),向量变量操作符(ml_op)。
对操作数的解析可以包括对每个操作数的属性进行解析。操作数的属性可以是:是否是目的操作数、操作数类型、操作数名字和操作数地址,但不限于此。
根据本公开实施例,通过步骤S120对所述汇编指令集进行分析,例如可以获得操作符的类型、每个操作数的属性以及操作数所需寄存器数量。
在S130,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器。
根据本公开实施例,可以根据操作符的类型、操作数的属性以及操作数所需寄存器数量来分配用于执行所述预定操作序列的寄存器。例如,在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
在S140,读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列。
在步骤S130对寄存器进行了统一分配之后,在步骤S140,利用所分配的寄存器来对图像数据执行预定操作系列。具体地,根据本公开实施例,所述预定操作系列可以包括以下操作:从内存加载图像数据的第一矩阵块和第二矩阵块;将所述第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的第一矩阵块和第二矩阵块循环执行以下操作:每次从缓存中将第一矩阵块中的一列矩阵和第二矩阵块中的一行矩阵加载到寄存器中,然后通过算术逻辑单元对该一列矩阵和该一行矩阵执行逻辑运算操作并累加运算,直至第一矩阵块和第二矩阵块全部运算结束,得到结果矩阵;将第一矩阵块和第二矩阵块逻辑运算后的结果矩阵存回内存中。
上述结合步骤S110至S140示例说明了基于GEMM处理图像数据的方法。在上述方法中,由于是在对指定针对图像数据的预定操作序列的汇编指令集进行分析之后,根据所述指令集分析结果来统一分配用于执行所述预定操作序列的寄存器,然后利用所分配的寄存器对所述图像数据执行所述预定操作序列,而不是通常所采用的在处理图像数据的同时分配寄存器,因此,避免了重复分配寄存器和频繁释放寄存器等问题的出现,提高了GPU对图像数据的处理速度,并且合理利用存储资源。
接下来,参照图2和图3分别对图1中的步骤S130和S140进行进一步说明。
图2示出了根据本公开的实施例的分配用于执行预定操作序列的寄存器的示意图。在S130中可以如图2所示分配用于执行预定操作序列的寄存器。
如图2所示,针对汇编指令集中的每个自定义的汇编指令可以执行以下操作:
首先在步骤S210,判断汇编字符串中的操作符的类型是否是标签(例如,是否是以上示例3中的“=label”语句),如果是标签,则不为该操作符分配寄存器,否则执行步骤S220;
在步骤S220,判断操作数约束条件中是否包括预定义的寄存器ID和保留关键字(例如,是否包括以上示例2中的伪汇编指令“sl_reserved”及约束条件“=sr[sgpr_ID](%reserved_name)”),如果包括,则在已注册的寄存器列表中查找预定义的寄存器ID,并按照预定义的寄存器ID为保留关键字分配所需数量的寄存器,并从可用的寄存器列表中除去相应的寄存器个数,否则执行步骤S230;
在步骤S230,判断汇编字符串中的操作数是否是数字(例如,是否是以上示例1中的%n(n为正整数)),如果不是,则在已注册的寄存器列表中查找与该操作数对应的寄存器ID(例如,保留的关键词对应的寄存器ID),否则执行步骤S240;
在步骤S240,检查操作数的地址并判断在已注册的寄存器列表里是否存在与所述地址对应的寄存器ID,如果存在,则表示该地址已被注册,则不为该操作数分配新的寄存器,否则执行步骤S250;
在步骤S250,按照操作数所需寄存器个数分配相应的寄存器并从可用的寄存器列表中除去相应的寄存器个数,具体地,可以从可用的寄存器编号最小的开始,按照所需寄存器个数做有效性检查并为该操作数分配寄存器ID,其中,有效性检查是指,如果需要的寄存器编号的起始位置必须是2的倍数,则可以从2的倍数处的位置开始为操作数分配相应数量的寄存器;如果需要的寄存器编号的起始位置必须是4的倍数,则可以从4的倍数处的位置开始为操作数分配相应数量的寄存器,等等;
最后,在步骤S260,判断汇编指令集中的每个汇编指令是否均分析完,如果未分析完则重复以上操作,否则在步骤S270,便可以导出可以运行在GPU上的最终的汇编代码。
图3示出了根据本公开的实施例的针对图像数据的预定操作序列的示意图。在S140中可以如图3所示针对图像数据执行预定操作序列。
具体地,参照图3,可首先在步骤S310,将图像数据的第一矩阵块和第二矩阵块加载到内存(例如,GPU内存VRAM,Video Random Access Memory frame buffer)。
接下来,在步骤S320,将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存(例如,Local Data Shared,LDS)中。
随后,在步骤S330,对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作。具体地,在步骤S330中,对图像数据的第一矩阵块和第二矩阵块循环执行以下操作:每次从缓存中将第一矩阵块中的一列矩阵和第二矩阵块中的一行矩阵加载到寄存器(例如,Vector Register File,VRF)中,然后通过算术逻辑单元(例如,ArithmeticLogic Unit,ALU)对该一列矩阵和该一行矩阵执行逻辑运算操作(例如,乘法运算),判断图像数据的第一矩阵块和第二矩阵块是否全部运算结束,如果未结束则继续进行上述操作,否则将所有的逻辑运算结果做累加运算得到结果矩阵。
最后,在步骤S340,将通过逻辑运算操作获得的结果矩阵存回内存中。
以上,已经对本公开的基于通用矩阵乘法GEMM处理图像数据的方法进行了介绍。在上述方法中,由于是在对指定针对图像数据的预定操作序列的汇编指令集进行分析之后,根据所述指令集分析结果来统一分配用于执行所述预定操作序列的寄存器并利用所分配的寄存器对所述图像数据执行所述预定操作序列,而不是通常所采用的在处理图像数据的同时分配寄存器,因此,提高了GPU对图像数据的处理速度,并且合理利用存储资源。
图4示出了根据本公开的实施例的基于GEMM处理图像数据的装置(以下,为描述方便,将其简称为“图像数据处理装置”)的框图。
参照图4,图像数据处理装置400可包括获取模块410、分析模块420、分配模块430和执行模块440。
获取模块410可以获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列。根据本公开实施例,所述汇编指令集可以包括自定义的汇编指令,所述自定义的汇编指令可以位于所述预定操作序列的每一操作的起始位置,并且所述自定义的汇编指令包括汇编字符串和操作数约束条件。根据本公开实施例,汇编字符串可以包括操作符和操作数,操作数约束条件是针对汇编字符串中包括的操作数的约束条件。
根据本公开实施例,所述预定操作序列可以包括以下操作:将图像数据的第一矩阵块和第二矩阵块加载到内存中;将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;将通过逻辑运算操作获得的结果矩阵存回内存中。
分析模块420可以对所述汇编指令集进行分析,得到指令集分析结果。分配模块430可以根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器。具体地,分析模块420可以解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。根据本公开实施例,通过对所述汇编指令集进行分析,例如可以获得操作符的类型、每个操作数的属性以及操作数所需寄存器数量作为分析结果。
随后,根据分析结果,分配用于执行所述预定操作序列的寄存器。具体地,在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
执行模块440可以读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列。具体地,执行模块440可以先将图像数据的第一矩阵块和第二矩阵块加载到内存中;将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;将通过逻辑运算操作获得的结果矩阵存回内存中。
由于以上已经在描述根据本公开的图像数据处理方法的过程中,对上述操作所涉及的内容的细节进行了介绍,因此这里为简洁起见不再赘述,相关细节可参照以上关于图1至图3的描述。
以上已经参照图1至图4描述了根据公开的实施例的图像数据处理方法和图像数据处理装置。然而,应理解的是:图4所示的装置中的各个模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。作为示例,参照图4描述的装置可以是PC计算机、平板装置、个人数字助理、智能手机、web应用或其它能够执行程序指令的装置,但不限于此。
需要说明的是,尽管以上在描述图像数据处理装置400时将其划分为用于分别执行相应处理的模块,然而,本领域技术人员清楚的是,各模块执行的处理也可以在图像数据处理装置不进行任何具体模块划分或者各模块之间并无明确划界的情况下执行。此外,以上参照图4描述的装置并不限于包括以上描述的模块,而是还可以根据需要增加一些其它模块(例如,存储模块、数据处理模块等),或者以上模块也可被组合。
此外,根据本公开的图像数据处理方法可被记录在计算机可读记录介质中。具体地,根据本公开,可提供一种存储有计算机可执行指令的计算机可读记录介质,当所述计算机可执行指令被处理器执行时,可促使处理器执行如上所述的图像数据处理方法。计算机可读记录介质的示例可包括磁介质(例如硬盘、软盘和磁带);光学介质(例如CD-ROM和DVD);磁光介质(例如,光盘);以及特别配制用于存储并执行程序指令的硬件装置(例如,只读存储器(ROM)、随机存取存储器(RAM)、闪存等)。此外,根据本公开,还可提供一种包括处理器和存储器的设备,所述存储器中存储有计算机可执行指令,其中,当所述计算机可执行指令被处理器执行时,促使处理器执行如上所述的图像数据处理方法。计算机可执行指令的示例包括例如由编译器产生的机器码和包含可使用解释器由计算机执行的高级代码的文件。
另外,根据本公开的图像数据处理方法中的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。
需要说明的是,附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含至少一个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
一般而言,本公开的各种示例实施例可以在硬件或专用电路、软件、固件、逻辑,或其任何组合中实施。某些方面可以在硬件中实施,而其它方面可以在可以由控制器、微处理器或其它计算设备执行的固件或软件中实施。当本公开的实施例的各方面被图示或描述为框图、流程图或使用某些其它图形表示时,将理解此处描述的方框、装置、系统、技术或方法可以作为非限制性的示例在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其它计算设备,或其某些组合中实施。
在上面详细描述的本公开的示例实施例仅仅是说明性的,而不是限制性的。本领域技术人员应该理解,在不脱离本公开的原理和精神的情况下,可对这些实施例或其特征进行各种修改和组合,这样的修改应落入本公开的范围内。
Claims (10)
1.一种基于通用矩阵乘法处理图像数据的方法,包括:
获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列;
对所述汇编指令集进行分析,得到指令集分析结果;
根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器;以及
读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列,
其中,所述汇编指令集包括自定义的汇编指令,所述自定义的汇编指令包括汇编字符串和操作数约束条件,
其中,对所述汇编指令集进行分析包括:解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。
2.如权利要求1所述的方法,其中,所述自定义的汇编指令位于所述预定操作序列的每一操作的起始位置。
3.如权利要求2所述的方法,其中,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器包括:
在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;
在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;
在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;
在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
4.如权利要求1至3中的任一项所述的方法,其中,利用所分配的寄存器对所述图像数据执行所述预定操作序列包括:
将图像数据的第一矩阵块和第二矩阵块加载到内存中;
将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;
对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;
将通过逻辑运算操作获得的结果矩阵存回内存中。
5.一种基于通用矩阵乘法处理图像数据的装置,包括:
获取模块,被配置为获取汇编指令集,所述汇编指令集指定针对图像数据的预定操作序列;
分析模块,被配置为对所述汇编指令集进行分析,得到指令集分析结果;
分配模块,被配置为根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器;以及
执行模块,被配置为读取所述图像数据,并利用所分配的寄存器对所述图像数据执行所述预定操作序列,
其中,所述汇编指令集包括自定义的汇编指令,所述自定义的汇编指令包括汇编字符串和操作数约束条件,
其中,对所述汇编指令集进行分析包括:解析所述汇编字符串中的操作符和操作数并解析与操作数对应的操作数约束条件,以确定寄存器分配方式。
6.如权利要求5所述的装置,其中,所述自定义的汇编指令位于所述预定操作序列的每一操作的起始位置。
7.如权利要求6所述的装置,其中,根据所述指令集分析结果分配用于执行所述预定操作序列的寄存器包括:
在汇编字符串中的操作符的类型是标签的情况下,不为该操作符分配寄存器;
在操作数约束条件中包括预定义的寄存器ID和保留关键字的情况下,按照预定义的寄存器ID为保留关键字分配所需数量的寄存器;
在汇编字符串中的操作数是非数字的情况下,从已注册的寄存器列表中查找寄存器ID;
在汇编字符串中的操作数是数字的情况下,检查操作数的地址,在已注册的寄存器列表里查找与所述地址对应的寄存器ID,如果通过查找确定该地址已被注册,则不为该操作数分配新的寄存器,否则,按照操作数所需寄存器个数分配相应的寄存器。
8.如权利要求5至7中的任一项所述的装置,其中,利用所分配的寄存器对所述图像数据执行所述预定操作序列包括:
将图像数据的第一矩阵块和第二矩阵块加载到内存中;
将加载到内存中的所述图像数据的第一矩阵块和第二矩阵块存储到缓存中;
对存储到缓存中的所述图像数据的第一矩阵块和第二矩阵块进行逻辑运算操作;
将通过逻辑运算操作获得的结果矩阵存回内存中。
9.一种基于通用矩阵乘法处理图像数据的设备,包括:
处理器,和
存储器,所述存储器存储有计算机可执行指令,所述计算机可执行指令当由处理器执行时促使处理器执行如权利要求1-4中的任一项所述的方法。
10.一种计算机可读记录介质,存储有计算机可执行指令,其中,所述计算机可执行指令当由处理器执行时促使处理器执行如权利要求1-4中的任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011016965.1A CN112184536B (zh) | 2020-09-24 | 2020-09-24 | 基于gemm处理图像数据的方法、装置、设备和介质 |
PCT/CN2020/122187 WO2022062005A1 (zh) | 2020-09-24 | 2020-10-20 | 基于gemm处理图像数据的方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011016965.1A CN112184536B (zh) | 2020-09-24 | 2020-09-24 | 基于gemm处理图像数据的方法、装置、设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112184536A CN112184536A (zh) | 2021-01-05 |
CN112184536B true CN112184536B (zh) | 2022-09-30 |
Family
ID=73956618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011016965.1A Active CN112184536B (zh) | 2020-09-24 | 2020-09-24 | 基于gemm处理图像数据的方法、装置、设备和介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112184536B (zh) |
WO (1) | WO2022062005A1 (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2508979A2 (en) * | 2011-04-07 | 2012-10-10 | VIA Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
CN103631660A (zh) * | 2013-09-23 | 2014-03-12 | 中国科学院数据与通信保护研究教育中心 | 在gpu中进行大整数计算时的存储资源分配方法及装置 |
CN110187882A (zh) * | 2019-05-17 | 2019-08-30 | 湖南科技大学 | 一种面向指令源操作数的寄存器对分配方法及存储介质 |
CN111696025A (zh) * | 2020-06-11 | 2020-09-22 | 西安电子科技大学 | 基于可重构内存计算技术的图像处理装置及方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9965824B2 (en) * | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
US10204396B2 (en) * | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
CN106846235B (zh) * | 2016-12-26 | 2020-11-13 | 中国科学院计算技术研究所 | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 |
CN111641823B (zh) * | 2020-05-06 | 2021-08-27 | 深圳市爱协生科技有限公司 | 一种基于mipi接口的图像算法验证系统 |
-
2020
- 2020-09-24 CN CN202011016965.1A patent/CN112184536B/zh active Active
- 2020-10-20 WO PCT/CN2020/122187 patent/WO2022062005A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2508979A2 (en) * | 2011-04-07 | 2012-10-10 | VIA Technologies, Inc. | Efficient conditional ALU instruction in read-port limited register file microprocessor |
CN103631660A (zh) * | 2013-09-23 | 2014-03-12 | 中国科学院数据与通信保护研究教育中心 | 在gpu中进行大整数计算时的存储资源分配方法及装置 |
CN110187882A (zh) * | 2019-05-17 | 2019-08-30 | 湖南科技大学 | 一种面向指令源操作数的寄存器对分配方法及存储介质 |
CN111696025A (zh) * | 2020-06-11 | 2020-09-22 | 西安电子科技大学 | 基于可重构内存计算技术的图像处理装置及方法 |
Non-Patent Citations (1)
Title |
---|
《基于ARM处理器的嵌入式软件能耗统计模型》;刘啸滨 等;《电子科技大学学报》;20121231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
WO2022062005A1 (zh) | 2022-03-31 |
CN112184536A (zh) | 2021-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8555260B1 (en) | Direct hardware processing of internal data structure fields | |
KR20180020985A (ko) | 디커플링된 프로세서 명령어 윈도우 및 피연산자 버퍼 | |
US10430191B2 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption | |
US8756584B2 (en) | Code instrumentation method and code instrumentation apparatus | |
JP2018519597A (ja) | ブロックサイズに基づくマッピング命令ブロック | |
CN112307509A (zh) | 一种脱敏处理方法、设备、介质及电子设备 | |
EP3140730A1 (en) | Detecting data dependencies of instructions associated with threads in a simultaneous multithreading scheme | |
CN115576608A (zh) | 处理器核、处理器、芯片、控制设备和指令融合方法 | |
US9864518B2 (en) | Assigning home memory addresses to function call parameters | |
CN115034176A (zh) | 文本处理方法、装置、电子设备和计算机可读存储介质 | |
US20160132246A1 (en) | Conditional stack frame allocation | |
CN113961248A (zh) | 寄存器映射方法、处理器、芯片及电子设备 | |
US20180033115A1 (en) | Capturing Commands in a Multi-Engine Graphics Processing Unit | |
CN112184536B (zh) | 基于gemm处理图像数据的方法、装置、设备和介质 | |
TW201712534A (zh) | 關於包括指令組的大小之指令組的資訊解碼 | |
CN115516421A (zh) | Gpu中基于gpr释放机制的gpr优化 | |
CN108027736B (zh) | 使用通过对物理寄存器预分配的乱序重命名的运行时代码并行化 | |
KR100837400B1 (ko) | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 | |
CN114924793A (zh) | 处理单元、计算设备和指令处理方法 | |
KR20150051083A (ko) | 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치 | |
KR101559651B1 (ko) | 동적 분석 방법 및 장치 | |
WO2016201699A1 (zh) | 指令处理方法及设备 | |
US9672042B2 (en) | Processing system and method of instruction set encoding space utilization | |
CN116501385B (zh) | 指令处理方法、处理器、芯片及计算机设备 | |
US20210042111A1 (en) | Efficient encoding of high fanout communications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |