APP下载

基于GRU_LSTM及RL算法的伪随机指令生成器

2024-02-21欧阳有恒严大卫

计算机技术与发展 2024年2期
关键词:覆盖率代码指令

欧阳有恒,严大卫

(1.南京信息工程大学,江苏 南京 210044;2.无锡先进技术研究院,江苏 无锡 214125)

0 引 言

随着处理器设计规模的日益增大,结构的复杂程度越来越高,处理器的验证也越来越困难,传统的定向测试虽然依旧无法替代但已经满足不了现在高效的验证需求。伪随机验证能在短时间内产生大量伪随机测试向量,有助于快速捕获人工定向测试预期之外的验证盲点,在现代微处理器验证领域有着非常重要的作用[1]。因此,如何合理有效地生成伪随机指令测试向量,提高覆盖率是伪随机指令生成器的研究热点。目前,人工智能和大数据算法飞速发展,机器学习算法(Machine Learning,ML)也大量用于测试向量生成中。将ML引入测试向量生成的早期工作可以追溯到1997年[2],其由遗传算法来实现。遗传算法(Genetic Algorithm,GA)被用作微处理器中高速缓存访问仲裁机制CAAM的测试生成器,基于遗传算法的生成器产生输入指令集刺激来触发CAAM状态,这些状态之前没有从早期运行指令的结果中学习到。结果表明,与传统的伪随机生成器相比,使用遗传算法时的状态数增加了约13%。后罗春[3]、宋倩[4]、吴海涛[5]等人在此基础上,针对遗传算法的性能进行改进,不断实现机器学习在测试向量生成领域的优化。机器学习通过在验证过程中采用有监督和无监督模型作为测试向量生成器,提供了关于特定模型解决发现问题的有用见解。文献[6]提出使用3层神经网络作为激励源,用于一个简单CPU DUT的功能验证,以达到断言覆盖率指标;文献[7]提出使用支持向量机(Support Vector Machines,SVM)作为激励生成器来去除传统的伪随机生成器产生的冗余刺激,以64位RISC处理器作为待测设计(Design Under Test,DUT),结果显示,使用SVM方法的总时间,包括模型学习花费的时间,明显少于使用传统伪随机化方法花费的时间并在一定程度上提高了覆盖率;文献[8]对SVM、深度神经网络(Deep Neural Networks,DNN)和伪随机森林模型(Random Forest,RF)作为四核缓存DUT的激励生成器进行了测试,工作结果表明,SVM,DNN和RF的模拟时间分别加快了68.5%,77%和78%。

此后,随着循环神经网络(Recurrent Neural Network,RNN)的广泛应用,逐渐将RNN用于指导指令生成。文献[9]提出使用RNN来引导生成器,反馈循环从功能和代码覆盖度量中获取输入,修改为处理器生成指令集的约束,以实现覆盖目标。结果表明,与传统的指令生成方法相比,覆盖率能达到总覆盖目标的85%,但是在长期记忆和反向传播中存在梯度爆炸等问题。随后,瑞士人工智能研究所的Jurgen Schmidhuber提出长短期记忆结构(Long Short-Term Memory,LSTM),在此基础上,2014年Cho等[10]提出一个广泛使用的门控循环单元(Gate Recurrent Unit,GRU)。GRU神经网络引入门机制,结构简单且可解决长期记忆和反向传播中的梯度爆炸问题,但拟合精度却比不上LSTM。目前在指令生成领域,GRU与LSTM相结合的GRU_LSTM算法更受欢迎,不仅训练周期短,而且实现了高拟合精度的目标。文献[11-13]提出将GRU与LSTM构成组合模型GRU_LSTM,这种模型比单一模型能更好地预测参数。同时,由于近年来深度学习掀起一股新的人工智能的浪潮,相继在围棋、视频学习领域取得显著成绩,强化学习[14-15]也被应用于指导指令生成,其采用一种奖励机制的学习模式,以便模型能持续地学习信息并更新参数。William Hughes等[16]提出使用监督和强化学习以高度自动化的方式提供了比伪随机结果更好的结果,从而确保可以在加速的时间尺度和更少的资源下实现完全设计覆盖的设计验证目标。在文献[11-13]的指导下,该文利用伪随机指令生成器,基于UVM验证[17]方法学构建验证平台,并在此基础上将GRU_LSTM算法与强化学习结合,使用基于霍夫曼编码的伪随机指令包,在训练GRU_LSTM模型过程中得到推荐的伪随机指令类型,通过奖励函数对模型参数(影响伪随机指令类别分布)再次优化,自动优化测试用例的约束,得到更优测试用例,以得到更高的代码覆盖率。

