CN113204349B - 基于rl的超优化编译器建立、代码超优化方法及系统 - Google Patents
基于rl的超优化编译器建立、代码超优化方法及系统 Download PDFInfo
- Publication number
- CN113204349B CN113204349B CN202110507940.XA CN202110507940A CN113204349B CN 113204349 B CN113204349 B CN 113204349B CN 202110507940 A CN202110507940 A CN 202110507940A CN 113204349 B CN113204349 B CN 113204349B
- Authority
- CN
- China
- Prior art keywords
- code
- optimization
- compiler
- hyper
- optimized
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
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
本发明属于计算机编译器超优化技术领域,公开了一种基于RL的超优化编译器建立、代码超优化方法及系统。该超优化编译器可以直接应用于编译器后端,可以对现有的编译器生成的可执行的二进制文件进行更优秀的重编译,从而提高代码的执行速度和效率,为后续编译器超优化的研究提供了更广阔的设计思路和技术支持。
Description
技术领域
本发明属于计算机编译器超优化技术领域,具体涉及一种基于RL的超优化编译器建立、代码超优化方法及系统。
背景技术
编译器是将“一种语言”翻译为“另一种语言”的程序,在许多应用领域中,尽可能地生成高性能的代码具有很大的价值,故传统的编译器翻译过程产生的代码指令序列还存在进一步优化的空间。
超优化是一种产生完美优化代码的想法,它的核心思想是对于每一个代码而言,超优化编译器都能找到其对应的最优的指令序列,即能在现有编译器的基础上对编译器进行进一步的优化以达到“超优化”。代码超优化在搜索时,通常通过对每个可能的指令序列进行暴力搜索,检查它是否执行了代码相关操作并选择是否接受该序列。但是通过蛮力搜索的方式解决问题显然会受问题规模的影响,随着指令序列的长度的增加,其大小呈爆炸性增长,即使可以通过设置条件限制来进行剪枝,其搜索空间大小仍及其可观。
因此,除了传统的通过蛮力搜索实现的超级优化器之外,现有技术中还研究有关机器学习和约束求解方法实现优化搜索的超级优化器。例如,stoke是X86-64指令集的随机优化器和程序合成器。stoke使用随机搜索来探索所有可能的程序转化的极高维度空间,其中任何随机变换都不太可能产生所需的代码序列,因此stoke重复应用数百万个变换来产生新的的代码序列,但这种随机搜索存在的问题是搜索空间巨大,且消耗大量时间和资源。
发明内容
本发明的目的在于提供一种基于RL的超优化编译器建立、代码超优化方法及系统,用以解决现有技术中在进行编译器超优化时,搜索时间长,搜索效率低下,以及编译器本身使用的随机搜索方法牺牲了搜索完整性等问题。
为了实现上述任务,本发明采用以下技术方案:
一种基于RL的超优化编译器建立方法,包括如下步骤:
步骤1:获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
步骤2:对每条搜索路径进行解析,获得每条搜索路径包含的多个词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;
步骤3:将所有搜索路径包含的词条作为训练集,将随机突变方向的种类作为标签,对编译器通过强化学习方法进行训练,所述强化学习方法包括reward、action和state三个参数,其中,将每个词条的代码优化程度作为reward,将每个词条的随机突变方向作为action,将每个词条的突变代码作为state;
将训练好的编译器作为超优化编译器,所述的超优化编译器的突变方向为优化后的随机突变方向。
进一步的,所述的随机突变方向包括9种,分别为:Opcode、Operand、GlobalSwap、LocalSwap、AddNops、Delete、Instruction、Weighted和Resize。
一种代码超优化方法,该方法用于获取待优化源代码,将待优化源代码输入采用基于RL的超优化编译器建立方法建立的超优化编译器中,获得待优化源代码的突变方向,直至代码收敛时优化结束,输出超优化代码。
一种代码超优化系统,包括输入单元、预处理单元、模型训练单元和超优化编译器;
所述的输入单元用于获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
所述的预处理单元用于对每条搜索路径进行解析,获得每条搜索路径包含的多个词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;
所述的模型训练单元用于将所有搜索路径包含的词条作为训练集,将随机突变方向的种类作为标签,对编译器通过强化学习方法进行训练,所述强化学习方法包括reward、action和state三个参数,其中,将每个词条的代码优化程度作为reward,将每个词条的随机突变方向作为action,将每个词条的突变代码作为state;
所述的超优化编译器为训练好的编译器,所述的超优化编译器的突变方向为优化后的随机突变方向,所述的超优化编译器用于获取待优化源代码,将待优化源代码输入超优化编译器中,获得待优化源代码的突变方向,直到代码收敛时优化结束,输出超优化代码。
进一步的,所述的随机突变方向包括9种,分别为:Opcode、Operand、GlobalSwap、LocalSwap、AddNops、Delete、Instruction、Weighted和Resize。
本发明与现有技术相比具有以下技术特点:
(1)采用本发明进行超优化后的编译器,生成的优化代码指令集更短,执行速度更快。可以学习快速适应以前未见过的代码优化设计空间,既可以加快搜索速度,又可以提高输出性能。
(2)本发明将深度强化学习的方法引入到代码超优化工作中,为代码超优化提供新的思路,该算法不仅着眼于降低实际硬件测量的样本,而且使用领域知识启发型逻辑来改善样本本身,缩短了代码执行时间,提高代码执行效率。填补当前研究领域的空白,为后续编译器超优化的技术研究提供参考。
(3)本发明在深度强化学习端构建一个服务器,将超优化编译器作为一个客户端,每当客户端需要优化搜索空间时,服务器端根据前面的搜索经验和结果反馈,向客户端提供一个深度强化学习模型计算出的最优的突变,而不再是编译器原始的随机突变。
附图说明
图1为本发明的超优化算法流程图;
图2为数据解析流程图;
图3为搜索路径保存格式图;
图4为强化学习流程图;
图5为训练流程图;
图6为超优化流程图。
具体实施方式
首先对本发明中出现的技术词语进行解释:
强化学习(RL):是一种用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题,即针对一个具体问题得到一个最优的policy,使得在该策略下获得的reward最大。在本发明中agent即待优化的编译器。不同于监督学习和非监督学习,强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数。
强化学习的关键要素有:environment、reward、action和state。强化学习要完成的目标是:从要完成的任务提取一个环境(environment),从中抽象出状态(state),动作(action),以及执行该动作所接受的瞬时奖赏(reward),agent对每次所处的state以及上一状态的reward确定当前要执行什么action,执行action要达到最大化期望reward,直到最终算法收敛。
reward:表示第t个time step的返回瞬时奖赏值,所有强化学习都是基于reward假设的。reward在本发明中具体表示STOKE搜索空间中,每一次随机突变生成的优化代码与未优化代码的优化比较程度。
action:来自于动作空间,表示编译器每个随机突变的突变方向。
policy:表示一系列action的sequential data,即当前agent所处的状态。policy是从state到action的映射,分为确定策略和与随机策略,确定策略就是某一状态下的确定动作,随机策略以概率来描述,即某一状态下执行这一动作的概率。
搜索路径:利用编译器的成本函数生成成本较低的代码这一索索过程中产生的中间路径。
gcc-O3:gcc是“GNU Compiler Collection”的缩写,它是一个编译器集。gcc可以编译c语言,还能用于c++,java,object-C等语言程序。
stoke-extract:stoke开源工具,用于将二进制文件里面包含的所有函数反编译为汇编指令集,保存到bins/对应函数名.s中;例如:一个二进制文件test.out中的函数有print(),hello(),main()三个函数,执行stoke extract-i./test.out-obins,会在bins文件夹中生成三个文件print.s,hello.s,main.s。
stoke-testcase:stoke开源工具,用于生成一组测试用例,以指导STOKE的搜索过程。
PPO:增强学习算法,OpenAI把PPO作为目前的baseline算法。
gym:关于强化学习框架搭建的python开源库OpenAI Gym(github:https://github.com/openai/gym#atari)提供了一套比较完善的强化学习工具包。
LLVM:编译器,编译器框架,包含一系列编译器工具,编译器工具链,是一种基于C++实现的开源软件。
在本实施例中公开了一种基于RL的超优化编译器建立方法,包括如下步骤:
步骤1:获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
步骤2:对每条搜索路径进行解析,获得每条搜索路径包含的词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;
步骤3:将所有搜索路径包含的词条作为训练集,将随机突变方向的种类作为标签,对编译器通过强化学习方法进行训练,所述强化学习方法包括reward、action和state三个参数,其中,将每个词条的代码优化程度作为reward,将每个词条的随机突变方向作为action,将每个词条的突变代码作为state;训练停止条件即代码收敛或超时。
将训练好的编译器作为超优化编译器,所述的超优化编译器的突变方向为优化后的随机突变方向。
在本实施例中,编译器采用STOKE编译器,其中,STOKE在搜索过程中定义的参数transform_current作为随机突变方向(Action),参数(original_cost-new_cost)/original_cost作为代码优化程度(Reward),state.current.get_code()作为突变代码(Code),将上述Action,Reward和Code组成词条。
具体的,步骤1包括如下子步骤:
通过gcc-O3对待优化的源代码生成待优化的二进制文件(a.out),然后在STOKE编译器中利用stoke-extract将二进制文件(a.out)反编译为汇编指令格式的文件保存到bins/文件夹中,每个文件夹包含汇编指令函数文件(定义为_Z6popcntm.s),利用stoke-testcase将待优化的汇编指令函数文件_Z6popcntm.s生成一组测试用例进行搜索,STOKE通过不停的进行随机突变操作进行二进制指令序列的搜索空间中完成搜索,输出搜索过程中的所有搜索路径。
具体的,生成搜索路径的过程如下:
通过对指令集进行深度优先搜索,给每个节点生成9个子节点,如果搜索深度为n,则深度优先搜索节点为9n次方,而每一个节点可能是搜索路径上的一个点,所有搜索路径是在这个9n节点上随机搜索的路径。
具体的,所述的随机突变方向包括9种,分别为:Opcode、Operand、GlobalSwap、LocalSwap、AddNops、Delete、Instruction、Weighted和Resize。STOKE对于X86-64的二进制优化,把候选重写表示为长度为l的有限指令循环序列,其中使用一个专有的标记UNUSED为候选重写中的占位标志。每种随机突变的定义如下表:
具体的,采用NLP技术中文本转embedding方法doc2vec算法对每条搜索路径进行解析,包括如下子步骤:
1)将搜索路径文件search.txt里面的每轮出现的Reward/Code/Action分成一个词条,将每个搜索路径保存成如下字典形式log_data={"action":None,"reward":None,"code":None,"cost":None};
2)将解析出来的词条(10w+)和"code"索引项通过遍历保存成一个list格式的数据集,同时将索引号码保存成另一个list格式的数据标签;
3)将数据集和对应的数据标签打包成机器机器学习模型doc2vec数据集的格式,通过doc2vec方法,设定embedding的长度vector_size=128,窗口大小为10,最小词条长度为1,训练次数epochs=20,训练出一个词法相关的模型model,然后在通过这个训练好的model,用model.infer_vector对每一个条目生成对应的code embedding。例如:code[1]作为model.infer_vector的输入,输出[0.2829849,1.38647834,…,8.38975521].
4)获得每个action的独热编码(one-hot)将分类的变量作为二进制向量表示。例如:第一种action类型Opcode的one-hot编码为[1,0,0,0,0,0,0,0,0]
具体的,在强化学习指导STOKE搜索空间搜索时,所述的reward采用每次优化后代码执行时间的双曲正切值。
具体的,所述强化学习方法采用PPO方法。深度强化学习可以捕获不同的指令,依赖关系和数据结构,从而能够学习一个复杂的模型,该模型可以更好地预测实际性能成本,并确定最佳的指令集突变因素。
具体的,PPO方法的目标是计算一个策略(π)——环境状态和行为之间的映射——使期望的回报最大化,其中,τ是定义单个情节的一系列状态和行为,学习者试图在当前状态下找到一个最佳行动,它包括学习寻找最佳行动和反复试验。在该方法中定义action=[0,1,2,3,4,5,6,7,8]分别是随机突变的9中方式,定义observation_space是数据预处理阶段的embedding模型,定义reward是突变后的指令函数运行在llvm中执行时间通过numpy包中的tanh双曲正切函数计算得到的。
深度强化学习与其他机器学习方法的区别在于自我探索和利用的存在,以及两者之间的权衡,RL可以使用比监督学习方法所需的更少的样本进行学习,并且可以针对多个目标进行协同优化,例如编译时间,代码大小和执行时间。
具体的,步骤3将STOKE生成的搜索空间和搜索路径以及搜索过程中经历的action和Reward输入到待优化的编译器中,让编译器学习STOKE的搜索策略,找到随机突变对代码优化的影响,最后得到一个优化的编译器保存在了~/ray_results/PPO_*中。
在本实施例中还公开了一种代码超优化方法,该方法用于获取待优化源代码,将待优化源代码输入超优化编译器中,向超优化编译器请求突变方向,直到代码收敛或者超时,优化结束,输出超优化代码。
具体的,本实施例所述的代码超优化对于代码长度较长的情况时需要分段对每段代码进行一次优化,每次优化具体的步骤如下:将待优化源代码输入超优化编译器中,通过每次计算得到的reward和生成的新的优化代码Code-Enbedding,作为强化学习模型PPO的每次step的输入,PPO计算出一个最优的下一步突变的方向action,来指导STOKE的突变方向,以实现在同样或者更大的搜索空间内,使用更短的时间,得到更高效,更精简的优化代码。
本实施例还公开了一种代码超优化系统,包括输入单元、预处理单元、模型训练单元和超优化编译器;
所述的输入单元用于获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
所述的预处理单元用于对每条搜索路径进行解析,获得每条搜索路径包含的词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;
所述的模型训练单元用于将所有搜索路径包含的词条作为训练集,将随机突变方向的所有种类作为标签,对编译器通过强化学习方法进行训练,所述强化学习方法包括reward、action和state三个参数,其中,将每个词条的代码优化程度作为reward,将每个词条的随机突变方向作为action,将每个词条的突变代码作为state;
所述的超优化编译器为训练好的编译器,所述的超优化编译器的突变方向为优化后的随机突变方向,所述的超优化编译器用于获取待优化源代码,将待优化源代码输入超优化编译器中,获得待优化源代码的突变方向,直到代码收敛时优化结束,输出超优化代码。所述的优化截至条件也可以为时间超时。
实施例1
本实施例使用stoke/examples/hacker的测试用例作为RL-stoke编译器的数据集,总共有25种基础指令集,每种指令集的数据单独训练并测试.使用halide数据集作为深度强化学习的数据训练集,对生成强化学习模型的过程中,首先对所有源代码文件进行自动化的静态分析,生成所有的代码执行基准时间(LLVM–O0),使用stoke编译器超优化功能对所有代码生成搜索路径,并获得9种突变方向作为标签,然后将搜索路径通过doc2vec转化为embedding,与标签一同进行RL-stoke编译器的训练和测试。
表1 halide数据集中LLVM GCC优化和STOKE优化结果
本实施例中训练模型的硬件平台采用:NVIDIA GeForce GTX 1080GPU、IntelXeon E5-1620 CPU。
本实施例中将深度强化学习视作一个黑盒,输入代码的stoke超优化搜索路径的当前指令集,输出为深度强化学习网络给出的最优action突变,因此简要介绍训练时是如何迭代的。
输入的当前指令集通过深度强化学习端,首先将指令集通过doc2vec转化为embedding矩阵,然后进行深度强化学习中,每一次迭代都对深度强化学习中的参数节点的特征向量进行更新,在更新某个节点的特征向量时,会综合考虑这个节点本身的特征向量与对这个节点产生影响的邻接节点的特征向量,将这些特征向量与一个矩阵参数相乘之后就是这个节点更新之后的特征向量,矩阵参数在训练过程中会不断更新。经过一定的迭代次数之后,将特征矩阵和一个矩阵参数相乘,得到模型的输出即二维向量,这个矩阵参数同样会在训练的过程中不断更新。
编译器中的参数为:深度强化学习网络和自然语言处理领域常用的参数值,设置节点的特征向量为128维,训练的batch size为8,学习率为0.001,特征矩阵的迭代次数为20。
表2 hacker数据集中LLVM GCC优化和STOKE优化结果
speedup | STOKE(30) | STOKE(100) | RL(30) | RL(100) | LLVM(O0) | GCC(O3) |
P01 | 1.189 | 1.253 | 1.468 | 1.583 | 1.000 | 1.218 |
P02 | 1.212 | 1.278 | 1.432 | 1.603 | 1.000 | 1.169 |
P03 | 1.387 | 1.423 | 1.498 | 1.588 | 1.000 | 1.231 |
P04 | 1.686 | 1.701 | 1.713 | 1.797 | 1.000 | 1.354 |
P05 | 1.234 | 1.425 | 1.439 | 1.582 | 1.000 | 1.311 |
P06 | 1.752 | 1.780 | 1.853 | 1.887 | 1.000 | 1.540 |
P07 | 1.471 | 1.600 | 1.833 | 1.871 | 1.000 | 1.488 |
P08 | 1.732 | 1.769 | 1.789 | 1.871 | 1.000 | 1.587 |
P09 | 1.891 | 1.910 | 2.019 | 2.129 | 1.000 | 1.919 |
P10 | 1.798 | 1.871 | 1.913 | 2.140 | 1.000 | 1.871 |
P11 | 1.800 | 1.811 | 1.978 | 1.999 | 1.000 | 1.789 |
P12 | 1.872 | 1.913 | 1.954 | 2.192 | 1.000 | 1.891 |
P13 | 1.761 | 1.790 | 1.811 | 1.892 | 1.000 | 1.782 |
P14 | 1.784 | 1.871 | 1.891 | 1.982 | 1.000 | 1.843 |
P15 | 1.600 | 1.698 | 1.735 | 1.891 | 1.000 | 1.687 |
P16 | 1.692 | 1.724 | 1.800 | 1.852 | 1.000 | 1.711 |
P17 | 1.692 | 1.744 | 1.871 | 1.911 | 1.000 | 1.735 |
P18 | 1.680 | 1.724 | 1.754 | 1.899 | 1.000 | 1.689 |
P19 | 1.591 | 1.655 | 1.691 | 1.782 | 1.000 | 1.652 |
P20 | 1.591 | 1.609 | 1.689 | 1.734 | 1.000 | 1.598 |
P21 | 1.491 | 1.509 | 1.614 | 1.698 | 1.000 | 1.514 |
P22 | 1.701 | 1.757 | 1.803 | 1.954 | 1.000 | 1.812 |
P23 | 1.712 | 1.790 | 1.982 | 2.111 | 1.000 | 1.891 |
P24 | 1.812 | 1.890 | 2.010 | 2.114 | 1.000 | 1.910 |
P25 | 1.689 | 1.718 | 1.815 | 1.984 | 1.000 | 1.812 |
mean | 1.633 | 1.688 | 1.774 | 1.882 | 1.000 | 1.640 |
实验结果表明本实施例中的方法命中率高,加速比高,经过RL-stoke训练,针对hacker数据集测试结果如下表所示。按照LLVM–O0,编译执行的结果作为基准,与GCC–O3stoke本身比较,度量值主要考虑SPPEDUP=base_time/optimization_time.STOKE30表示epoch等于30轮。
以下给出优化前和优化后的一段代码的比较:
优化前
优化后
由超优化后代码和优化前代码可以得到:优化前代码冗余较多,比如nop空位,另外优化前代码长度和执行效率较低,比如计算100次i++,可能优化前是从1-100次相加,优化后会变成10*10次相加,因此可以说明,所有优化后代码长度和代码执行效率都会提高。
Claims (5)
1.一种基于RL的超优化编译器建立方法,其特征在于,包括如下步骤:
步骤1:获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
步骤2:采用NLP技术中文本转embedding方法doc2vec算法对每条搜索路径进行解析,获得每条搜索路径包含的多个词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;包括如下子步骤:
1)将搜索路径文件search.txt里面的每轮出现的Reward/Code/Action分成一个词条,将每个搜索路径保存成如下字典形式log_data = {"action":None, "reward":None, "code":None, "cost":None};
2)将解析出来的词条和"code"索引项通过遍历保存成一个list格式的数据集,同时将索引号码保存成另一个list格式的数据标签;
3)将数据集和对应的数据标签打包成机器机器学习模型doc2vec数据集的格式,通过doc2vec方法,设定embedding的长度vector_size=128,窗口大小为10,最小词条长度为1,训练次数epochs=20,训练出一个词法相关的模型model,然后在通过这个训练好的model,用model.infer_vector对每一个条目生成对应的code embedding;
4)获得每个action的独热编码(one-hot)将分类的变量作为二进制向量表示;
步骤3:将所有搜索路径包含的词条作为训练集,将随机突变方向的种类作为标签,对
编译器通过强化学习方法进行训练,所述强化学习方法采用PPO方法,所述PPO方法的目标
是计算策略π∗使期望的回报最大化,,其中,是定义单个情
节的一系列状态和行为,学习者试图在当前状态下找到一个最佳行动,它包括学习寻找最
佳行动和反复试验;在该PPO方法中定义action =[0,1,2,3,4,5,6,7,8] 分别是每个词条
随机突变的9种方式,定义observation_space是数据预处理阶段的embedding模型,定义
reward是每个词条的代码优化程度,即突变后的指令函数运行在llvm中执行时间通过
numpy包中的tanh双曲正切函数计算得到;定义state是每个词条的突变代码;将STOKE生成
的搜索空间和搜索路径以及搜索过程中经历的action和Reward输入到待优化的编译器中,
让编译器学习STOKE的搜索策略,找到随机突变对代码优化的影响,最后得到一个训练好的
编译器保存在~/ray_results/PPO_*中;
将训练好的编译器作为超优化编译器,所述的超优化编译器的突变方向为优化后的随机突变方向。
2.如权利要求1所述的基于RL的超优化编译器建立方法,其特征在于,所述的随机突变方向包括9种,分别为:Opcode、Operand、GlobalSwap、LocalSwap、AddNops、Delete、Instruction、Weighted和Resize。
3.一种代码超优化方法,其特征在于,该方法用于获取待优化源代码,将待优化源代码输入采用权利要求1或2的基于RL的超优化编译器建立方法建立的超优化编译器中,获得待优化源代码的突变方向,直至代码收敛时优化结束,输出超优化代码。
4.一种代码超优化系统,其特征在于,包括输入单元、预处理单元、模型训练单元和采用权利要求1或2的基于RL的超优化编译器建立方法建立的超优化编译器;
所述的输入单元用于获取源代码,将源代码转换为二进制文件后输入编译器中进行搜索,输出搜索过程中的所有搜索路径;
所述的预处理单元用于对每条搜索路径进行解析,获得每条搜索路径包含的多个词条,其中,每个词条包括代码优化程度、突变代码和随机突变方向;
所述的模型训练单元用于将所有搜索路径包含的词条作为训练集,将随机突变方向的种类作为标签,对编译器通过强化学习方法进行训练,所述强化学习方法包括reward、action和state三个参数,其中,将每个词条的代码优化程度作为reward,将每个词条的随机突变方向作为action,将每个词条的突变代码作为state;
所述的超优化编译器为训练好的编译器,所述的超优化编译器的突变方向为优化后的随机突变方向,所述的超优化编译器用于获取待优化源代码,将待优化源代码输入超优化编译器中,获得待优化源代码的突变方向,直到代码收敛时优化结束,输出超优化代码。
5.如权利要求4所述的代码超优化系统,其特征在于,所述的随机突变方向包括9种,分别为:Opcode、Operand、GlobalSwap、LocalSwap、AddNops、Delete、Instruction、Weighted和Resize。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110507940.XA CN113204349B (zh) | 2021-05-10 | 2021-05-10 | 基于rl的超优化编译器建立、代码超优化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110507940.XA CN113204349B (zh) | 2021-05-10 | 2021-05-10 | 基于rl的超优化编译器建立、代码超优化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113204349A CN113204349A (zh) | 2021-08-03 |
CN113204349B true CN113204349B (zh) | 2023-02-03 |
Family
ID=77030652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110507940.XA Active CN113204349B (zh) | 2021-05-10 | 2021-05-10 | 基于rl的超优化编译器建立、代码超优化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113204349B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931955B (zh) * | 2023-09-18 | 2024-01-09 | 之江实验室 | 基于人工智能的编译器自动调优方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107730393A (zh) * | 2017-11-07 | 2018-02-23 | 东华大学 | 一种基于改进强化免疫算法的农业物联网资源调配方法 |
CN110147236A (zh) * | 2019-04-30 | 2019-08-20 | 阿里巴巴集团控股有限公司 | 代码编译方法及装置 |
CN112181420A (zh) * | 2020-08-27 | 2021-01-05 | 天津大学 | 基于强化学习的编译器缺陷定位方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190095796A1 (en) * | 2017-09-22 | 2019-03-28 | Intel Corporation | Methods and arrangements to determine physical resource assignments |
US20210049465A1 (en) * | 2019-08-12 | 2021-02-18 | University Of Southern California | Self-optimizing and self-programming computing systems: a combined compiler, complex networks, and machine learning approach |
CN111078290B (zh) * | 2019-12-17 | 2023-03-14 | 西安电子科技大学 | 一种用于可扩展指令集的编译器及编译方法 |
CN112035116B (zh) * | 2020-08-26 | 2021-07-16 | 大连理工大学 | 多目标编译优化序列选择的代理建模方法 |
-
2021
- 2021-05-10 CN CN202110507940.XA patent/CN113204349B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107730393A (zh) * | 2017-11-07 | 2018-02-23 | 东华大学 | 一种基于改进强化免疫算法的农业物联网资源调配方法 |
CN110147236A (zh) * | 2019-04-30 | 2019-08-20 | 阿里巴巴集团控股有限公司 | 代码编译方法及装置 |
CN112181420A (zh) * | 2020-08-27 | 2021-01-05 | 天津大学 | 基于强化学习的编译器缺陷定位方法 |
Non-Patent Citations (3)
Title |
---|
RL Based Network Accelerator Compiler for Joint Compression Hyper-Parameter Search;Xiaoyu Feng;《2020 IEEE International Symposium on Circuits and Systems (ISCAS)》;20200928;全文 * |
一种面向CoSy编译框架的编译优化开发方法;刘博等;《计算机技术与发展》;20130310(第03期);全文 * |
基于RISC-V架构的强化学习容器化方法研究;徐子晨;《计算机工程与科学》;20210228;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113204349A (zh) | 2021-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3155512A1 (en) | Systems and methods for software analytics | |
CN110321116B (zh) | 一种面向编译优化中计算代价约束问题的高效优化方法 | |
Le et al. | Interactive program synthesis | |
CN108027748A (zh) | 指令集模拟器及其模拟器生成方法 | |
CN115576840B (zh) | 基于机器学习的静态程序插桩检测方法及装置 | |
CN113204349B (zh) | 基于rl的超优化编译器建立、代码超优化方法及系统 | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
Xu et al. | Dsmith: Compiler fuzzing through generative deep learning model with attention | |
Yu et al. | Learning the relation between code features and code transforms with structured prediction | |
Luo et al. | Boosting symbolic execution via constraint solving time prediction (experience paper) | |
Pottenger et al. | Parallelization in the presence of generalized induction and reduction variables | |
Li et al. | FuzzBoost: Reinforcement compiler fuzzing | |
CN112527272A (zh) | 对接tvm的方法及相关设备 | |
Elphick et al. | Partial evaluation of MATLAB | |
Alshraideh | A complete automation of unit testing for JavaScript programs | |
CN114840856B (zh) | 一种状态感知的物联网可信执行环境模糊测试方法和系统 | |
Olschanowsky et al. | Pir: Pmac's idiom recognizer | |
Poulding et al. | Automated random testing in multiple dispatch languages | |
Parisi et al. | Making the most of scarce input data in deep learning-based source code classification for heterogeneous device mapping | |
CN113407443A (zh) | 一种基于gpu二进制代码翻译的高效模糊测试方法 | |
Chang et al. | Support NNEF execution model for NNAPI | |
Zhang et al. | Semantic understanding of source and binary code based on natural language processing | |
You et al. | Reduced O3 subsequence labelling: a stepping stone towards optimisation sequence prediction | |
Kothari et al. | Minimizing the size of test suite using genetic algorithm for object oriented program | |
Sanjel et al. | Partitionable programs using tyro v2 |
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 |