CN118210552B - 指令生成方法、装置及存储介质 - Google Patents

指令生成方法、装置及存储介质

Info

Publication number
CN118210552B
CN118210552B CN202211618182.XA CN202211618182A CN118210552B CN 118210552 B CN118210552 B CN 118210552B CN 202211618182 A CN202211618182 A CN 202211618182A CN 118210552 B CN118210552 B CN 118210552B
Authority
CN
China
Prior art keywords
instruction
operand
dimension
data shape
operands
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
Application number
CN202211618182.XA
Other languages
English (en)
Other versions
CN118210552A (zh
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambrian Xi'an Integrated Circuit Co ltd
Original Assignee
Cambrian Xi'an Integrated Circuit Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Cambrian Xi'an Integrated Circuit Co ltd filed Critical Cambrian Xi'an Integrated Circuit Co ltd
Priority to CN202211618182.XA priority Critical patent/CN118210552B/zh
Publication of CN118210552A publication Critical patent/CN118210552A/zh
Application granted granted Critical
Publication of CN118210552B publication Critical patent/CN118210552B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供一种指令生成方法、装置及存储介质,通过预设指令类别的统一接口接收指令参数,其中指令参数包括至少两个操作数以及输出地址;根据指令参数确定各操作数的表示形式;根据各操作数的表示形式以及指令参数,生成对应的目标指令。本申请实施例对于预设指令类别面向用户仅提供统一接口来接收指令参数,由编译器自动选择和生成适配于用户输入的指令参数的目标硬件指令,用户无需关注多种硬件指令,也无需为每个硬件指令选择或编写对应的API接口程序,为用户的使用提供了便捷,同时也避免了每一种硬件指令编写相应的API,避免了程序和文档的繁琐。

Description

指令生成方法、装置及存储介质
技术领域
本申请实施例涉及编译技术和人工智能技术领域,尤其涉及一种指令生成方法、装置及存储介质。
背景技术
在处理器硬件(如图形处理器GPU或人工智能处理器等)的设计中,为了提高硬件处理器的运算效率及其在多个应用场景下的通用性,处理器硬件往往会根据不同的运算需求针对同一类操作提供不同的硬件指令。比如,针对加法相关操作,硬件可以根据不同的需要提供对位点加(element-wise add)、广播加法(broadcasting add)、常量加法(addconstant)等多个指令。
用户在使用过程中需要针对每个硬件指令编写相应的程序,如API(ApplicationProgramming Interface,应用程序编程接口),这样就会造成API比较多,用户使用较麻烦,编程及文档也比较繁琐。
发明内容
本申请实施例提供一种指令生成方法、装置及存储介质,针对某一类别的运算提供统一的API接口,通过对该API接口的参数解析自动选择硬件指令的具体类别,从而简化编程,方便用户使用。
第一方面,本申请实施例提供一种指令生成方法,包括:
通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
根据所述指令参数确定各所述操作数的表示形式;
根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
在一种可能的设计中,所述根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令,包括:
根据各所述操作数的表示形式从所述预设指令类别中确定目标类别;
根据所述指令参数以及所述目标类别,生成对应的目标指令。
在一种可能的设计中,所述根据各所述操作数的表示形式从所述预设指令类别中确定目标类别,包括:
判断各所述操作数的表示形式是否均为存储单元地址;
若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状;
根据各所述操作数的数据形状确定所述目标类别。
在一种可能的设计中,所述根据各所述操作数的数据形状确定所述目标类别,包括:
若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别;或者
若各所述操作数之间的数据形状关系不满足预设规则,则输出错误提示信息。
在一种可能的设计中,所述目标类别包括第一类别,所述预设规则包括第一预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,包括:
若各所述操作数之间的数据形状关系满足第一预设规则,则确定所述目标类别为所述第一类别。
在一种可能的设计中,所述目标类别包括第二类别,所述预设规则还包括第二预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,还包括:
若各所述操作数之间的数据形状关系满足第二预设规则,则确定所述目标类别为所述第二类别。
在一种可能的设计中,所述数据形状包括至少一个维度;所述方法还包括:
分别比较各所述操作数的数据形状中每一对应维度的维度值;
若所述操作数的数据形状的至少一个维度的维度值均相同,则确定所述操作数的数据形状关系为满足第一预设规则;
若所述操作数的数据形状的至少一个维度中存在一个以上的维度值相同,其他维度值之间具有兼容关系,则确定所述操作数的数据形状满足第二预设规则。
在一种可能的设计中,所述方法还包括:
若各所述操作数的数据形状中任一对应维度的维度值均为常数,则通过比较相应维度的常数确定各所述操作数之间的数据形状关系;
若各所述操作数的数据形状中任一对应维度的维度值为表达式,则通过比较相应维度的各表达式确定各所述操作数之间的数据形状关系。
在一种可能的设计中,若各所述操作数的数据形状中任一对应维度的维度值为表达式,所述方法还包括:
按照预设的变换规则分别对各表达式进行变形,得到对应的变形后的表达式,所述变形后的表达式具有相同形式的表达;
通过比较变形后的各表达式确定各所述操作数之间的数据形状关系。
在一种可能的设计中,所述预设的变换规则,包括以下规则中的一种或多种的组合:
对于任一表达式,若表达式中存在括号,则按照数学运算规则去除表达式中的括号;
若表达式中存在常数之间的运算,则计算常数之间的运算结果,并替换到表达式中;
基于数学运算规则对表达式中的参数调整顺序,使得参数按照目标顺序排列。
在一种可能的设计中,所述根据各所述操作数的表示形式从所述预设指令类别中确定目标类别,还包括:
若各所述操作数的表示形式中包括存储单元地址和常量,则确定所述目标类别为第三类别。
第二方面,本申请实施例提供一种指令生成装置,包括:
接口模块,用于通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
确定模块,用于根据所述指令参数确定各所述操作数的表示形式;
生成模块,用于根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
第三方面,本申请实施例提供一种指令生成装置,包括:至少一个处理器及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被至少一个处理器执行时,实现如第一方面所述的方法。
本申请实施例提供的指令生成方法、装置及存储介质,通过预设指令类别的统一接口接收指令参数,其中指令参数包括至少两个操作数以及输出地址;根据指令参数确定各操作数的表示形式;根据各操作数的表示形式以及指令参数,生成对应的目标指令。本实施例对于预设指令类别面向用户仅提供统一接口来接收指令参数,由编译器自动选择和生成适配于用户输入的指令参数的目标硬件指令,用户无需关注多种硬件指令,也无需为每个硬件指令选择或编写对应的API接口程序,为用户的使用提供了便捷,同时也避免了每一种硬件指令编写相应的API,避免了程序和文档的繁琐。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本申请一实施例提供的指令生成方法的场景示意图;
图2为本申请一个实施例提供的指令生成方法的流程图;
图3为本申请另一个实施例提供的指令生成方法的流程图;
图4为本申请另一个实施例提供的指令生成方法的流程图;
图5为本申请另一个实施例提供的指令生成方法的流程图;
图6为本申请一个实施例提供的指令生成装置的结构示意图;
图7为本申请另一个实施例提供的指令生成装置的结构示意图;
图8是示出根据本申请实施例的板卡的结构图;
图9是示出根据本申请实施例的组合处理装置的结构图;
图10是示出根据本申请实施例的单核计算装置的内部结构示意图;
图11是示出根据本申请实施例的多核计算装置的内部结构示意图;
图12是示出根据本申请实施例的处理器核的内部结构示意图。
这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
为了清楚理解本申请的技术方案,首先对现有技术的方案进行详细介绍。
在处理器硬件(如图形处理器GPU或人工智能处理器等)的设计中,为了提高硬件处理器的运算效率及其在多个应用场景下的通用性,处理器硬件往往会根据不同的运算需求针对同一类操作提供不同的硬件指令。比如,针对加法相关操作,硬件可以根据不同的需要提供对位点加(element-wise add)、广播加法(broadcasting add)、常量加法(addconstant)等多个硬件加法指令。
用户在使用过程中需要针对每个硬件指令编写相应的程序,如API(ApplicationProgramming Interface,应用程序编程接口),以实现对相应硬件指令的调用。但针对每个硬件指令均提供相应的API接口的方式会造成API比较多,不仅会带来程序和文档复杂繁琐的问题,也不便于用户使用。
为了解决上述技术问题,本申请实施例中提供一种指令生成方法,通过预设指令类别的统一接口接收指令参数,其中指令参数包括至少两个操作数以及输出地址;根据指令参数确定各操作数的表示形式;根据各操作数的表示形式以及指令参数,生成对应的目标指令。本申请实施例对于同一指令类别面向用户仅提供统一接口来接收指令参数,由编译器自动选择和生成适配于用户输入的指令参数的目标硬件指令,用户无需关注多种硬件指令,也无需为每个硬件指令选择或编写对应的API接口程序,为用户的使用提供了便捷,同时也避免了对每一种硬件指令编写相应的API,避免了程序和文档的繁琐。本公开的指令生成方法及编译器通过提高编程的抽象层次,提高了使用效率。
本申请提供一种指令生成方法应用于如图1所示的应用场景中,包括编译器(或者具有编译功能的其他电子设备),编译器针对预设指令类别提供统一接口,用户可通过预设指令类别的统一接口配置指令参数,编译器可以接收包含该统一接口的程序代码,并根据统一接口中的指令参数确定各操作数的表示形式;根据各操作数的表示形式以及指令参数,生成对应的目标指令。其中,该目标指令可以是硬件处理器能够执行的硬件指令。可选地,编译器可以根据硬件处理器的类型,生成与该硬件处理器的硬件指令对应的目标指令。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请一个实施例提供的指令生成方法的流程图,本实施例的执行主体为编译器或者具有编译功能的其他电子设备。如图2所示,本实施例提供的指令生成方法包括以下步骤:
S201、通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址。
在本实施例中,对于某些特定指令类别,硬件处理器根据不同的需要会提供不同的操作指令,其中,指令类别根据操作指令完成的运算操作确定,如用于完成加法操作的不同操作指令为同一指令类别,用于完成乘法操作的不同指令为同一指令类别,此处不一一赘述。
某一指令类别的操作指令包括但不限于element-wise(元素方式,是维度相同的向量或矩阵等张量对应位置元素进行运算)类别的操作指令、broadcasting(广播机制,是一种维度不同的向量或矩阵间的运算)类别的操作指令、向量或矩阵等张量与常量之间的运算操作指令等。例如对于加法相关操作,可包括element-wise add、broadcasting add、add constant等多个不同的操作指令。为了避免用户在使用同一指令类别的不同操作指令时需要对每个操作指令编写相应的程序如API,造成API较多、用户使用麻烦、文档繁琐,本实施例中针对同一类别的不同操作指令提供统一接口,对于该类别的任意操作指令,用户均可通过统一接口输入操作指令的指令参数,指令参数用于指示该操作指令进行运算的数据,指令参数可包括至少两个操作数以及输出地址,其中至少两个操作数用于指示参与运算的输入数据,输出地址用于指示该操作指令输出数据的存储位置。
例如,对于加法操作的指令类别,可预先封装一个统一接口Add(out,inp1,inp2),其中out为输出地址,inp1和inp2为操作数,用户在需要使用加法操作的指令类别中的任一操作指令时,只需要通过统一接口输入操作数以及输出地址即可,无需关注加法操作的指令类别中的具体操作指令。此处仅以二元加法操作举例说明,在其他实施例中,该操作数可以不限于两个。
S202、根据所述指令参数确定各所述操作数的表示形式。
在本实施例中,指令参数中的操作数存在不同的表示形式。例如,操作数可以为向量或矩阵,该向量或矩阵的表示形式可以是存储单元地址,操作数也可以是常量,此时该操作数的表示形式可以为立即数,也即输入数据本身。编译器可根据指令参数识别每一操作数是否是存储单元地址和/或是否是常量,从而确定各操作数的表示形式。
S203、根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
在本实施例中,在确定各操作数的表示形式后,编译器可通过优化pass对各操作数的表示形式进行分析,基于各操作数的表示形式以及指令参数,生成适配于操作数的表示形式以及指令参数的目标指令,例如element-wise add(out,inp1,inp2)。
本实施例提供的指令生成方法,通过预设指令类别的统一接口接收指令参数,其中指令参数包括至少两个操作数以及输出地址;根据指令参数确定各操作数的表示形式;根据各操作数的表示形式以及指令参数,生成对应的目标指令。本实施例对于预设指令类别面向用户仅提供统一接口来接收指令参数,由编译器自动选择和生成适配于用户输入的指令参数的目标指令,用户无需关注多种硬件指令,也无需为每个硬件指令选择或编写对应的API接口程序,为用户的使用提供了便捷,同时也避免了对每一种硬件指令编写相应的API,避免了程序和文档的繁琐。
在上述任一实施例的基础上,编译器可以根据统一接口中操作数的表示形式和指令参数,直接生成硬件处理器能够执行的目标指令。当然,编译器可以首先根据统一接口中操作数的表示形式和指令参数自动选定相应的目标操作指令,之后生成该选定目标指令对应的目标指令。
如图3所示,所述的根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令,具体可包括:
S301、根据各所述操作数的表示形式从所述预设指令类别中确定目标类别;
S302、根据所述指令参数以及所述目标类别,生成对应的目标指令。
在本实施例中,在确定各操作数的表示形式后,编译器可通过优化pass对各操作数的表示形式进行分析,由于预设指令类别中不同操作指令操作数的表示形式满足不同的规则,可根据各操作数的表示形式从预设指令类别中确定操作指令的目标类别。例如从加法操作的指令类别中确定目标类别具体是element-wise add、broadcasting add、addconstant等类别中的哪一种,进一步的,根据所述指令参数以及所述目标类别,生成对应的目标指令。举例来讲,假设统一接口Add(out,inp1,inp2),其中指令参数包括输出地址out以及操作数inp1和inp2,则可以根据指令参数的表示形式确定目标类别为element-wise类别,进一步根据指令参数以及目标类别,生成对应的目标指令element-wise add(out,inp1,inp2)。
在上述实施例的基础上,如图4所示,所述的根据各所述操作数的表示形式从所述预设指令类别中确定目标类别,具体可包括:
S401、判断各所述操作数的表示形式是否均为存储单元地址;
S402、若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状;
S403、根据各所述操作数的数据形状确定所述目标类别。
在本实施例中,element-wise、broadcasting等类别的操作指令是向量或矩阵之间的运算,此时操作指令中可以通过向量或矩阵等张量数据的存储地址来表示参与运算的向量或矩阵,也即操作数的表示形式均为存储单元地址,因此可根据各操作数的表示形式判断各操作数的表示形式是否均为存储单元地址。若各操作数的表示形式均为存储单元地址也即说明目标类别可能是element-wise、broadcasting等类别的操作指令中的一种。
而由于element-wise、broadcasting等类别的操作指令对操作数的数据形状存在不同的要求,因此可基于存储单元地址确定各操作数的数据形状(即通过向量或矩阵等张量的存储地址确定向量或矩阵的大小),最终确定目标类别。
具体的,若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别;若各所述操作数之间的数据形状关系不满足预设规则,则说明各操作数不满足任一类别的操作指令的要求,可输出错误提示信息,已提示用户操作数可能存在错误,以便于用户检查、重新输入。
在一种可选实施例中,目标类别包括第一类别,预设规则包括第一预设规则,第一预设规则也即第一类别操作指令的操作数之间的数据形状关系规则。因此,若各操作数之间的数据形状关系满足第一预设规则,则确定目标类别为第一类别。
在另一可选实施例中,目标类别还包括第二类别,预设规则还包括第二预设规则,第二预设规则也即第二类别操作指令的操作数之间的数据形状关系规则。因此,若各操作数之间的数据形状关系满足第二预设规则,则确定目标类别为第二类别。
通过预先设置不同类别对应的预设规则,并判断各操作数之间的数据形状关系哪一预设规则,从而可准确的确定目标类别。当然,目标类别并不仅限于包括第一类别、第二类别,预设规则也并不仅限于包括第一预设规则、第二预设规则。
对于向量或矩阵等具有至少一个维度的张量数据而言,假设各操作数的数据形状包括至少一个维度,其中,至少一个维度可以按照从低到高的顺序进行排列,每个维度方向上的维度值可以用于表示该维度方向的数据大小。
在上述实施例中,第一预设规则可以是各操作数的数据形状完全相同。若各操作数的数据形状的至少一个维度中每个对应的维度值均相同,则可以确定各操作数的数据形状相同,满足第一预设规则。例如,操作数inp1和inp2为二维矩阵,其均包括两个维度:第一维度和第二维度,若inp1的第一维度和inp2的第一维度的维度值相同,inp1的第二维度和inp2的第二维度的维度值相同,则确定所述操作数的数据形状关系为满足第一预设规则。可选地,上述第一类别可以为element-wise类别。因此若各操作数的数据形状完全相同,即各操作数的数据形状的每个对应的维度值均相同,则满足第一预设规则,确定目标类别为第一类别(element-wise类别)。
在上述实施例中,第二预设规则可以是操作数的数据形状不相同,该数据形状不同可以是各个操作数具有不同的维度数,也可以是具有相同的维度数,但至少一个维度方向上的维度值不同。此时,若所述操作数的数据形状的至少一个维度中存在一个以上的维度值相同,其他维度值之间具有兼容关系,则确定所述操作数的数据形状关系为满足第二预设规则。该兼容关系可以表现为高维度数据对低维度数据的包容关系,也可以表现为相同维度之间维度值的倍数关系。
例如操作数inp3和inp4均包括两个维度:第一维度和第二维度,inp3的数据形状为4*3,inp4的数据形状为4*1,则inp3的第二维度和inp4的第二维度的维度值相同,其维度值均为4,inp3的第一维度是inp4的第一维度的维度值的倍数,则确定所述操作数的数据形状关系为满足第二预设规则。
再如,低维度操作数inp3包括两个维度:第一维度和第二维度,inp3的数据形状为4*1;高维度操作数inp4包括三个维度:第一维度、第二维度和第三维度,inp4的数据形状为5*4*1,则inp3的第一维度和inp4的第一维度的维度值相同,其维度值均为1,inp3的第二维度和inp4的第二维度的维度值相同,其维度值均为4,则高维度操作数inp4可以兼容低维度操作数inp3,此时确定所述操作数的数据形状关系为满足第二预设规则。
又如,操作数inp3包括两个维度:第一维度和第二维度,inp3的数据形状为4*1;操作数inp4包括三个维度:第一维度、第二维度和第三维度,inp4的数据形状为5*4*3,则inp4的第一维度的维度值为inp3第一维度的维度值的倍数,inp3的第二维度和inp4的第二维度的维度值相同,其维度值均为4,则确定所述操作数的数据形状关系为满足第二预设规则。
可选地,第二类别可以为broadcasting类别。因此若确定各操作数的数据形状的至少一个维度中的一个维度值相同,剩余维度的维度值之间为倍数关系等兼容关系,则满足第二预设规则,确定目标类别为第二类别(broadcasting类别)。
在上述实施例中,在比较各操作数的数据形状关系时,考虑到维度值可能是常数,也可能是以表达式的方式来动态表示,因此本实施例中可通过如下过程分别处理:
若各所述操作数的数据形状中任一对应维度的维度值均为常数,则通过比较相应维度的常数确定各所述操作数之间的数据形状关系;也即,直接通过常数之间的比较来确定对应的维度值是否相同,或者对应的维度值之间是否具有兼容关系。
若各所述操作数的数据形状中任一对应维度的维度值为表达式,则通过比较相应维度的各表达式确定各所述操作数之间的数据形状关系;也即,由于表达式中各参数的具体数值在运行时才能获得,此时无法确定,故无法通过先计算出各表达式的结果、再比较各表达式的结果,因此可通过比较各表达式来确定对应的维度值是否相同,或者对应的维度值之间是否具有兼容关系。
进一步的,若各所述操作数的数据形状中任一对应维度的维度值为表达式,所述方法还包括:
按照预设的变换规则分别对各表达式进行变形,得到对应的变形后的表达式,所述变形后的表达式具有相同形式的表达;通过比较变形后的各表达式确定各所述操作数之间的数据形状关系。
在本实施例中,由于可能存在不同操作数同一维度的维度值的表达式的形式看似不同、但实际结果是相同的情况,例如表达式x*m+y*c–a+b*m和表达式c*y+m*x–a+m*b虽然形式看似不同,但是经过变形后实际是相同的,结果也是相同的,因此为了便于编译器对表达式的比较,可以将各表达式都按照相同的变换规则进行变形,使得各表达式都遵从相同的表达方式,从而更方便比较,编译器只需按照类似字符串的比较方式对变形后的表达式进行对比即可。
可选的,所述预设的变换规则,包括以下规则中的一种或多种的组合:
对于任一表达式,若表达式中存在括号,则按照数学运算规则去除表达式中的括号;其中,可选的,数据运算规则可以为结合律等等,例如表达式为(a*b)*c,根据乘法结合律可变形为a*b*c;
若表达式中存在常数之间的运算,则计算常数之间的运算结果,并替换到表达式中;例如表达式为4*a*3*b,其中存在常数运算,可先计算常数之间的运算结果也即4*3,将表达式转换为12*a*b;
基于数学运算规则对表达式中的参数调整顺序,使得参数按照目标顺序排列;其中,可选的,数学运算规则可以为交换律等等,目标顺序可以是字母表顺序,例如表达式为x*a*c,根据交换律调整参数顺序后可转换为a*c*x,从而方便表达式之间的比较。
在上述任一实施例的基础上,在所述根据各所述操作数的表示形式从所述预设指令类别中确定目标类别时,还可包括:
若各所述操作数的表示形式中包括存储单元地址和常量,则确定所述目标类别为第三类别。
在本实施例中,在确定各操作数的表示形式后,经过判断确定各操作数的表示形式中包括存储单元地址和常量,也即存储单元中存储的数据与常量之间的运算,可确定目标类别为第三类别,例如常量const操作类型,以加法操作的指令类别为例,第三类别为addconstant,也即存储单元中存储的数据与常量之间的加法运算。
在上述实施例的基础上,如图5所示,本实施例提供一种指令生成方法,包括以下步骤:
S501、通过预设指令类别的统一接口接收指令参数;
其中指令参数包括至少两个操作数以及输出地址;
S502、根据指令参数确定各操作数的表示形式;
S503、判断各操作数的表示形式是否均为存储单元地址;
若各操作数的表示形式均为存储单元地址,则执行S504,否则执行S508;
S504、若各操作数的表示形式均为存储单元地址,则基于存储单元地址确定各操作数的数据形状;
根据各操作数的数据形状关系的不同情况分别执行S505、S506或S507;
S505、若各操作数之间的数据形状关系满足第一预设规则,则确定目标类别为第一类别;
S506、若各操作数之间的数据形状关系满足第二预设规则,则确定目标类别为第二类别;
S507、若各操作数之间的数据形状关系不满足预设规则,则输出错误提示信息;
S508、若各操作数的表示形式中包括存储单元地址和常量,则确定目标类别为第三类别;
S509、根据指令参数以及目标类别,生成对应的目标指令;
在S505、S506或S508确定目标类别后,可执行S509。
图6为本申请一个实施例提供的指令生成装置的结构示意图,如图6所示,本实施例提供的指令生成装置可以为编译器或者具有编译功能的其他电子设备,则本实施例提供的指令生成装置60包括:接口模块61、确定模块62、生成模块63。
其中,接口模块61,用于通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
确定模块62,用于根据所述指令参数确定各所述操作数的表示形式;
生成模块63,用于根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
在本申请的一个或多个实施例中,所述生成模块63在根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令时,用于:
根据各所述操作数的表示形式从所述预设指令类别中确定目标类别;
根据所述指令参数以及所述目标类别,生成对应的目标指令。
在本申请的一个或多个实施例中,所述生成模块63在根据各所述操作数的表示形式从所述预设指令类别中确定目标类别时,用于:
判断各所述操作数的表示形式是否均为存储单元地址;
若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状;
根据各所述操作数的数据形状确定所述目标类别。
在本申请的一个或多个实施例中,所述生成模块63在根据各所述操作数的数据形状确定所述目标类别时,用于:
若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别;或者
若各所述操作数之间的数据形状关系不满足预设规则,则输出错误提示信息。
在本申请的一个或多个实施例中,所述目标类别包括第一类别,所述预设规则包括第一预设规则,若各所述操作数之间的数据形状关系满足预设规则,则生成模块63在确定所述目标类别为所述预设规则对应的类别时,用于:
若各所述操作数之间的数据形状关系满足第一预设规则,则确定所述目标类别为所述第一类别。
在本申请的一个或多个实施例中,所述目标类别包括第二类别,所述预设规则还包括第二预设规则,若各所述操作数之间的数据形状关系满足预设规则,则生成模块63在确定所述目标类别为所述预设规则对应的类别时,还用于:
若各所述操作数之间的数据形状关系满足第二预设规则,则确定所述目标类别为所述第二类别。
在本申请的一个或多个实施例中,所述数据形状包括至少一个维度;所述生成模块63还用于:
分别比较各所述操作数的数据形状中每一对应维度的维度值;
若所述操作数的数据形状的至少一个维度的维度值均相同,则确定所述操作数的数据形状关系为满足第一预设规则;
若所述操作数的数据形状的至少一个维度中存在一个以上的维度值相同,其他维度值之间具有兼容关系,则确定所述操作数的数据形状满足第二预设规则。
在本申请的一个或多个实施例中,所述生成模块63还用于:
若各所述操作数的数据形状中任一对应维度的维度值均为常数,则通过比较相应维度的常数确定各所述操作数之间的数据形状关系;
若各所述操作数的数据形状中任一对应维度的维度值为表达式,则通过比较相应维度的各表达式确定各所述操作数之间的数据形状关系。
在本申请的一个或多个实施例中,若各所述操作数的数据形状中任一对应维度的维度值为表达式,所述生成模块63还用于:
按照预设的变换规则分别对各表达式进行变形,得到对应的变形后的表达式,所述变形后的表达式具有相同形式的表达;
通过比较变形后的各表达式确定各所述操作数之间的数据形状关系。
在本申请的一个或多个实施例中,所述预设的变换规则,包括以下规则中的一种或多种的组合:
对于任一表达式,若表达式中存在括号,则按照数学运算规则去除表达式中的括号;
若表达式中存在常数之间的运算,则计算常数之间的运算结果,并替换到表达式中;
基于数学运算规则对表达式中的参数调整顺序,使得参数按照目标顺序排列。
在本申请的一个或多个实施例中,所述生成模块63在根据各所述操作数的表示形式从所述预设指令类别中确定目标类别时,还用于:
若各所述操作数的表示形式中包括存储单元地址和常量,则确定所述目标类别为第三类别。
本实施例提供的指令生成装置可以执行图2-5所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本申请另一个实施例提供的指令生成装置的结构示意图,如图7所示,本申请实施例提供的指令生成装置70,包括:至少一个处理器71及存储器72;
存储器72存储计算机执行指令;
至少一个处理器71执行存储器72存储的计算机执行指令,使得至少一个处理器执行图2-5任意一个实施例提供的指令生成方法。
在一种可能的实现方式中,还公开了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被至少一个处理器执行时,实现图2及图3任意一个实施例提供的指令生成方法。
在一种可能的实现方式中,还公开了一种板卡,板卡可为设备端的板卡。图8示出本申请实施例的一种板卡60的结构示意图。如图8所示,板卡60包括芯片601,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡60适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
芯片601通过对外接口装置602与外部设备603相连接。外部设备603例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备603通过对外接口装置602传递至芯片601。芯片601的计算结果可以经由对外接口装置602传送回外部设备603。根据不同的应用场景,对外接口装置602可以具有不同的接口形式,例如PCIe接口等。
板卡60还包括用于存储数据的存储器件604,其包括一个或多个存储单元605。存储器件604通过总线与控制器件606和芯片601进行连接和数据传输。板卡60中的控制器件606配置用于对芯片601的状态进行调控。为此,在一个应用场景中,控制器件606可以包括单片机(Micro Controller Unit,MCU)。
在一种可能的实现方式中,还提供了一种组合处理装置,图9是示出此实施例的芯片601中的组合处理装置的结构图。如图9中所示,组合处理装置70包括计算装置701、接口装置702、处理装置703和存储装置704。
计算装置701配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置702与处理装置703进行交互,以共同完成用户指定的操作。
接口装置702用于在计算装置701与处理装置703间传输数据和控制指令。例如,计算装置701可以经由接口装置702从处理装置703中获取输入数据,写入计算装置701片上的存储装置。进一步,计算装置701可以经由接口装置702从处理装置703中获取控制指令,写入计算装置701片上的控制缓存中。替代地或可选地,接口装置702也可以读取计算装置701的存储装置中的数据并传输给处理装置703。
处理装置703作为通用的处理装置,执行包括但不限于数据搬运、对计算装置701的开启和/或停止等基本控制。根据实现方式的不同,处理装置703可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前,仅就本申请的计算装置701而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置701和处理装置703整合共同考虑时,二者视为形成异构多核结构。
存储装置704用以存储待处理的数据,其可以是DRAM704,为DDR内存,大小通常为16G或更大,用于保存计算装置701和/或处理装置703的数据。
图10示出了计算装置701为单核的内部结构示意图。单核计算装置801用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,单核计算装置801包括三大模块:控制模块81、运算模块82及存储模块83。
控制模块81用以协调并控制运算模块82和存储模块83的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)811及指令译码单元(instructiondecode unit,IDU)812。取指单元811用以获取来自处理装置1203的指令,指令译码单元812则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块82和存储模块83。
运算模块82包括向量运算单元821及矩阵运算单元822。向量运算单元821用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元822负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块83用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)831、参数存储单元(weight RAM,WRAM)832、直接内存访问模块(direct memory access,DMA)833。NRAM 831用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 832则用以存储深度学习网络的卷积核,即权值;DMA 833通过总线84连接DRAM 704,负责单核计算装置801与DRAM 704间的数据搬运。
图11示出了计算装置701为多核的内部结构示意图。多核计算装置901采用分层结构设计,多核计算装置901作为一个片上系统,其包括至少一个集群(cluster),每个集群又包括多个处理器核,换言之,多核计算装置901是以片上系统-集群-处理器核的层次所构成的。
以片上系统的层级来看,如图11所示,多核计算装置901包括外部存储控制器901、外设通信模块902、片上互联模块903、同步模块904以及多个集群905。
外部存储控制器901可以有多个,在图中示例性地展示2个,其用以响应处理器核发出的访问请求,访问外部存储设备,例如图9中的DRAM 704,从而自片外读取数据或是将数据写入。外设通信模块902用以通过接口装置702接收来自处理装置703的控制信号,启动计算装置701执行任务。片上互联模块903将外部存储控制器901、外设通信模块902及多个集群905连接起来,用以在各个模块间传输数据和控制信号。同步模块904是一种全局同步屏障控制器(global barrier controller,GBC),用以协调各集群的工作进度,确保信息的同步。多个集群905是多核计算装置901的计算核心,在图中示例性地展示4个,4个集群905形成如图1中的4个象限。随着硬件的发展,本申请的多核计算装置901还可以包括8个、16个、64个、甚至更多的集群905。集群905用以高效地执行深度学习算法。
以集群的层级来看,如图11所示,每个集群905包括多个处理器核(IPU core)906及一个存储核(MEM core)907。示例性的,每个集群905包括4个处理器核和1个存储器,存储器可以为DRAM704。每个处理器核相当于图1中的一个运算单元,每个存储器相当于图1中的一个存储单元。
处理器核906在图中示例性地展示4个,本申请不限制处理器核906的数量。其内部架构如图12所示。每个处理器核906类似于图10的单核计算装置801,同样包括三大模块:控制模块1001、运算模块1002及存储模块1003。控制模块1001、运算模块1002及存储模块1003的功用及结构大致与控制模块81、运算模块82及存储模块83相同,控制模块1001包括取指单元10011和指令译码单元10012。运算模块1002包括向量运算单元10021和矩阵运算单元10022。不再赘述。需特别说明的是,存储模块1003包括输入/输出直接内存访问模块(input/output direct memory access,IODMA)10033、搬运直接内存访问模块(movedirect memory access,MVDMA)10034。IODMA10033通过广播总线909控制NRAM 10031/WRAM10032与DRAM 704的访存;MVDMA 10034则用以控制NRAM 10031/WRAM 10032与存储单元(SRAM)908的访存。
回到图9,存储核907主要用以存储和通信,即存储处理器核906间的共享数据或中间结果、以及执行集群905与DRAM 704之间的通信、集群905间彼此的通信、处理器核906间彼此的通信等。在其他实施例中,存储核907具有标量运算的能力,用以执行标量运算。
存储核907包括SRAM 908、广播总线909、集群直接内存访问模块(cluster directmemory access,CDMA)910及全局直接内存访问模块(global direct memory access,GDMA)911。SRAM 908承担高性能数据中转站的角色,在同一个集群905内不同处理器核906之间所复用的数据不需要通过处理器核906各自向DRAM 704获得,而是经SRAM 908在处理器核906间中转,存储核907只需要将复用的数据从SRAM 908迅速分发给多个处理器核906即可,以提高核间通讯效率,亦大大减少片上片外的输入/输出访问。
广播总线909、CDMA 910及GDMA 911则分别用来执行处理器核906间的通信、集群905间的通信和集群905与DRAM 704的数据传输。以下将分别说明。
广播总线909用以完成集群905内各处理器核906间的高速通信,此实施例的广播总线909支持核间通信方式包括单播、多播与广播。单播是指点对点(例如单一处理器核至单一处理器核)的数据传输,多播是将一份数据从SRAM 908传输到特定几个处理器核906的通信方式,而广播则是将一份数据从SRAM 908传输到所有处理器核906的通信方式,属于多播的一种特例。
CDMA 910用以控制在同一个计算装置701内不同集群905间的SRAM908的访存。
GDMA 911与外部存储控制器901协同,用以控制集群905的SRAM 908到DRAM 704的访存,或是将数据自DRAM 704读取至SRAM 908中。从前述可知,DRAM 704与NRAM 10031或WRAM 10032间的通信可以经由2个渠道来实现。第一个渠道是通过IODAM 10033直接联系DRAM 704与NRAM 10031或WRAM 10032;第二个渠道是先经由GDMA 911使得数据在DRAM 704与SRAM 908间传输,再经过MVDMA 10034使得数据在SRAM908与NRAM 10031或WRAM 10032间传输。虽然表面上看来第二个渠道需要更多的元件参与,数据流较长,但实际上在部分实施例中,第二个渠道的带宽远大于第一个渠道,因此DRAM 704与NRAM 10031或WRAM 10032间的通信通过第二个渠道可能更有效率。本申请的实施例可根据本身硬件条件选择数据传输渠道。
在其他实施例中,GDMA 911的功能和IODMA 10033的功能可以整合在同一部件中。本申请为了方便描述,将GDMA 911和IODMA 10033视为不同部件,对于本领域技术人员来说,只要其实现的功能以及达到的技术效果与本申请类似,即属于本申请的保护范围。进一步地,GDMA 911的功能、IODMA 10033的功能、CDMA 910的功能、MVDMA 10034的功能亦可以由同一部件来实现。
依据以下条款可更好地理解前述内容(The foregoing may be betterunderstood in view of the following clauses):
条款1、一种指令生成方法,包括:
通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
根据所述指令参数确定各所述操作数的表示形式;
根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
条款2、根据条款1所述的方法,所述根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令,包括:
根据各所述操作数的表示形式从所述预设指令类别中确定目标类别;
根据所述指令参数以及所述目标类别,生成对应的目标指令。
条款3、根据条款2所述的方法,所述根据各所述操作数的表示形式从所述预设指令类别中确定目标类别,包括:
判断各所述操作数的表示形式是否均为存储单元地址;
若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状;
根据各所述操作数的数据形状确定所述目标类别。
条款4、根据条款3所述的方法,所述根据各所述操作数的数据形状确定所述目标类别,包括:
若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别;或者
若各所述操作数之间的数据形状关系不满足预设规则,则输出错误提示信息。
条款5、根据条款4所述的方法,所述目标类别包括第一类别,所述预设规则包括第一预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,包括:
若各所述操作数之间的数据形状关系满足第一预设规则,则确定所述目标类别为所述第一类别。
条款6、根据条款4或5所述的方法,所述目标类别包括第二类别,所述预设规则还包括第二预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,还包括:
若各所述操作数之间的数据形状关系满足第二预设规则,则确定所述目标类别为所述第二类别。
条款7、根据条款4或5所述的方法,所述数据形状包括至少一个维度;所述方法还包括:
分别比较各所述操作数的数据形状中每一对应维度的维度值;
若所述操作数的数据形状的至少一个维度的维度值均相同,则确定所述操作数的数据形状关系为满足第一预设规则;
若所述操作数的数据形状的至少一个维度中存在一个以上的维度值相同,其他维度值之间具有兼容关系,则确定所述操作数的数据形状满足第二预设规则。
条款8、根据条款4或5所述的方法,所述方法还包括:
若各所述操作数的数据形状中任一对应维度的维度值均为常数,则通过比较相应维度的常数确定各所述操作数之间的数据形状关系;
若各所述操作数的数据形状中任一对应维度的维度值为表达式,则通过比较相应维度的各表达式确定各所述操作数之间的数据形状关系。
条款9、根据条款8所述的方法,若各所述操作数的数据形状中任一对应维度的维度值为表达式,所述方法还包括:
按照预设的变换规则分别对各表达式进行变形,得到对应的变形后的表达式,所述变形后的表达式具有相同形式的表达;
通过比较变形后的各表达式确定各所述操作数之间的数据形状关系。
条款10、根据条款9所述的方法,所述预设的变换规则,包括以下规则中的一种或多种的组合:
对于任一表达式,若表达式中存在括号,则按照数学运算规则去除表达式中的括号;
若表达式中存在常数之间的运算,则计算常数之间的运算结果,并替换到表达式中;
基于数学运算规则对表达式中的参数调整顺序,使得参数按照目标顺序排列。
条款11、根据条款2所述的方法,所述根据各所述操作数的表示形式从所述预设指令类别中确定目标类别,还包括:
若各所述操作数的表示形式中包括存储单元地址和常量,则确定所述目标类别为第三类别。
条款12、一种指令生成装置,包括:
接口模块,用于通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
确定模块,用于根据所述指令参数确定各所述操作数的表示形式;
生成模块,用于根据各所述操作数的表示形式以及所述指令参数,生成对应的目标指令。
条款13、一种指令生成装置,包括:至少一个处理器及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如条款1-11任一项所述的方法。
条款14、一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被至少一个处理器执行时,实现如条款1-11任一项所述的方法。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本申请所必须的。
进一步需要说明的是,虽然流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
应该理解,上述的装置实施例仅是示意性的,本申请的装置还可通过其它的方式实现。例如,上述实施例中单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
另外,若无特别说明,在本申请各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random AccessMemory)、静态随机存取存储器SRAM(Static Random-Access Memory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

Claims (13)

1.一种指令生成方法,其特征在于,包括:
通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
根据所述指令参数确定各所述操作数的表示形式;
若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状,分别比较各所述操作数的数据形状中每一对应维度的维度值,以在所述预设指令类别中确定目标类别;其中,所述数据形状包括至少一个维度,每一维度的维度值为常数或表达式;
根据所述指令参数以及所述目标类别,生成对应的目标指令。
2.根据权利要求1所述的方法,其特征在于,还包括:
判断各所述操作数的表示形式是否均为存储单元地址。
3.根据权利要求2所述的方法,其特征在于,所述分别比较各所述操作数的数据形状中每一对应维度的维度值,以在所述预设指令类别中确定目标类别,包括:
基于所述维度值的比较结果,判断各所述操作数之间的数据形状关系是否满足预设规则;
若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别;或者
若不满足,则输出错误提示信息。
4.根据权利要求3所述的方法,其特征在于,所述目标类别包括第一类别,所述预设规则包括第一预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,包括:
若各所述操作数之间的数据形状关系满足第一预设规则,则确定所述目标类别为所述第一类别。
5.根据权利要求3或4所述的方法,其特征在于,所述目标类别包括第二类别,所述预设规则还包括第二预设规则,所述若各所述操作数之间的数据形状关系满足预设规则,则确定所述目标类别为所述预设规则对应的类别,还包括:
若各所述操作数之间的数据形状关系满足第二预设规则,则确定所述目标类别为所述第二类别。
6.根据权利要求3或4所述的方法,其特征在于,基于所述维度值的比较结果,判断各所述操作数之间的数据形状关系是否满足预设规则,包括:
若所述操作数的数据形状的至少一个维度的维度值均相同,则确定所述操作数的数据形状关系为满足第一预设规则;
若所述操作数的数据形状的至少一个维度中存在一个以上的维度值相同,其他维度值之间具有兼容关系,则确定所述操作数的数据形状满足第二预设规则。
7.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
若各所述操作数的数据形状中任一对应维度的维度值均为常数,则通过比较相应维度的常数确定各操作数之间的数据形状关系;
若各所述操作数的数据形状中任一对应维度的维度值为表达式,则通过比较相应维度的各表达式确定各操作数之间的数据形状关系。
8.根据权利要求7所述的方法,其特征在于,若各所述操作数的数据形状中任一对应维度的维度值为表达式,所述方法还包括:
按照预设的变换规则分别对各表达式进行变形,得到对应的变形后的表达式,所述变形后的表达式具有相同形式的表达;
通过比较变形后的各表达式确定各所述操作数之间的数据形状关系。
9.根据权利要求8所述的方法,其特征在于,所述预设的变换规则,包括以下规则中的一种或多种的组合:
对于任一表达式,若表达式中存在括号,则按照数学运算规则去除表达式中的括号;
若表达式中存在常数之间的运算,则计算常数之间的运算结果,并替换到表达式中;
基于数学运算规则对表达式中的参数调整顺序,使得参数按照目标顺序排列。
10.根据权利要求1所述的方法,其特征在于,还包括:
若各所述操作数的表示形式中包括存储单元地址和常量,则确定所述目标类别为第三类别。
11.一种指令生成装置,其特征在于,包括:
接口模块,用于通过预设指令类别的统一接口接收指令参数;其中所述指令参数包括至少两个操作数以及输出地址;
确定模块,用于根据所述指令参数确定各所述操作数的表示形式;
生成模块,用于若各所述操作数的表示形式均为存储单元地址,则基于存储单元地址确定各所述操作数的数据形状,分别比较各所述操作数的数据形状中每一对应维度的维度值,以在所述预设指令类别中确定目标类别;其中,所述数据形状包括至少一个维度,每一维度的维度值为常数或表达式;
根据所述指令参数以及所述目标类别,生成对应的目标指令。
12.一种指令生成装置,其特征在于,包括:至少一个处理器及存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1-10任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被至少一个处理器执行时,实现如权利要求1-10任一项所述的方法。
CN202211618182.XA 2022-12-15 2022-12-15 指令生成方法、装置及存储介质 Active CN118210552B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211618182.XA CN118210552B (zh) 2022-12-15 2022-12-15 指令生成方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211618182.XA CN118210552B (zh) 2022-12-15 2022-12-15 指令生成方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN118210552A CN118210552A (zh) 2024-06-18
CN118210552B true CN118210552B (zh) 2025-11-14

Family

ID=91451153

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211618182.XA Active CN118210552B (zh) 2022-12-15 2022-12-15 指令生成方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN118210552B (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0652501B2 (ja) * 1989-09-20 1994-07-06 株式会社日立製作所 データ処理装置
US20130311753A1 (en) * 2012-05-19 2013-11-21 Venu Kandadai Method and device (universal multifunction accelerator) for accelerating computations by parallel computations of middle stratum operations
WO2019005088A1 (en) * 2017-06-30 2019-01-03 Intel Corporation HETEROGENEOUS MULTIPLIER
CN111782580B (zh) * 2020-06-30 2024-03-01 北京百度网讯科技有限公司 复杂计算装置、方法、人工智能芯片和电子设备
WO2022000371A1 (zh) * 2020-07-01 2022-01-06 深圳市大疆创新科技有限公司 接口生成方法、装置及计算机可读存储介质
CN115437637B (zh) * 2021-06-02 2026-01-09 华为技术有限公司 一种编译方法及相关装置

Also Published As

Publication number Publication date
CN118210552A (zh) 2024-06-18

Similar Documents

Publication Publication Date Title
CN113837922B (zh) 计算装置、数据处理方法及相关产品
CN112799726A (zh) 数据处理装置、方法及相关产品
CN116185942A (zh) 数据处理方法、装置、存储介质以及电子设备
Huang et al. IECA: An in-execution configuration CNN accelerator with 30.55 GOPS/mm² area efficiency
CN114580606A (zh) 数据处理方法、装置、计算机设备和存储介质
CN115952848A (zh) 卷积运算电路、编译方法及相关产品
CN112686379A (zh) 集成电路装置、电子设备、板卡和计算方法
CN113469365B (zh) 基于神经网络模型的推理和编译方法及其相关产品
CN113469337B (zh) 用于优化神经网络模型的编译方法及其相关产品
CN117742715A (zh) 访存越界检测方法、装置及存储介质
CN116090519A (zh) 卷积算子的编译方法及相关产品
CN118210552B (zh) 指令生成方法、装置及存储介质
CN115904681A (zh) 任务调度方法、装置及相关产品
CN113742266B (zh) 集成电路装置、电子设备、板卡和计算方法
CN118363754A (zh) 单个算子在多核处理器上的拆分方法及相关产品
CN117648091A (zh) 计算图的编译方法及相关产品
CN119105801A (zh) 张量数据处理方法、装置及存储介质
CN114692844B (zh) 数据处理装置、数据处理方法及相关产品
CN114692847B (zh) 数据处理电路、数据处理方法及相关产品
CN116385714A (zh) 图像处理方法及相关产品
CN117950624A (zh) 基于计算装置的数据计算方法、装置及相关产品
CN117539823A (zh) 芯片算力控制方法、芯片及存储介质
CN113791996B (zh) 集成电路装置、电子设备、板卡和计算方法
CN114692846B (zh) 数据处理装置、数据处理方法及相关产品
CN115203121A (zh) 基于芯片的数据处理方法、装置及相关产品

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