1 基于GRU_LSTM算法及强化学习算法的伪随机指令生成器

该文的主要任务是使用GRU和LSTM算法,应用循环递归网络序列记忆特性,挖掘测试指令包序列对覆盖率的影响,将指令包指纹编码序列作为样本,代码覆盖率作为指导,开展模型训练;并在训练完成的GRU_LSTM网络输入伪随机指令包的编码序列,得到该序列的最优覆盖率,作为现实奖励,反馈给强化学习,用于指示下一步结合强化学习的新模型训练。本节对GRU_LSTM算法的理论基础和强化学习的理论基础进行描述,并在此基础上搭建RLGRU_LSTM模型。

1.1 GRU_LSTM算法

门控循环单元的主要功能是在指令生成过程中捕捉指令序列的时序特性(即指令执行的逻辑顺序),提升数据重构的准确性。作为RNN的一种变形单元,GRU解决了长期记忆和反向传播中的梯度消失和爆炸问题,在达到相同模型性能的前提下其计算量小,且效率更高[18-19],但其在拟合精度上却逊色于LSTM。因此,该文考虑使用一种第一层为GRU、第二层为LSTM的双层神经网络模型,既有LSTM的高精度、高稳定性,又有GRU的训练周期短特点。对待输入指令序列进行样本处理,根据霍夫曼编码[20]得到测试伪随机指令包的编码序列,输出是基于验证平台得到的覆盖率,作为损失函数的参数,反馈给模型。

GRU_LSTM模型第一层由多个GRU门控单元组成,融合更新门和重置门,具体结构如图1所示。

图1 门控循环单元结构

其中,Zt表示当前时刻的输入,Yt表示当前时刻的输出,Yt-1表示上一时刻的输出。

vt为更新门,更新门决定了在每一层网络中有多少信息可以传递给未来,计算公式如式1所示[21]:

vt=σ(Wv*[Yt-1,Zt]+bv)

(1)

其中,σ表示激活函数sigmod,Wv表示重置门的权重矩阵,bv表示偏差向量。rt为重置门,重置门与更新门作用相反,它决定了当前网络层中有多少信息不能传递到未来,计算公式如式2所示[21]:

rt=σ(Wr*[Yt-1,Zt]+br)

(2)

其中,Wr表示更新门的权重矩阵,br表示偏差向量。根据更新门和重置门结果,GRU算法计算出候选隐藏状态ht,计算公式如式3所示[21]:

ht=tanh(Wh*[rt*Yt-1,Zt]+bh)

(3)

其中,tanh表示激活函数tanh,Wh表示权重矩阵,bh表示偏差向量。最后,GRU算法的输出Yt计算公式如式4所示[21]:

Yt=(1-vt)*Yt-1+vt*ht

(4)

在GRU网络层输出后,结果接入LSTM网络层,GRU算法的输出Yt就是LSTM的输入。LSTM的单元结构如图2所示。其中,Nt为当前时刻的输入,Ut为当前时刻的输出,Ct为当前时刻的状态,Nt-1,Ut-1,Ct-1为上一时刻参数。LSTM有遗忘门、输入门、输出门。每个LSTM单元结构的前向传播公式组如式5~式9所示[21]:

图2 LSTM单元结构

ft=σ(Wf*[Ut-1,Nt]+bf)

(5)

pt=tanh(Wc*[Ut-1,Nt]+bc)

(6)

Ct=ftCt-1+it*pt

(7)

ot=σ(Wo*[Ut-1,Nt]+bo)

(8)

Ut=ottanh(Ct)

(9)

其中,Wf表示遗忘门的权重矩阵,Wi,Wc表示输入门的权重矩阵,Wo表示输出门的权重矩阵;bf,bi,bc,bo为偏差向量;ft表示最后一层神经元被遗忘的概率;it和pt表示当前需要保留的负载信息的比例;ot为输出门。

在模型训练过程中,利用MSE梯度随误差减小的特性以及为使损失函数具有可导性,使用Huber损失函数[22]来计算模型期望覆盖率Y与真实覆盖率f(x)之间的差值,以获得更精确的最小值,使模型训练更准确。计算公式如式10所示:

(10)

其中,δ作为选择参数,由真实实验确认。

1.2 强化学习

强化学习与监督学习和无监督学习构成了机器学习领域。强化学习的过程通常可以由马尔可夫决策过程(Markov Decision Process,MDP)[23]进行描述,原理如图3所示。

