CN116661804B - 代码编译方法、代码编译装置、电子设备和存储介质 - Google Patents

代码编译方法、代码编译装置、电子设备和存储介质 Download PDF

Info

Publication number
CN116661804B
CN116661804B CN202310949725.4A CN202310949725A CN116661804B CN 116661804 B CN116661804 B CN 116661804B CN 202310949725 A CN202310949725 A CN 202310949725A CN 116661804 B CN116661804 B CN 116661804B
Authority
CN
China
Prior art keywords
instruction
instructions
basic block
code
virtual
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
CN202310949725.4A
Other languages
English (en)
Other versions
CN116661804A (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.)
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 CN202310949725.4A priority Critical patent/CN116661804B/zh
Publication of CN116661804A publication Critical patent/CN116661804A/zh
Application granted granted Critical
Publication of CN116661804B publication Critical patent/CN116661804B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • 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)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种代码编译方法、代码编译装置、电子设备和存储介质,方法包括:获取待编译的目标中间代码,目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;解析目标中间代码,得到内存结构化数据,内存结构化数据包括多条指令;对多条指令中的定义指令所对应的输出寄存器重新分配编号,编号是指虚拟寄存器记录在数组变量中的索引值;根据重新分配编号的输出寄存器将内存结构化数据转换成标准中间代码,标准中间代码的代码格式符合静态单赋值格式。本申请有利于保证后续编译流程的正常进行,也使得开发者能够以更简单的方式编写中间代码,降低开发难度。

Description

