CN116700729A - 代码编译方法及相关装置 - Google Patents

代码编译方法及相关装置 Download PDF

Info

Publication number
CN116700729A
CN116700729A CN202310473190.8A CN202310473190A CN116700729A CN 116700729 A CN116700729 A CN 116700729A CN 202310473190 A CN202310473190 A CN 202310473190A CN 116700729 A CN116700729 A CN 116700729A
Authority
CN
China
Prior art keywords
scalar
instruction set
target
vector
code
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.)
Pending
Application number
CN202310473190.8A
Other languages
English (en)
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.)
Zhuhai Core Power Technology Co ltd
Original Assignee
Zhuhai Core Power Technology 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 Zhuhai Core Power Technology Co ltd filed Critical Zhuhai Core Power Technology Co ltd
Priority to CN202310473190.8A priority Critical patent/CN116700729A/zh
Publication of CN116700729A publication Critical patent/CN116700729A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4432Reducing the energy consumption
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本申请提供了一种代码编译方法及相关装置,应用于电子设备的中央处理器,电子设备包括中央处理器和并行处理器,并行处理器包括标量指令处理单元和矢量指令处理单元,方法包括:获取待编译的目标中间代码,目标中间代码的代码类型为目标类型,目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;将目标中间代码编译为可被并行处理器执行的目标指令集。如此,开发者在从事对上述并行处理器的相关开发工作时,可以采用简单易懂的中间代码类型作为编译过程的中间表示,降低了开发难度,促使软件应用在上述并行处理器上的开发,以实现处理速度更快、功耗更低的并行处理过程。

Description