图3 强化学习原理

智能体(agent)在环境中,通过不断的“试错”来学习,通过与环境的交互获得环境感知的状态(S),在价值策略(Π)的指导下进行决策并指导环境进行一系列的动作(A),而环境会将由这一系列动作触发的奖励反馈给智能体,智能体根据获得的奖励更新动作,向着最大化累计奖励的方向进行迭代,从而不断提高自身的决策能力。因此,强化学习的目标相当于学习一个最优策略来最大化奖励函数。如何设置合适的状态、策略和奖励函数至关重要。

1.3 RLGRU_LSTM算法

1.3.1 基于RLGRU_LSTM算法的验证平台架构

通过研究大量国内外文献发现,目前在伪随机指令生成器的生成策略大体分为两种:动态的生成策略和静态的生成策略[24]。这两种生成策略各有优缺点。通过分析两者的优缺点,该文在研究伪随机指令生成技术时采用静态生成策略,通过随机组合的方式,覆盖一些设计验证工程师无法预料的缺陷。整个验证平台主要由伪随机指令生成器、待测设计DUT和指令集模拟器(Instruction Set Processor,ISP)构成,每个模块由脚本控制启动。在伪随机指令生成模块,针对强化学习在样本训练阶段,训练样本的收敛速度满足不了现有技术的需求,样本学习效率低下。该文在现有GRU_LSTM算法[11-13]和强化学习[15-16]基础上,将GRU_LSTM和强化学习算法进行结合,构建新算法RLGRU_LSTM,提高代码覆盖率,验证平台架构如图4所示。

其中伪随机指令生成器根据指令集格式、指令类型添加约束,生成大量伪随机测试向量,传递给ISP和DUT。该文构建了能生成合法指令的伪随机约束模板。在构建指令模板过程中,根据每条指令所属基本类型的基本特点,将各个字段约束在合理范围内,并拼接成合法指令。其中约束包含如操作码、功能码范围、存储器可偏移地址大小、寄存器编址、立即数和符号数大小、指令中各个域的排列组合以及核心模式等。指令集模拟器用于判断DUT运行命令后的结果正确与否。ISP和DUT在接收伪随机指令生成器输出的指令或者定向测试指令后,使用正则表达式等方法,通过脚本对两者输出结果进行对比并输出正确或错误的判断。

由图4可知,在模型训练开始之前,根据强化学习的目标策略和历史覆盖率结合进行模型训练。在RLGRU_LSTM模型中,GRU_LSTM作为RL智能体,将按照其遵循的策略发送下一步的操作,以验证平台作为整体环境,根据环境反馈的奖励,按照策略进行状态调整,GRU_LSTM模型中神经网络如何学习修改功能码和操作码类别权重系数是策略的具体表现,智能体的奖励与当前训练模型覆盖率和上一时刻覆盖率相关。以指令包指纹编码序列作为样本,覆盖率指导损失函数,进行模型训练,向训练完成的GRU_LSTM网络输入伪随机指令包的指纹序列,得到该序列的最优覆盖率模型并作为目标模型和学习模型,在此基础上与强化学习相结合,将当前状态指令包输入目标模型,下一状态指令包输入学习模型,将学习模型得到的覆盖率与目标模型学习得到的覆盖率差值作为奖励,根据策略调节学习模型的权重参数,当调节次数到达某一固定值如10次后,将学习模型的权重参数赋值给目标模型,完成对RLGRU_LSTM模型的训练。

1.3.2 动作与奖励

RLGRU_LSTM在模型训练过程中,可以看作是快速在一堆指令中寻找出可以达到最大覆盖率的指令集合,通过奖励函数,学习GRU_LSTM算法模型对opcode和func等类别的权重分配。因此在强化学习过程中对奖励函数的设计十分重要,奖励函数的好坏决定了智能体是否有效的学习环境,能否高效地完成模型训练。在指令生成模型中,芯片验证代码覆盖率能否快速达到最高值,取决于生成指令是否能够在每次模型训练过程中有目标地按照奖励函数生成。因此,若想高效找到一组指令集达到最高覆盖率,需要在当前训练覆盖率f大于上一时刻覆盖率best(f)时给予正奖励;当前覆盖率小于上一时刻覆盖率时给予负奖励。t时刻,最佳覆盖率奖励如式11所示:

(11)

1.4 算法训练过程

基于GRU_LSTM及强化学习算法的伪随机指令生成器的流程和算法流程如图5所示。

(1)加载验证环境,使用脚本调用所需编译、仿真软件,配置仿真、编译相关参数,初始DUT所需条件、寄存器、只读存储器rom等,创建初始约束条件;