代码编译方法、代码编译装置、电子设备和存储介质
技术领域
本申请涉及新一代信息技术产业的一般编码、译码或代码转换技术领域,具体涉及一种代码编译方法、代码编译装置、电子设备和存储介质。
背景技术
在对数据的并行处理中,并行处理器所执行的指令集中既存在与数据处理相关的矢量指令,也存在与数据处理无关的标量指令,对于传统的并行处理器(如图形处理器GPU)而言,其遵循单指令多线程(SingleInstructionMultipleThread,SIMT)架构同等对待执行每一条指令,而不会去区分指令中的矢量指令和标量指令。这样一来,标量指令也会在多线程中重复运行,而由于标量指令与数据处理无关,所以标量指令的重复运行是毫无意义的,导致传统的并行处理器存在浪费运行时间和功耗的问题。
目前,存在一种新型的并行处理器,包含能够分别执行标量指令和矢量指令的处理单元,以实现对数据更快速、更低功耗的并行处理。但由于硬件架构的差异性,导致针对传统的并行处理器的编译器系统无法适用于该新型的并行处理器。
传统的编译器系统例如LLVM(LowLevelVirtualMachine,底层虚拟机)编译器系统,是将源代码编译成中间表示(IntermediateRepresentation,IR)代码,例如LLVMIR,再将中间表示代码编译成并行处理器可执行的机器码。但是,LLVMIR是一种很复杂的机器抽象级的语言,对于开发者而言,使用这种类型的中间代码在对上述新型的并行处理器进行相关开发工作时具有很大的工作难度。因此,需要一种中间代码简单、且能够将简单的中间代码转换成可被上述新型的并行处理器执行的指令集的编译方案。
发明内容
本申请提供了一种代码编译方法、代码编译装置、电子设备和存储介质,以期保证后续编译流程的正常进行,也使得开发者能够以更简单的方式编写中间代码,降低开发难度。
第一方面,本申请提供了一种代码编译方法,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述方法包括:
获取待编译的目标中间代码,所述目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;
解析所述目标中间代码,得到内存结构化数据,所述内存结构化数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且所述多个虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
对所述多条指令中的定义指令所对应的输出寄存器重新分配编号,所述编号是指虚拟寄存器记录在数组变量中的索引值;
根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
第二方面,本申请提供了一种代码编译装置,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述装置包括:
获取单元,用于获取待编译的目标中间代码,所述目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;
解析单元,用于解析所述目标中间代码,得到内存结构化数据,所述内存结构化数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且所述多个虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
分配单元,用于对所述多条指令中的定义指令所对应的输出寄存器重新分配编号,所述编号是指虚拟寄存器记录在数组变量中的索引值;
转换单元,用于根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
第三方面,本申请提供了一种电子设备,包括中央处理器、并行处理器、存储器以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述中央处理器执行,所述程序包括用于执行如上述第一方面所述方法中的步骤的指令。
第四方面,本申请提供了一种存储介质,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如上述第一方面中所描述的部分或全部步骤。
可以看出,本申请中,电子设备的中央处理器首先获取待编译的目标中间代码,目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式。然后将目标中间代码解析为内存结构化数据,内存结构化数据包括多条指令,多条指令包括定义指令,定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出用于执行数值化运算条件以实现结果输出的输出寄存器的指令,多条指令中包括多个虚拟寄存器,一个虚拟寄存器对应至少一条定义指令。然后再对多条指令中的定义指令所对应的输出寄存器重新分配编号,编号是指虚拟寄存器记录在数组变量中的索引值。最后根据重新分配编号的输出寄存器将内存结构化数据转换成标准中间代码,标准中间代码的代码格式符合静态单赋值格式。如此,开发者在从事对上述并行处理器的相关开发工作时,可以采用简单易懂的代码格式的目标中间代码作为编译过程的中间表示,降低了开发难度。同时,通过为定义指令对应的输出寄存器重新分配编号,并根据重新分配后的输出寄存器将内存结构化数据中多次定义的虚拟寄存器转换为符合单赋值格式的重新分配编号后的输出寄存器,可将简单的目标中间代码转换为符合后端编译的格式,可保证后续编译流程的正常进行,从而促使软件应用在上述并行处理器上的开发。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种电子设备的结构框图;
图2是本申请实施例提供的一种代码编译方法的流程示意图;
图3是本申请实施例提供的一种代码编译装置的功能单元组成框图;
图4是本申请实施例提供的电子设备的另一种结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
请参阅图1,图1是本申请实施例提供的一种电子设备的结构框图。如图所示,所述电子设备10包括中央处理器11和并行处理器12,所述中央处理器11和所述并行处理器12连接,以实现数据的传输。其中,所述并行处理器12包括标量指令处理单元121和矢量指令处理单元组122,所述标量指令处理单元121和所述矢量指令处理单元组122连接,以实现数据的传输。其中,所述标量指令是指与数据处理无关的指令,所述矢量指令是指与数据处理相关的指令。所述并行处理器12具体可以是可重构并行处理器RPP(ReconfigurableParallelProcessing),所述标量指令处理单元121具体可以是RPP中的一种处理器核,所述矢量指令处理单元组122具体可以是RPP中的另一种处理器核,其中可以包括多个矢量指令处理单元。所述标量指令处理单元121能够以更高的速度、不重复地执行标量指令,并且还能够将矢量指令硬化或配置到矢量指令处理单元组122中,在矢量指令被硬化或配置到所述矢量指令处理单元组122后,所述多个矢量指令处理单元同时并行处理数据,以实现更高速、更低功耗的并行处理。
请参阅图2,图2是本申请实施例提供的一种代码编译方法的流程示意图,所述方法应用于如图1所示的中央处理器11中,如图2所示,所述方法包括:
S210,获取待编译的目标中间代码。
其中,目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式。所述预设的汇编语言集合中的汇编语言是计算机领域内常用的多种汇编语言,例如C语言、python等,这些汇编语言符合人的代码编写习惯,因此对于开发者而言是简单易懂的。在本示例中,所述目标中间代码的代码格式与上述任意一种汇编语言对应的代码格式相同,例如,所述目标中间代码可以是采用C语言的代码格式的中间代码。
在一个可能的示例中,所述目标中间代码为用户在电子设备上直接用汇编语言集合中任意一种汇编语言所对应的代码格式编写输入的中间代码。
其中,由于目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式,故而对于开发者来说是简单易懂、可编写出来的。因此在本示例中,开发者可以人工编写出目标中间代码,并将编写出的目标中间代码输入到电子设备中,由中央处理器获取并进行后续编译工作。
可见,本示例中,开发者/用户可以人工编写目标中间代码并交由中央处理器进行后续编译工作,这对于偏好于汇编的工作人员或只能使用汇编的场景来说是非常有必要的,拓宽了应用场景,降低开发难度。
在一个可能的示例中,所述目标中间代码为用户在所述电子设备上直接输入的源代码经过编译后得到的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式的中间代码。
其中,所述源代码具体可以是采用计算机统一设备架构(ComputeUnifiedDeviceArchitecture,CUDA)模型编写的源代码,该源代码所经过的编译过程具体可以是中央处理器所执行的前端编译阶段。
示例性地,本申请实施例所涉及的并行处理器为可重构并行处理器RPP,用于实现本申请实施例所提供的编译方法的软件系统可以称为RPP编译系统,RPP编译系统是在LLVM编译器系统的基础上开发和改造得到的,因此RPP编译器系统在结构上也符合LLVM编译器系统的特点,即包含前端编译和后端编译两个阶段。其中,前端编译阶段用于将开发者编写的源代码转换为中间代码,后端编译阶段用于将中间代码转换为目标设备可执行的指令集,即机器码。
在现有的LLVM编译器系统中,源代码经过前端编译阶段后所得到的中间代码是LLVMIR,是一种抽象的中间语言,对于不熟悉LLVM架构的开发者来说,使用这种类型的中间代码在对RPP进行相关开发工作时具有很大的工作难度。而在本申请实施例中,负责前端编译阶段的是基于LLVM编译器系统开发改造得到的RPP前端编译器,RPP前端编译器可将开发者编写的源代码转换为代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式的中间代码,称为RPP中间码,RPP中间码所采用的代码格式是开发者在编写源代码时常用的多种汇编语言对应的代码格式,例如C语言、python等,对于开发者而言通俗易懂。
可见,本示例中,对于开发者/用户直接编写源代码的一般场景中,中央处理器可以对开发者/用户所编写出的源代码执行适用于新型的并行处理器的前端编译流程,使源代码转换成简单易懂的目标中间代码,降低开发难度。
S220,解析所述目标中间代码,得到内存结构化数据。
其中,所述内存结构化数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且所述多个虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
其中,虚拟寄存器是在内存结构化数据中所定义的抽象寄存器,用于存储内存结构化数据中的中间数据、变量和状态等。虚拟寄存器通常是编程语言中的概念,在程序编写过程中使用,而不是直接对应计算机硬件中的物理寄存器或内存位置。
其中,通过前端编译阶段得到的目标中间代码或者直接由开发者人工编写的目标中间代码仍是文本格式,因此需要将处于文本格式的目标中间代码解析成内存结构化数据,具体可以是解析成符合语法树结构的数据,以使得文本格式的目标中间代码能够被中央处理器执行后续操作。可以理解的是,在本示例中,中央处理器对目标中间代码执行如步骤S230和S240所示步骤时,实质上是对目标中间代码对应的内存结构化数据进行处理,以改变目标中间代码的格式。
S230,对所述多条指令中的定义指令所对应的输出寄存器重新分配编号。
其中,所述编号是指虚拟寄存器记录在数组变量中的索引值。
具体地,在解析所述目标中间代码,得到内存结构化数据时,中央处理器还可以将所有指令中引用或定义的寄存器都记录在数组变量recRegs中,并用其在recRegs中的索引值表示,其索引值也可认为是寄存器的标识。
示例性的,参见下表1,虚拟寄存器t对应有两个定义指令(即指令1、指令2),其中,指令1中等式左边的t为指令1的输出寄存器,指令2中等式左边的t为指令2的输出寄存器。指令3中的虚拟寄存器t与指令2所述的虚拟寄存器t对应。其中,表1中的寄存器i、寄存器B、以及寄存器t均记录在数组变量recRegs中,例如,寄存器i的索引值为0、寄存器B的索引值为1、寄存器t的索引值为2。表1具体如下所示:
表1
在本方案中,内存架构化数据中的一个虚拟寄存器可对应至少一条定义指令,也即,同一个虚拟寄存器可被多次赋值。可见,内存结构化数据中的虚拟寄存器不符合静态单赋值格式。其中,静态单赋值(StaticSingleAssignment,SSA)格式是指中间代码中的变量(寄存器)只能被赋值一次,而目标中间代码的代码格式并非SSA格式,因为这样人工编写会非常简便,一个寄存器可以赋值多次,适配开发者的思维逻辑。根据LLVM后端编译器的特性,当中间代码符合SSA格式时,才能进入LLVM后端编译流程,而RPP后端编译器是基于LLVM后端编译器开发和改造而来的,因此目标中间代码需要符合SSA格式才能进行后续编译流程。
在本示例中,可以通过对多条指令中所有的定义指令所对应的输出寄存器重新分配编号,从而使得虚拟寄存器所对应的每条定义指令的输出寄存器能够分别对应一个编号,从而克服虚拟寄存器重复赋值的问题。其中,为输出寄存器重新分配编号即是指为输出寄存器重新分配索引值。
示例性的,对上述表1中的两个定义指令(即指令1、指令2)重新分配编号后,各个寄存器对应的索引值为:寄存器i的索引值为0、寄存器B的索引值为1、寄存器t的索引值为2,寄存器t0的索引值为3、寄存器t1的索引值为4。重新分配编号后的定义指令可对应参见表2中的指令1、指令2,表2具体如下所示:
表2
可见,为定义指令对应的输出寄存器重新分配编号后,不同定义指令的输出寄存器将对应不同的索引值,将不再存在对同一个寄存器多次赋值的问题。
S240,根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式。
其中,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
具体实现中,中央处理器还可以查询所有指令中针对输出寄存器的应用,并将引用的指令指向重新分配编号的输出寄存器,从而使中央处理器完成对不符合SSA格式的目标中间代码的格式转换,使其转换成符合SSA格式的标准中间代码,这样,开发者在编写中间代码时,仍可按照简便方式去编写,将格式转换的操作交由中央处理器执行即可,降低了开发难度。
可见,本示例中,电子设备的中央处理器可以将不符合静态单赋值格式的目标中间代码转换成符合静态单赋值格式的标准中间代码,保证后续编译流程的正常进行,也使得开发者能够以更简单的方式编写中间代码,降低开发难度。
在一个可能的示例中,所述根据重新分配编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码之后,所述方法还包括:将所述标准中间代码编译为可被所述并行处理器执行的目标指令集。
其中,将标准中间代码转换为目标指令集的过程被称为指令选择。在传统的LLVM后端编译过程中,由于输入到指令选择阶段的代码是LLVMIR,是一种复杂的语言,因此需要借助预设的指令选择模板来实现标准中间代码到目标指令集的指令选择。而在本申请实施例中,输入到指令选择阶段的代码是符合常用汇编语言的、简单易懂的中间代码,因此在指令选择时,中央处理器无需借助指令选择模板,而是可以基于上述常用的汇编语言和常用的指令选择方式直接将标准中间代码转换成目标指令集。其中,该步骤既可以通过程序交由中央处理器自动执行,也可以由开发者手动转换,例如,在得到标准中间代码后,开发者可以自己将各个类型的中间代码翻译成对应类型的指令集,再将翻译后的指令集重新输入到电子设备中执行后续编译流程,由于中间代码格式的优越性,该过程对于专业的开发者来说是毫无难度的,称为人工指令选择。
可见,本示例中,不仅可使电子设备的中央处理器将各个类型的中间代码翻译成对应的指令集,还由于目标中间代码的代码格式的优越性,使得开发者可以人工进行指令选择阶段,拓展了应用范围,提高了编译系统的灵活性。
可以看出,本实施例中,电子设备的中央处理器首先获取待编译的目标中间代码,目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式。然后将目标中间代码解析为内存结构化数据,内存结构化数据包括多条指令,多条指令包括定义指令,定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出用于执行数值化运算条件以实现结果输出的输出寄存器的指令,多条指令中包括多个虚拟寄存器,一个虚拟寄存器对应至少一条定义指令。然后再对多条指令中的定义指令所对应的输出寄存器重新分配编号,编号是指虚拟寄存器记录在数组变量中的索引值。最后根据重新分配编号的输出寄存器将内存结构化数据转换成标准中间代码,标准中间代码的代码格式符合静态单赋值格式。如此,开发者在从事对上述并行处理器的相关开发工作时,可以采用简单易懂的代码格式的目标中间代码作为编译过程的中间表示,降低了开发难度。同时,通过为定义指令对应的输出寄存器重新分配编号,并根据重新分配后的输出寄存器将内存结构化数据中多次定义的虚拟寄存器转换为符合单赋值格式的重新分配编号后的输出寄存器,可将简单的目标中间代码转换为符合后端编译的格式,可保证后续编译流程的正常进行,从而促使软件应用在上述并行处理器上的开发。
在一个可能的示例中,所述解析所述目标中间代码,得到内存结构化数据,包括:将所述目标中间代码转换成指令数据,所述指令数据包括所述多条指令;获取所述指令数据中的跳转指令,并根据所述跳转指令将所述指令数据中的所述多条指令解析到至少一个基本块中,所述跳转指令是指用于约束下一条执行指令位置的指令。
其中,基本块用于表征若干条连续的指令,且基本块只能有一个入口点(即从其他指令跳转进入的点)。
具体地,目标中间代码为一个RPP中间代码汇编文件,其为文本格式。在编译过程中,需要首先对目标中间码进行解析,从而使目标中间代码解析为符合语法树结构的内存结构化数据。在解析过程中,可以先将目标中间代码的多个函数分别解析为包括多个指令的指令数据,指令数据中的多个指令按照其在目标中间代码中的先后顺序排列。然后再确定多个指令中的跳转指令,从而根据跳转指令将多个指令划分到至少一个基本块中,从而形成内存结构化数据。其中,内存结构化数据包括至少一个函数,每个函数包括至少一个基本块。
可见,在本示例中,通过将多个指令划分在不同的基本块中,更利于后续编译,以优化内存结构化数据的执行速度和内存消耗。
在一个可能的示例中,所述解析所述目标中间代码,得到内存结构化数据,还包括:根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标;将所述跳转目标对应的目标基本块记录至所述基本块的后继指针数组中,并将所述基本块记录至所述目标基本块的前继指针数组中。
在本示例中,将目标中间代码解析为内存结构化数据之后,若不分析每条指令的具体含义,内存结构化数据是没有控制流信息的。在本申请示例中,对于内存结构化数据中的每个函数,可以根据基本块在内存结构化数据中的先后顺序,从第一个基本块开始进行迭代。在迭代过程中可以先确定每个基本块最后一条指令(也即跳转指令),然后将跳转指令对应的跳转目标所对应的目标基本块记录在当前基本块的后继指针数组中,并将当前基本块记录在跳转目标所对应的目标基本块的前继指标数组中。
同时,若所述跳转指令为条件跳转指令,所述根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标之后,所述方法还包括:将所述基本块记录至所述基本块的后一个基本块的前继指针数组中,并在所述基本块的后继指针数组中记录所述基本块的后一个基本块。
具体地,在跳转指令为条件跳转指令时,还可以根据基本块在内存结构化数据中的先后顺序,将后一个基本块记录在当前基本块的后继指针数组中,并在后一个基本块的前继指针数组中记录当前基本块。如此,各个函数在基本块迭代完成后,则可形成与各个函数的控制流链路。
可见,在本示例中,可以根据每个基本块中的跳转指令,确定各个基本块的前继指针数组和后继指针数组中的内容,从而可形成基本块所在函数所对应的控制流链路。形成的控制流链路有助于提高在后续对内存结构化数据的代码格式进行转换时的执行速度。
在一个可能的示例中,所述对所述多条指令中的定义指令所对应的输出寄存器重新分配编号,包括:在所述至少一个基本块的每个基本块中查询所述基本块中的所有虚拟寄存器、以及与每个所述虚拟寄存器对应的定义指令;为每个所述虚拟寄存器的每条所述定义指令对应的输出寄存器重新分配编号。
具体实现中,在进行定义指令对应的输出寄存器重新分配编号时,可以以基本块为单位,迭代数组变量recRegs中每个虚拟寄存器。具体地,在迭代过程中,可以根据当前迭代的虚拟寄存器的在数组变量recRegs中的索引值recIdx,在当前基本块中确定当前虚拟寄存器对应的定义指令,然后再重新分配新的编号给定义指令所对应的输出寄存器,以避免虚拟寄存器重复赋值的问题。同时,在虚拟寄存器迭代过程中,还可以在当前基本块的寄存器定义数组变量regDefs中记录重新分配的输出寄存器的索引值recIdx,以便于后续查询重新分配的输出寄存器和虚拟寄存器的关系。
可见,在本示例中,以基本块为单位查询基本块中的所有虚拟寄存器,并为虚拟寄存器重新分配编号可以减少对内存的访问,从而提高程序的执行效率和内存消耗。
在一个可能的示例中,所述根据重新分配编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,包括:对每个所述虚拟寄存器执行第一操作,所述第一操作包括:查询所述每个基本块中引用所述虚拟寄存器的第一指令;将所述第一指令的引用更新为指向重新分配所述编号的所述输出寄存器对应的定义指令的指针。
具体实现中,在为每个基本块中每条定义指令对应的输出寄存器重新分配编号之后,还需要对该基本块执行第一操作。也即,需要查询当前基本块中引用所迭代的虚拟寄存器的指令,将该指令的引用更新成指向重新分配所述编号的所述输出寄存器对应的定义指令的指针。
具体地,可以根据虚拟寄存器在数组变量recRegs中的索引值recIdx找出当前基本块中所有引用当前寄存器的指令,然后再根据当前基本块中各个指令的先后顺序,将该指令对虚拟寄存器的引用更新为指向与该指令相邻的前一条该虚拟寄存器的定义指令的指针。
可见,在本实例中,在虚拟寄存器迭代过程中,在为每个基本块中每条定义指令对应的输出寄存器重新分配编号之后,通过将基本块中引用虚拟寄存器的指令更新为指向重新分配所述编号的所述输出寄存器对应的定义指令的指针,使得内存结构化数据中的函数中每个基本块都是单赋值的输出寄存器和指令,解决了虚拟寄存器在基本块中多次赋值而不符合LLVM对应的静态单赋值格式的问题。
在一个可能的示例中,所述对每个所述虚拟寄存器执行第一操作之后,所述方法还包括:对每个所述虚拟寄存器执行第二操作,所述第二操作包括:查询目标函数中引用所述虚拟寄存器的第二指令,所述第二指令为所述目标函数中未更新引用所述虚拟寄存器的指令,所述内存结构化数据包括至少一个函数,所述目标函数为所述至少一个函数的其中之一,所述多条指令为所述目标函数中的指令;在所述第二指令所在的基本块的块首插入预设指令,所述预设指令用于指向所述虚拟寄存器对应的所有重新分配所述编号的输出寄存器所在的目标基本块;将所述第二指令的引用更新为指向所述预设指令的指针。
其中,目标函数为内存结构化数据中多个函数中的任意一个。
具体实现中,若目标函数中包括一个基本块,则对每个虚拟寄存器执行第一操作之后,已完成整个目标函数中对定义和引用虚拟寄存器的指令所对应的寄存器的重新分配。若目标函数中包括多个基本块,在对每个虚拟寄存器执行第一操作之后,对于当前基本块在基本块内定义和引用的指令所对应的虚拟寄存器已完成了重新分配,但对于在当前基本块的基本块外定义、并在当前基本块的基本块内引用的虚拟寄存器还未更新,这导致该情况下,当前基本块内引用的虚拟寄存器依然对应多个定义指令,也即,依然存在多赋值引用的问题。因此在本实施例中,可以再次迭代数组变量recRegs中每个虚拟寄存器,并通过当前虚拟寄存器在数组变量recRegs中的索引值在目标函数中确定出第二指令,也即确定出目标函数中还未更新引用当前虚拟寄存器的指令。然后根据控制流链路和各个基本块的寄存器定义数组变量regDefs所记录的输出寄存器对应的虚拟寄存器的索引值信息,找出当前虚拟寄存器对应的各个重新分配编号的输出寄存器和该重新分配编号的输出寄存器所在的基本块。然后可以在第二指令所在的基本块的块首插入预设指令(也即phi指令),并将当前虚拟寄存器对应的各个重新分配编号的输出寄存器、和该重新分配编号的输出寄存器所在的基本块的信息写入预设指令中。预设指令写入完成后,则可将第二指令的引用更新为指向预设指令的指针,从而使第二指令能够通过引用预设指令,来引用当前虚拟寄存器对应的各个重新分配的输出寄存器所对应的定义指令的指针。
示例性的,如下表3所示,表3所示的代码包括基本块“#0”(包括指令2至指令5)、基本块“#1”(包括指令6和指令7)、以及基本块“END(包括指令8至指令10)”。其中,基本块“#0”对应的指令3、以及基本块“#1”对应的指令7均为虚拟寄存器Q的定义指令。从下表3可以看出,对基本块“#0”、基本块“#1”中的虚拟寄存器Q的定义指令所对应的输出寄存器重新分配编号后,基本块“END”中对虚拟寄存器Q的引用仍然存在多赋值引用的问题。如表4所示,在对基本块“#0”、基本块“#1”中虚拟寄存器Q对应的定义指令所对应的输出寄存器重新分配编号、且对基本块“#0”、基本块“#1”引用虚拟寄存器Q的指令重新分配后,可以在基本块“END”的块首插入“Q2 = phi [Q0,#0],[Q1,#1]”这一伪指令,以使表4中指令10所对应的指令能够克服多赋值引用的问题。表3、表4具体如下所示:
表3
表4
可见,在本示例中,对于具有多个基本块的目标函数,在对虚拟寄存器执行第一操作之后,通过在该目标函数中查询未更新引用的第二指令,以在所述第二指令所在的基本块的块首插入预设指令,并将所述第二指令的引用更新为指向所述预设指令的指针。使得目标函数中针对该虚拟寄存器的定义和引用的指令都完成了重新分配,使得内存结构化数据转换为了静态单赋值格式,能够保证后续编译流程的正常进行,从而促使软件应用在上述并行处理器上的开发。
本申请可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
图3是本申请实施例提供的一种代码编译装置的功能单元组成框图。该代码编译装置30可以应用于如图1所示的中央处理器11中,该代码编译装置30包括:
获取单元310,用于获取待编译的目标中间代码,所述目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;
解析单元320,用于解析所述目标中间代码,得到内存结构化数据,所述内存结构化数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且所述多个虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
分配单元330,用于对所述多条指令中的定义指令所对应的输出寄存器重新分配编号,所述编号是指虚拟寄存器记录在数组变量中的索引值;
转换单元340,用于根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
在一个可能的示例中,在所述解析所述目标中间代码,得到内存结构化数据方面,所述解析单元具体用于:将所述目标中间代码转换成指令数据,所述指令数据包括所述多条指令;获取所述指令数据中的跳转指令,并根据所述跳转指令将所述指令数据中的所述多条指令解析到至少一个基本块中,所述跳转指令是指用于约束下一条执行指令位置的指令。
在一个可能的示例中,在所述对所述多条指令中的定义指令所对应的输出寄存器重新分配编号方面,所述分配单元具体用于:在所述至少一个基本块的每个基本块中查询所述基本块中的所有虚拟寄存器、以及与每个所述虚拟寄存器对应的定义指令;为每个所述虚拟寄存器的每条所述定义指令对应的输出寄存器重新分配编号。
在一个可能的示例中,在所述根据重新分配编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码方面,所述转换单元具体用于:对每个所述虚拟寄存器执行第一操作,所述第一操作包括:查询所述每个基本块中引用所述虚拟寄存器的第一指令;将所述第一指令的引用更新为指向重新分配所述编号的所述输出寄存器对应的定义指令的指针。
在一个可能的示例中,在所述对每个所述虚拟寄存器执行第一操作之后,所述转换单元具体还用于:对每个所述虚拟寄存器执行第二操作,所述第二操作包括:查询目标函数中引用所述虚拟寄存器的第二指令,所述第二指令为所述目标函数中未更新引用所述虚拟寄存器的指令,所述内存结构化数据包括至少一个函数,所述目标函数为所述至少一个函数的其中之一,所述多条指令为所述目标函数中的指令;在所述第二指令所在的基本块的块首插入预设指令,所述预设指令用于指向所述虚拟寄存器对应的所有重新分配所述编号的输出寄存器所在的目标基本块;将所述第二指令的引用更新为指向所述预设指令的指针。
在一个可能的示例中,在所述解析所述目标中间代码,得到内存结构化数据方面,所述解析单元具体还用于:根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标;
将所述跳转目标对应的目标基本块记录至所述基本块的后继指针数组中,并将所述基本块记录至所述目标基本块的前继指针数组中。
在一个可能的示例中,所述解析单元还用于:在所述跳转指令为条件跳转指令,所述根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标之后,将所述基本块记录至所述基本块的后一个基本块的前继指针数组中,并在所述基本块的后继指针数组中记录所述基本块的后一个基本块。
可以理解的是,由于方法实施例与装置实施例为相同技术构思的不同呈现形式,因此,本申请中方法实施例部分的内容应同步适配于装置实施例部分,此处不再赘述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘。
图4是本申请实施例提供的电子设备的另一种结构框图。如图4所示,电子设备40可以包括一个或多个如下部件:处理器401、与所述处理器401耦合的存储器402,其中存储器402可存储有一个或多个计算机程序,一个或多个计算机程序可以被配置为由所述处理器401执行时实现如上述各实施例描述的方法。其中,所述电子设备40可以是上述图1所示实施例中的电子设备,所述处理器401可以是上述实施例中的中央处理器11。
处理器401利用各种接口和线路连接整个电子设备40内的各个部分,通过运行或执行存储在存储器402内的指令、程序、代码集或指令集,以及调用存储在存储器402内的数据,执行电子设备40的各种功能和处理数据。
存储器402可以包括随机存储器(RandomAccessMemory,RAM),也可以包括只读存储器(Read-OnlyMemory,ROM)。存储器402可用于存储指令、程序、代码、代码集或指令集。存储器402可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令、用于实现上述各个方法实施例的指令等。存储数据区还可以存储电子设备40在使用中所创建的数据等。可以理解的是,电子设备40可包括比上述结构框图中更多或更少的结构元件,在此不进行限定。
本申请实施例还提供一种存储介质,其中,其上存储有计算机程序/指令,所述计算机程序/指令被中央处理器执行时实现如上述方法实施例中记载的任一方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的;例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式;例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、易失性存储器或非易失性存储器。其中,非易失性存储器可以是只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmableROM,PROM)、可擦除可编程只读存储器(erasablePROM,EPROM)、电可擦除可编程只读存储器(electricallyEPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(randomaccessmemory,RAM)可用,例如静态随机存取存储器(staticRAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(doubledatarateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器(directrambusRAM,DRRAM)等各种可以存储程序代码的介质。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,可轻易想到变化或替换,均可作各种更动与修改,包含上述不同功能、实施步骤的组合,包含软件和硬件的实施方式,均在本发明的保护范围。

Claims (8)

1.一种代码编译方法,其特征在于,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述方法包括:
获取待编译的目标中间代码,所述目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;
将所述目标中间代码转换成指令数据,所述指令数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且多个所述虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
获取所述指令数据中的跳转指令,并根据所述跳转指令将所述指令数据中的所述多条指令解析到至少一个基本块中,以形成内存结构化数据,所述跳转指令是指用于约束下一条执行指令位置的指令;
在所述至少一个基本块的每个基本块中查询所述基本块中的所有虚拟寄存器、以及与每个所述虚拟寄存器对应的定义指令;
为每个所述虚拟寄存器对应的每条所述定义指令所对应的输出寄存器重新分配编号,所述编号是指虚拟寄存器记录在数组变量中的索引值;
根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
2.如权利要求1所述的方法,其特征在于,所述根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,包括:
对每个所述虚拟寄存器执行第一操作,所述第一操作包括:
查询所述每个基本块中引用所述虚拟寄存器的第一指令;
将所述第一指令的引用更新为指向重新分配所述编号的所述输出寄存器对应的定义指令的指针。
3.如权利要求2所述的方法,其特征在于,所述对每个所述虚拟寄存器执行第一操作之后,所述方法还包括:
对每个所述虚拟寄存器执行第二操作,所述第二操作包括:
查询目标函数中引用所述虚拟寄存器的第二指令,所述第二指令为所述目标函数中未更新引用所述虚拟寄存器的指令,所述内存结构化数据包括至少一个函数,所述目标函数为所述至少一个函数的其中之一,所述多条指令为所述目标函数中的指令;
在所述第二指令所在的基本块的块首插入预设指令,所述预设指令用于指向所述虚拟寄存器对应的所有重新分配所述编号的输出寄存器所在的目标基本块;
将所述第二指令的引用更新为指向所述预设指令的指针。
4.如权利要求1所述的方法,其特征在于,所述解析所述目标中间代码,得到内存结构化数据,还包括:
根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标;
将所述跳转目标对应的目标基本块记录至所述基本块的后继指针数组中,并将所述基本块记录至所述目标基本块的前继指针数组中。
5.如权利要求4所述的方法,其特征在于,所述跳转指令为条件跳转指令,所述根据所述至少一个基本块中每个基本块对应的所述跳转指令,确定每个所述基本块的跳转目标之后,所述方法还包括:
将所述基本块记录至所述基本块的后一个基本块的前继指针数组中,并在所述基本块的后继指针数组中记录所述基本块的后一个基本块。
6.一种代码编译装置,其特征在于,应用于电子设备的中央处理器,所述电子设备包括所述中央处理器和并行处理器,所述装置包括:
获取单元,用于获取待编译的目标中间代码,所述目标中间代码的代码格式为预设的汇编语言集合中任意一种汇编语言所对应的代码格式;
解析单元,用于将所述目标中间代码转换成指令数据,所述指令数据包括多条指令,所述多条指令包括至少一个定义指令,单个定义指令是指为单个虚拟寄存器赋予数值化运算条件以创建出输出寄存器的指令,所述输出寄存器用于执行所述数值化运算条件以实现结果输出,所述多条指令中创建有多个所述虚拟寄存器,且多个所述虚拟寄存器中每个虚拟寄存器对应一个或多个定义指令,所述一个或多个定义指令为所述至少一个定义指令中的指令;
所述解析单元,还用于获取所述指令数据中的跳转指令,并根据所述跳转指令将所述指令数据中的所述多条指令解析到至少一个基本块中,以形成内存结构化数据,所述跳转指令是指用于约束下一条执行指令位置的指令;
分配单元,用于在所述至少一个基本块的每个基本块中查询所述基本块中的所有虚拟寄存器、以及与每个所述虚拟寄存器对应的定义指令;并为每个所述虚拟寄存器对应的每条所述定义指令所对应的输出寄存器重新分配编号,所述编号是指虚拟寄存器记录在数组变量中的索引值;
转换单元,用于根据重新分配所述编号的所述输出寄存器将所述内存结构化数据转换成标准中间代码,所述标准中间代码的代码格式符合静态单赋值格式,所述标准中间代码用于生成被所述并行处理器执行的目标指令集。
7.一种电子设备,其特征在于,包括中央处理器、并行处理器、存储器以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述中央处理器执行,所述程序包括用于执行如权利要求1-5任一项所述方法中的步骤的指令。
8.一种存储介质,其特征在于,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-5任一项所述的方法中的步骤。
CN202310949725.4A 2023-07-31 2023-07-31 代码编译方法、代码编译装置、电子设备和存储介质 Active CN116661804B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310949725.4A CN116661804B (zh) 2023-07-31 2023-07-31 代码编译方法、代码编译装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310949725.4A CN116661804B (zh) 2023-07-31 2023-07-31 代码编译方法、代码编译装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN116661804A CN116661804A (zh) 2023-08-29
CN116661804B true CN116661804B (zh) 2024-01-09

Family

ID=87722799

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310949725.4A Active CN116661804B (zh) 2023-07-31 2023-07-31 代码编译方法、代码编译装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN116661804B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117591242B (zh) * 2023-11-30 2024-04-05 深流微智能科技(深圳)有限公司 基于底层虚拟机的编译优化方法、系统、存储介质及终端
CN117950726A (zh) * 2024-03-26 2024-04-30 武汉凌久微电子有限公司 基于gpu指令集的spir-v链式操作指令处理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1672133A (zh) * 2002-08-02 2005-09-21 艾利森电话股份有限公司 优化的代码生成
CN111078290A (zh) * 2019-12-17 2020-04-28 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
CN112527316A (zh) * 2020-12-29 2021-03-19 Oppo广东移动通信有限公司 代码编译方法、装置、电子设备及存储介质
CN115809063A (zh) * 2022-12-05 2023-03-17 星环信息科技(上海)股份有限公司 一种存储过程编译方法、系统、电子设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030079210A1 (en) * 2001-10-19 2003-04-24 Peter Markstein Integrated register allocator in a compiler

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1672133A (zh) * 2002-08-02 2005-09-21 艾利森电话股份有限公司 优化的代码生成
CN111078290A (zh) * 2019-12-17 2020-04-28 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
CN112527316A (zh) * 2020-12-29 2021-03-19 Oppo广东移动通信有限公司 代码编译方法、装置、电子设备及存储介质
CN115809063A (zh) * 2022-12-05 2023-03-17 星环信息科技(上海)股份有限公司 一种存储过程编译方法、系统、电子设备和存储介质

Also Published As

Publication number Publication date
CN116661804A (zh) 2023-08-29

Similar Documents

Publication Publication Date Title
CN116661804B (zh) 代码编译方法、代码编译装置、电子设备和存储介质
US8375374B2 (en) Partitioning programs between a general purpose core and one or more accelerators
US7313773B1 (en) Method and device for simulator generation based on semantic to behavioral translation
US7877741B2 (en) Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US9015690B2 (en) Proactive loop fusion of non-adjacent loops with intervening control flow instructions
US8276130B2 (en) Method and compiler of compiling a program
US20140282444A1 (en) Programming language transformations with abstract syntax tree extensions
US8732679B2 (en) Loop transformation for computer compiler optimization
CN103473168A (zh) 一种热点程序的统计方法
CN111428327A (zh) 一种指令硬件架构的构建方法、装置及存储介质
US20190391795A1 (en) Information processing apparatus, computer-readable recording medium storing therein compiler program, and compiling method
US9182960B2 (en) Loop distribution detection program and loop distribution detection method
US8141068B1 (en) Compiler with flexible scheduling
TW201712534A (zh) 關於包括指令組的大小之指令組的資訊解碼
US20150268960A1 (en) Efficient calling of functions on a processor
US20070169054A1 (en) Process of automatically translating a high level programming language into an extended activity diagram
US20230113783A1 (en) Cross-platform code conversion method and device
CN113791770B (zh) 代码编译器、代码编译方法、代码编译系统和计算机介质
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP3840149B2 (ja) コンパイラ、演算処理システム及び演算処理方法
CN116700729A (zh) 代码编译方法及相关装置
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
US8464235B2 (en) Adaptive production of assembler
US20090112568A1 (en) Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
CN116700730A (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