代码编译方法及相关装置
技术领域
本申请属于新一代信息技术产业的一般编码、译码或代码转换技术领域,具体涉及一种代码编译方法及相关装置。
背景技术
在对数据的并行处理中,并行处理器所执行的指令集中既存在与数据处理相关的矢量指令,也存在与数据处理无关的标量指令,对于传统的并行处理器(如图形处理器GPU)而言,其遵循单指令多线程(Single Instruction Multiple Thread,SIMT)架构同等对待执行每一条指令,而不会去区分指令中的矢量指令和标量指令。这样一来,标量指令也会在多线程中重复运行,而由于标量指令与数据处理无关,所以标量指令的重复运行是毫无意义的,导致传统的并行处理器存在浪费运行时间和功耗的问题。
目前,存在一种新型的并行处理器,包含能够分别执行标量指令和矢量指令的处理单元,以实现对数据更快速、更低功耗的并行处理。但由于硬件架构的差异性,导致针对传统的并行处理器的编译器系统无法适用于该新型的并行处理器。
传统的编译器系统例如LLVM(Low Level Virtual Machine,底层虚拟机)编译器系统,是将源代码编译成中间表示(Intermediate Representation,IR)代码,例如LLVMIR,再将中间表示代码编译成并行处理器可执行的机器码。但是,LLVM IR是一种很复杂的机器抽象级的语言,对于开发者而言,使用这种类型的中间代码在对上述新型的并行处理器进行相关开发工作时具有很大的工作难度。因此,需要一种中间代码简单、且能够将简单的中间代码转换成可被上述新型的并行处理器执行的指令集的编译方案。
发明内容
本申请提供了一种代码编译方法及相关装置,以期降低开发者对新型的并行处理器的开发难度,使得电子设备能够实现处理速度更快、功耗更低的并行处理过程。
第一方面,本申请实施例提供了一种代码编译方法,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述并行处理器包括标量指令处理单元和矢量指令处理单元组,所述方法包括:
获取待编译的目标中间代码,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;
将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
第二方面,本申请实施例提供了一种代码编译装置,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述并行处理器包括标量指令处理单元和矢量指令处理单元组,所述装置包括:
获取单元,用于获取待编译的目标中间代码,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;
编译单元,用于将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
第三方面,本申请实施例提供了一种电子设备,包括中央处理器、并行处理器、存储器以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述中央处理器执行,所述程序包括用于执行如本申请实施例第一方面中的步骤的指令。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序/指令,所述计算机程序/指令被中央处理器执行时实现本申请实施例第一方面中的步骤。
可以看出,本申请实施例中,电子设备的中央处理器首先获取待编译的代码类型为目标类型的目标中间代码,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码,然后将目标中间代码编译为可被并行处理器执行的目标指令集。如此,开发者在从事对上述并行处理器的相关开发工作时,可以采用简单易懂的中间代码类型作为编译过程的中间表示,降低了开发难度,促使软件应用在上述并行处理器上的开发,以实现处理速度更快、功耗更低的并行处理过程。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种电子设备的结构框图;
图2是本申请实施例提供的一种代码编译方法的流程示意图;
图3是本申请实施例提供的一种代码编译装置的功能单元组成框图;
图4是本申请实施例提供的电子设备的另一种结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
请参阅图1,图1是本申请实施例提供的一种电子设备的结构框图。如图所示,所述电子设备10包括中央处理器11和并行处理器12,所述中央处理器11和所述并行处理器12连接,以实现数据的传输。其中,所述并行处理器12包括标量指令处理单元121和矢量指令处理单元组122,所述标量指令处理单元121和所述矢量指令处理单元组122连接,以实现数据的传输。所述并行处理器12具体可以是可重构并行处理器RPP(Reconfigurable ParallelProcessing),所述标量指令处理单元121具体可以是RPP中的一种处理器核,所述矢量指令处理单元组122具体可以是RPP中的另一种处理器核,其中可以包括多个矢量指令处理单元。所述标量指令处理单元121能够以更高的速度、不重复地执行标量指令,并且还能够将矢量指令硬化或配置到矢量指令处理单元组122中,在矢量指令被硬化或配置到所述矢量指令处理单元组122后,所述多个矢量指令处理单元同时并行处理数据,以实现更高速、更低功耗的并行处理。
下面介绍本申请实施例提供的一种代码编译方法。
请参阅图2,图2是本申请实施例提供的一种代码编译方法的流程示意图,所述方法应用于如图1所示的中央处理器11中,如图2所示,所述方法包括:
步骤201,获取待编译的目标中间代码。
其中,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码,所述预设的汇编语言集合中的汇编语言是计算机领域内常用的多种汇编语言,例如C语言、python等,这些汇编语言符合人的代码编写习惯,因此对于开发者而言是简单易懂的。在本示例中,所述目标中间代码的代码格式与上述任意一种汇编语言对应的代码格式相同,例如,所述目标中间代码可以是采用C语言的代码格式的中间代码。
在一个可能的示例中,所述目标中间代码为用户在所述电子设备上直接输入的代码类型为所述目标类型的中间代码。
其中,由于目标中间代码的代码类型为目标类型,对于开发者来说是简单易懂、可编写出来的,因此在本示例中,开发者可以人工编写出目标中间代码,并将编写出的目标中间代码输入到电子设备中,由中央处理器获取并进行后续编译工作。
可见,本示例中,开发者/用户可以人工编写目标中间代码并交由中央处理器进行后续编译工作,这对于偏好于汇编的工作人员或只能使用汇编的场景来说是非常有必要的,拓宽了应用场景,降低开发难度。
在一个可能的示例中,所述目标中间代码为用户在所述电子设备上直接输入的源代码经过编译后得到的代码类型为所述目标类型的中间代码。
其中,所述源代码具体可以是采用计算机统一设备架构(Compute UnifiedDevice Architecture,CUDA)模型编写的源代码,该源代码所经过的编译过程具体可以是中央处理器所执行的前端编译阶段。
示例性地,本申请实施例所涉及的并行处理器为可重构并行处理器RPP,用于实现本申请实施例所提供的编译方法的软件系统可以称为RPP编译系统,RPP编译系统是在LLVM编译器系统的基础上开发和改造得到的,因此RPP编译器系统在结构上也符合LLVM编译器系统的特点,即包含前端编译和后端编译两个阶段。其中,前端编译阶段用于将开发者编写的源代码转换为中间代码,后端编译阶段用于将中间代码转换为目标设备可执行的指令集,即机器码。
在现有的LLVM编译器系统中,源代码经过前端编译阶段后所得到的中间代码是LLVM IR,是一种抽象的中间语言,对于不熟悉LLVM架构的开发者来说,使用这种类型的中间代码在对RPP进行相关开发工作时具有很大的工作难度。而在本申请实施例中,负责前端编译阶段的是基于LLVM编译器系统开发改造得到的RPP前端编译器,RPP前端编译器可将开发者编写的源代码转换为代码类型为目标类型的中间代码,称为RPP中间码,RPP中间码所采用的代码格式是开发者在编写源代码时常用的多种汇编语言对应的代码格式,例如C语言、python等,对于开发者而言通俗易懂。
可见,本示例中,对于开发者/用户直接编写源代码的一般场景中,中央处理器可以对开发者/用户所编写出的源代码执行适用于新型的并行处理器的前端编译流程,使源代码转换成简单易懂的目标中间代码,降低开发难度。
步骤202,将所述目标中间代码编译为可被所述并行处理器执行的目标指令集。
其中,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
以传统的编译器系统为LLVM编译器系统,本申请实施例所提供的编译方法对应的软件系统为RPP编译系统为例,RPP编译系统延续了LLVM编译器系统的优点,可以将前端编译阶段和后端编译阶段分开,使得每个阶段可以在不同的计算机上执行。在一个可能的示例中,RPP前端编译阶段可以是在开发者计算机中进行的,以将源代码转换为目标中间代码,然后开发者计算机将目标中间代码发送到用户计算机上,由用户计算机完成RPP后端编译阶段得到可被用户计算机执行的目标指令集,如此,可以在指令能被用户计算机正常执行的同时避免将源代码暴露到用户计算机中。可以理解的是,上述开发者计算机和用户计算机均可以是本申请实施例所涉及的电子设备。
在一个可能的示例中,所述目标中间代码的代码格式不符合静态单赋值格式,所述将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,包括:对所述目标中间代码执行代码格式转换操作,得到标准中间代码,所述标准中间代码的代码格式符合所述静态单赋值格式;将所述标准中间代码编译为所述目标指令集。
其中,静态单赋值(Static Single Assignment,SSA)格式是指中间代码中的变量只能被赋值一次,而目标中间代码的代码格式并非SSA格式,因为这样人工编写会非常简便,一个寄存器可以赋值多次,适配开发者的思维逻辑。根据LLVM后端编译器的特性,当中间代码符合SSA格式时,才能进入LLVM后端编译流程,而RPP后端编译器是基于LLVM后端编译器开发和改造而来的,因此目标中间代码需要符合SSA格式才能进行后续编译流程。在本示例中,中央处理器可以将不符合SSA格式的目标中间代码进行格式转换,使其转换成符合SSA格式的标准中间代码,这样,开发者在编写中间代码时,仍可按照简便方式去编写,将格式转换的操作交由中央处理器执行即可,降低了开发难度。
可见,本示例中,电子设备的中央处理器可以将不符合静态单赋值格式的目标中间代码转换成符合静态单赋值格式的标准中间代码,保证后续编译流程的正常进行,也使得开发者能够以更简单的方式编写中间代码,降低开发难度。
在一个可能的示例中,在所述对所述目标中间代码执行代码格式转换操作,得到标准中间代码之前,所述方法还包括:解析所述目标中间代码,将所述目标中间代码转换成内存结构化数据。
其中,通过前端编译阶段得到的中间代码或者直接由开发者人工编写的中间代码仍是文本格式,因此需要将处于文本格式的中间代码解析成内存结构化数据,具体可以是解析成符合语法树结构的数据,以使得处于文本格式的代码能够被处理器执行后续操作。可以理解的是,在本示例中,中央处理器对目标中间代码执行代码格式转换操作,实质上是对目标中间代码对应的内存结构化数据进行处理,以改变目标中间代码的格式。
在一个可能的示例中,所述将所述标准中间代码编译为所述目标指令集,包括:标记出所述标准中间代码中的标量中间代码和矢量中间代码;将所述标量中间代码转换为待优化的标量指令集,以及将所述矢量中间代码转换为待优化的矢量指令集,得到待优化的标量矢量混合指令集;将所述待优化的标量矢量混合指令集编译为所述目标指令集。
其中,由于目标中间代码的代码格式是符合开发者的汇编习惯的,因此在代码编写时,开发者只需要认为目标中间代码是在一种处理单元(例如标量指令处理单元)中执行的,此时只需要将隐藏在其中的另一种指令(例如矢量指令)标记出来即可。所述标记出所述标准中间代码中的标量中间代码和矢量中间代码具体可以是通过分析标准中间代码中的每条指令的内容是否与数据处理相关,将与数据处理相关的指令标记出来,即矢量中间代码,剩下的未被标记的指令即为标量中间代码。
其中,将标量中间代码转换为待优化的标量指令集,以及将所述矢量中间代码转换为待优化的矢量指令集的过程被称为指令选择。在传统的LLVM后端编译过程中,由于输入到指令选择阶段的代码是LLVM IR,是一种复杂的语言,因此需要借助预设的指令选择模板来实现中间代码到待优化的指令集的指令选择,而在本申请实施例中,输入到指令选择阶段的代码是符合常用汇编语言的、简单易懂的、且被标记出标量类型和矢量类型的中间代码,因此在指令选择时,中央处理器无需借助指令选择模板,而是可以基于上述常用的汇编语言和常用的指令选择方式直接将标量中间代码转换成待优化的标量指令集,以及将矢量中间代码转换成待优化的矢量指令集。其中,该步骤既可以由通过程序交由中央处理器自动执行,也可以由开发者手动转换,例如,在得到标量中间代码和矢量中间代码后,开发者可以自己将各个类型的中间代码翻译成对应类型的指令集,再将翻译后的指令集重新输入到电子设备中执行后续编译流程,由于中间代码格式的优越性,该过程对于专业的开发者来说是毫无难度的,称为人工指令选择。
其中,在将所述矢量中间代码转换为待优化的矢量指令集时,矢量指令中的条件跳转指令所选择的是伪指令,然而矢量指令是在矢量指令处理单元组中执行的,矢量指令处理单元组中的多个矢量指令处理单元对应依赖SIMT机制的多个同步线程,是无法实现条件跳转,因为不同线程运行时条件也不尽相同,导致有的线程需要跳转,有的线程无需跳转,这违背了SIMT的原则。因此,本示例中,在对矢量指令中的条件跳转指令进行选择时,可以采用Predicate机制,可以在不进行条件跳转的情况下实现相同的语义效果,从而解决上述问题。
可见,本示例中,电子设备的中央处理器可以将标准中间代码中的标量中间代码和矢量中间代码都标记出来,并将各个类型的中间代码选择成对应的指令集,以得到待优化的标量矢量混合指令集并进入后续的编译流程,最终得到可被新型的并行处理器执行的目标指令集。同时,由于目标中间代码的代码格式的优越性,使得开发者可以人工进行指令选择阶段,拓展了应用范围,提高了编译系统的灵活性。
在一个可能的示例中,所述将所述待优化的标量矢量混合指令集编译为所述目标指令集,包括:根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集;根据所述矢量指令处理单元组对应的矢量物理寄存器对所述待优化的矢量指令集中的多个待优化的矢量指令执行寄存器分配操作,得到参考矢量指令集;将由所述参考标量指令集和所述参考矢量指令集组成的参考标量矢量混合指令集编译为所述目标指令集。
其中,标量指令处理单元和矢量指令处理单元组都有各自的物理寄存器和指令集,上述寄存器分配操作实际上是将指令中的虚拟寄存器转换成对应的物理寄存器的过程,从而使指令也发生转换,即从待优化的指令集变为参考指令集。根据传统的LLVM后端编译过程,LLVM IR在指令选择后、寄存器分配前还需要经过多个优化阶段(pass),而在本示例中,经过指令选择得到的待优化的标量矢量混合指令集在指令形式上已经符合了进行物理寄存器分配的条件,因此在经过指令选择后,中央处理器可以直接对指令集执行寄存器分配操作,省去了中间的多个优化阶段。
可见,本示例中,电子设备的中央处理器在得到待优化的标量矢量混合指令集后,可以直接对其中的标量指令集和矢量指令集分别执行对应类型的寄存器分配,将指令中的虚拟寄存器转换为物理寄存器,以建立指令与硬件的对应关系,相较于传统的后端编译流程,可以在构建出适用于新型的并行处理器的编译方案的同事省去多个优化阶段,提高编译效率。
在一个可能的示例中,所述根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集,包括:根据预设的标量寄存器分配算法将所述待优化的标量指令集中的第一标量指令集分配到所述标量物理寄存器中,得到第一参考标量指令集,所述第一标量指令集对应的标量虚拟寄存器的数量和所述标量物理寄存器的数量相同;将所述待优化的标量指令集中的第二标量指令集分配到所述标量指令处理单元对应的堆栈空间中,得到第二参考标量指令集,所述第二标量指令集是指由所述待优化的标量指令集中除所述第一标量指令集之外的标量指令组成的指令集;根据所述第一参考标量指令集和所述第二参考标量指令集确定出所述参考标量指令集。
其中,所述预设的标量寄存器分配算法可以是开发者基于标量指令集中不同标量指令的重要性程度进行预设的,例如,将标量指令集中的每个标量指令按照重要性程度进行排序,将排序在前的多个标量指令组成所述第一标量指令集,其中,所述重要性程度可以是指电子设备调用该指令的次数或频率。若标量指令集中还存在其他标量指令,即所述第二标量指令集,表明该电子设备的标量物理寄存器是不够分配的,此时需要将第二标量指令集分配至标量指令处理单元对应的堆栈空间中。需要说明的是,在传统硬件架构下,由于无需区分指令中的标量指令和矢量指令,因此传统的堆栈空间也是一个整体,当寄存器不够分配时,剩下的指令就会被分配到这个整体的堆栈空间,但很显然这种方式并不适合本申请涉及的新型的并行处理器架构;因此,与区分标量物理寄存器和矢量物理寄存器相同地,在本申请实施例中,需要将上述堆栈空间也分割为标量指令处理单元对应的堆栈空间和矢量指令处理单元组对应的堆栈空间,并将未分配到物理寄存器的指令分配到对应的堆栈空间中,以确保编译程序的正常运行。
可见,本示例中,当标量物理寄存器不够分配时,中央处理器可以将剩余的标量指令集分配到标量指令处理单元对应的堆栈空间中,以建立所有标量指令与硬件的对应关系,确保编译程序的正常运行。
在一个可能的示例中,所述根据所述矢量指令处理单元组对应的矢量物理寄存器对所述待优化的矢量指令集中的多个待优化的矢量指令执行寄存器分配操作,得到参考矢量指令集,包括:根据预设的矢量寄存器分配算法将所述待优化的矢量指令集中的第一矢量指令集分配到所述矢量物理寄存器中,得到第一参考矢量指令集,所述第一矢量指令集对应的矢量虚拟寄存器的数量和所述矢量物理寄存器的数量相同;将所述待优化的矢量指令集中的第二矢量指令集分配到所述矢量指令处理单元组对应的堆栈空间中,得到第二参考矢量指令集,所述第二矢量指令集是指由所述待优化的矢量指令集中除所述第一矢量指令集之外的矢量指令组成的指令集;根据所述第一参考矢量指令集和所述第二参考矢量指令集确定出所述参考矢量指令集。
其中,与上述标量物理寄存器的分配方式相同地,当矢量物理寄存器不够分配时,中央处理器会将剩余的矢量指令分配到矢量指令处理单元组对应的堆栈空间中,以建立所有矢量指令与硬件的对应关系,确保编译程序的正常运行。
可以看出,本申请实施例中,电子设备的中央处理器首先获取待编译的代码类型为目标类型的目标中间代码,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码,然后将目标中间代码编译为可被并行处理器执行的目标指令集。如此,开发者在从事对上述并行处理器的相关开发工作时,可以采用简单易懂的中间代码类型作为编译过程的中间表示,降低了开发难度,促使软件应用在上述并行处理器上的开发,以实现处理速度更快、功耗更低的并行处理过程。
与上述所示的实施例一致的,请参阅图3,图3是本申请实施例提供的一种代码编译装置的功能单元组成框图,所述装置应用于如图1所示的中央处理器11中,所述代码编译装置30包括:获取单元301,用于获取待编译的目标中间代码,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;编译单元302,用于将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
在一个可能的示例中,在所述目标中间代码的代码格式不符合静态单赋值格式,所述将所述目标中间代码编译为可被所述并行处理器执行的目标指令集方面,所述编译单元302具体用于:对所述目标中间代码执行代码格式转换操作,得到标准中间代码,所述标准中间代码的代码格式符合所述静态单赋值格式;将所述标准中间代码编译为所述目标指令集。
在一个可能的示例中,在所述将所述标准中间代码编译为所述目标指令集方面,所述编译单元302具体用于:标记出所述标准中间代码中的标量中间代码和矢量中间代码;将所述标量中间代码转换为待优化的标量指令集,以及将所述矢量中间代码转换为待优化的矢量指令集,得到待优化的标量矢量混合指令集;将所述待优化的标量矢量混合指令集编译为所述目标指令集。
在一个可能的示例中,在所述将所述待优化的标量矢量混合指令集编译为所述目标指令集方面,所述编译单元302具体用于:根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集;根据所述矢量指令处理单元组对应的矢量物理寄存器对所述待优化的矢量指令集中的多个待优化的矢量指令执行寄存器分配操作,得到参考矢量指令集;将由所述参考标量指令集和所述参考矢量指令集组成的参考标量矢量混合指令集编译为所述目标指令集。
在一个可能的示例中,在所述根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集方面,所述编译单元302具体用于:根据预设的标量寄存器分配算法将所述待优化的标量指令集中的第一标量指令集分配到所述标量物理寄存器中,得到第一参考标量指令集,所述第一标量指令集对应的标量虚拟寄存器的数量和所述标量物理寄存器的数量相同;将所述待优化的标量指令集中的第二标量指令集分配到所述标量指令处理单元对应的堆栈空间中,得到第二参考标量指令集,所述第二标量指令集是指由所述待优化的标量指令集中除所述第一标量指令集之外的标量指令组成的指令集;根据所述第一参考标量指令集和所述第二参考标量指令集确定出所述参考标量指令集。
在一个可能的示例中,所述目标中间代码为用户在所述电子设备上直接输入的代码类型为所述目标类型的中间代码。
在一个可能的示例中,所述目标中间代码为用户在所述电子设备上直接输入的源代码经过编译后得到的代码类型为所述目标类型的中间代码。
可以理解的是,由于方法实施例与装置实施例为相同技术构思的不同呈现形式,因此,本申请中方法实施例部分的内容应同步适配于装置实施例部分,此处不再赘述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘。
图4是本申请实施例提供的电子设备的另一种结构框图。如图4所示,电子设备40可以包括一个或多个如下部件:中央处理器401、与所述中央处理器401耦合的存储器402,其中存储器402可存储有一个或多个计算机程序,一个或多个计算机程序可以被配置为由所述中央处理器401执行时实现如上述各实施例描述的方法。其中,所述电子设备40可以是上述实施例中的电子设备10,所述中央处理器401可以是上述实施例中的中央处理器11。
中央处理器401利用各种接口和线路连接整个电子设备40内的各个部分,通过运行或执行存储在存储器402内的指令、程序、代码集或指令集,以及调用存储在存储器402内的数据,执行电子设备40的各种功能和处理数据。
存储器402可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory,ROM)。存储器402可用于存储指令、程序、代码、代码集或指令集。存储器402可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令、用于实现上述各个方法实施例的指令等。存储数据区还可以存储电子设备40在使用中所创建的数据等。可以理解的是,电子设备40可包括比上述结构框图中更多或更少的结构元件,在此不进行限定。
本申请实施例还提供一种计算机存储介质,其中,其上存储有计算机程序/指令,所述计算机程序/指令被中央处理器执行时实现如上述方法实施例中记载的任一方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的;例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式;例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、易失性存储器或非易失性存储器。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)等各种可以存储程序代码的介质。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,可轻易想到变化或替换,均可作各种更动与修改,包含上述不同功能、实施步骤的组合,包含软件和硬件的实施方式,均在本发明的保护范围。