(2)对指令以及权重进行霍夫曼编码;

(3)确定GRU_LSTM网络的神经元个数,Huber的选择参数δ,梯度优化函数,对GRU_LSTM模型进行训练,得到最优GRU_LSTM模型;

(4)根据图4,将当前状态值和下一时刻状态输入到目标GRU_LSTM模型和学习模型,并返回奖励值,计算Huber损失函数,根据Adam优化器自动更新下一次状态,以及迭代次数T,得到权重,完成RLGRU_LSTM的训练。

2 实际应用及性能分析

2.1 实验环境

验证平台在Python3.6环境下运行,DUT为基于RISC-V指令集架构开发的一款面向低功耗嵌入式领域的处理器核心,在微结构上实现单译码、单发射、顺序执行、静态预测的五级流水线。采用cadence的xcelium的仿真工具,对verilog文件进行编译和仿真。

采用IMC(Integrate Metrics Cener)收集、合并覆盖率并输出覆盖率日志。整个验证平台通过Python脚本整合,分析终端操作命令,调用对应工具、软件、脚本、算法和实验对象代码等,根据各软件运行日志,输出仿真、覆盖率、对比等结果。实验中构建的GRU_LSTM的两层神经网络均采用128个神经元,Huber损失函数的超参数σ根据实际实验结果设置为0.98,使用Adam优化器优化权重wi,完成对所提RLGRU_LSTM算法的训练。该文以伪随机指令的覆盖率与应用新算法训练模型得到的覆盖率,以及其他文献所提方法得到的覆盖率做对比,验证算法的有效性。

2.2 实验结果对比

以代码覆盖率作为RLGRU_LSTM模型的损失函数参数,指导生成伪随机指令的一个最直接目的就是提高代码覆盖率,减少验证收敛时间,快速覆盖验证盲点。图6给出了基于原伪随机指令生成器的验证平台和基于RLGRU_LSTM的伪随机指令生成器的验证平台分别在迭代100,200,300次收集到的代码覆盖率。图7给出随着次数的增加,基于原伪随机指令生成器的验证平台和基于RLGRU_LSTM的伪随机指令生成器的验证平台代码覆盖率的收敛情况。表1给出所构建模型与其他文献所提模型在指令生成应用上,与不采用任何提高覆盖率方式的原覆盖结果的提高对比。

表1 RLGRU_LSTM与其他模型覆盖率提高对比 %

图6 原有验证平台和基于RLGRU_LSTM的验证平台代码覆盖率对比

实验结果清楚表明,对比其他文献所提方法,文中模型能明显提高覆盖率,并且随着次数的增加,基于原伪随机指令生成器的验证平台的代码覆盖率已趋于不变,覆盖率值约62%,而基于RLGRU_LSTM的伪随机指令生成器的验证平台的代码覆盖率依旧在缓慢增加至约82%,且基于RLGRU_LSTM的伪随机指令生成器的验证平台会比基于原伪随机指令生成器的验证平台较早地到达目标覆盖率值。但是由于有些覆盖条件是在约束之外、部分分支条件无法进入等原因,覆盖率最后无法达到100%。

3 结束语

为解决实际情况中如何提高伪随机指令生成器代码覆盖率的问题,结合RLGRU_LSTM,以及霍夫曼编码指令包方式,针对该文搭建的验证平台,在约束指令条目情况下,将代码覆盖率提高至82%左右,高于原伪随机指令生成器约19%,且对比文献[2,7,9,11-13],RLGRU_LSTM模型在指令生成过程中代码覆盖率增幅明显优于文献所提模型。同时相比原伪随机指令生成器,覆盖率提前约20 s达到某一目标值。但在实际应用过程中仍存在一个问题,覆盖率包含功能覆盖率和代码覆盖率,该文只考虑了代码覆盖,然而100%的代码覆盖率并不一定意味着该设计已经得到了完全的验证。代码的覆盖范围并没有完全定义验证的完整性和质量,功能覆盖率需要状态机在不同状态间相互切换完成某一流程或严苛到特定节拍的触发条件,如何将功能点覆盖率考虑进来是有待考虑的一点。

猜你喜欢

覆盖率代码指令
听我指令:大催眠术
民政部等16部门:到2025年村级综合服务设施覆盖率超80%
我国全面实施种业振兴行动 农作物良种覆盖率超过96%
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
创世代码
创世代码
创世代码
创世代码
基于喷丸随机模型的表面覆盖率计算方法