Claims (10)

1.一种代码编译方法,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述并行处理器包括标量指令处理单元和矢量指令处理单元组,所述方法包括:
获取待编译的目标中间代码,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;
将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
2.根据权利要求1所述方法,其特征在于,所述目标中间代码的代码格式不符合静态单赋值格式,所述将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,包括:
对所述目标中间代码执行代码格式转换操作,得到标准中间代码,所述标准中间代码的代码格式符合所述静态单赋值格式;
将所述标准中间代码编译为所述目标指令集。
3.根据权利要求2所述方法,其特征在于,所述将所述标准中间代码编译为所述目标指令集,包括:
标记出所述标准中间代码中的标量中间代码和矢量中间代码;
将所述标量中间代码转换为待优化的标量指令集,以及将所述矢量中间代码转换为待优化的矢量指令集,得到待优化的标量矢量混合指令集;
将所述待优化的标量矢量混合指令集编译为所述目标指令集。
4.根据权利要求3所述方法,其特征在于,所述将所述待优化的标量矢量混合指令集编译为所述目标指令集,包括:
根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集;
根据所述矢量指令处理单元组对应的矢量物理寄存器对所述待优化的矢量指令集中的多个待优化的矢量指令执行寄存器分配操作,得到参考矢量指令集;
将由所述参考标量指令集和所述参考矢量指令集组成的参考标量矢量混合指令集编译为所述目标指令集。
5.根据权利要求4所述方法,其特征在于,所述根据所述标量指令处理单元对应的标量物理寄存器对所述待优化的标量指令集中的多个待优化的标量指令执行寄存器分配操作,得到参考标量指令集,包括:
根据预设的标量寄存器分配算法将所述待优化的标量指令集中的第一标量指令集分配到所述标量物理寄存器中,得到第一参考标量指令集,所述第一标量指令集对应的标量虚拟寄存器的数量和所述标量物理寄存器的数量相同;
将所述待优化的标量指令集中的第二标量指令集分配到所述标量指令处理单元对应的堆栈空间中,得到第二参考标量指令集,所述第二标量指令集是指由所述待优化的标量指令集中除所述第一标量指令集之外的标量指令组成的指令集;
根据所述第一参考标量指令集和所述第二参考标量指令集确定出所述参考标量指令集。
6.根据权利要求1所述方法,其特征在于,所述目标中间代码为用户在所述电子设备上直接输入的代码类型为所述目标类型的中间代码。
7.根据权利要求1所述方法,其特征在于,所述目标中间代码为用户在所述电子设备上直接输入的源代码经过编译后得到的代码类型为所述目标类型的中间代码。
8.一种代码编译装置,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述并行处理器包括标量指令处理单元和矢量指令处理单元组,所述装置包括:
获取单元,用于获取待编译的目标中间代码,所述目标中间代码的代码类型为目标类型,所述目标类型用于指示代码格式与预设的汇编语言集合中的任意一种汇编语言对应的代码格式相同的中间代码;
编译单元,用于将所述目标中间代码编译为可被所述并行处理器执行的目标指令集,所述目标指令集包括目标标量指令集和目标矢量指令集,所述目标标量指令集包括可被所述标量指令处理单元执行的多个标量指令,所述标量指令是指与数据处理无关的指令,所述目标矢量指令集包括可被所述矢量指令处理单元组执行的多个矢量指令,所述矢量指令是指与数据处理相关的指令。
9.一种电子设备,其特征在于,包括中央处理器、并行处理器、存储器以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述中央处理器执行,所述程序包括用于执行如权利要求1-7任一项所述方法中的步骤的指令。
10.一种计算机可读存储介质,其上存储有计算机程序/指令,其特征在于,所述计算机程序/指令被中央处理器执行时实现权利要求1-7任一项所述方法的步骤。
CN202310473190.8A 2023-04-27 2023-04-27 代码编译方法及相关装置 Pending CN116700729A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310473190.8A CN116700729A (zh) 2023-04-27 2023-04-27 代码编译方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310473190.8A CN116700729A (zh) 2023-04-27 2023-04-27 代码编译方法及相关装置

Publications (1)

Publication Number Publication Date
CN116700729A true CN116700729A (zh) 2023-09-05

Family

ID=87834735

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310473190.8A Pending CN116700729A (zh) 2023-04-27 2023-04-27 代码编译方法及相关装置

Country Status (1)

Country Link
CN (1) CN116700729A (zh)

Similar Documents

Publication Publication Date Title
US9678775B1 (en) Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US9632761B2 (en) Distribute workload of an application to a graphics processing unit
CN116661804B (zh) 代码编译方法、代码编译装置、电子设备和存储介质
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US8276130B2 (en) Method and compiler of compiling a program
US8869126B2 (en) Method and apparatus enabling multi threaded program execution for a Cobol program including OpenMP directives by utilizing a two-stage compilation process
KR950006609B1 (ko) 다중 패스코드 발생에 있어서 템플리트를 이용한 다중 언어 최적화 컴파일러
US20090328016A1 (en) Generalized expression trees
JP2007286671A (ja) ソフトウェア/ハードウェア分割プログラム、および分割方法。
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
Metcalf The seven ages of fortran
JP4830108B2 (ja) プログラム処理装置、プログラム処理方法、並列処理プログラム用コンパイラおよび並列処理プログラム用コンパイラを格納した記録媒体
CN113138755A (zh) 一种json序列化和反序列化的优化方法及系统
Thoman et al. Sylkan: Towards a vulkan compute target platform for sycl
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
CN113791770B (zh) 代码编译器、代码编译方法、代码编译系统和计算机介质
CN116700729A (zh) 代码编译方法及相关装置
US20230116546A1 (en) Method for compilation, electronic device and storage medium
US20210182041A1 (en) Method and apparatus for enabling autonomous acceleration of dataflow ai applications
US8261234B1 (en) System, method, and computer program product for compiling code adapted to execute utilizing a first processor, for executing the code utilizing a second processor
JP2004038279A (ja) コンパイラ、演算処理システム及び演算処理方法
Grech et al. Static energy consumption analysis of LLVM IR programs
CN116700730A (zh) 代码编译方法及相关装置
CN116700731A (zh) 代码编译方法及相关装置
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer

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