背景:如今的芯片规模越来越大,功能也愈加复杂。相应的验证用例也越来越复杂,用例动态仿真耗时也随之增加,而且个数有时动辄上百个。
在验证回归过程中,如何提高效率成为广大验证工程师不得不考虑的问题。
本文尝试在验证工作中,通过蚁群算法优化用例回归序列,尽量缩短回归时间,同时提高用例回归的自动化程度。
(一)问题描述
假设当前有108个用例需要回归,并且我们有先前用例仿真的日志文件:日志文件中有该用例仿真的耗时信息。
按照传统做法,我们可能首先打开十多个terminal(比如15个),平均每个terminal分配若干用例(比如7个),根据用例名的字典序回归用例。
在大多数情况下,会有个别terminal中分配的用例很快或较快的回归完,而其余几个terminal时间却又很长,迟迟不能完成,时间最长的那个terminal决定了一次回归所用的总时间。
那么,是否可以找到更好的回归队列分配给各个terminal, ***使得回归总时间最短*** ?
(二)问题转化
现在,问题就可以转化为:108个耗时不等的任务,分配给15个并行队列,求15个队列的任务序列组合,使得15个队列的总耗时最小;这个任务分配问题可以进一步引申为**负载调度**问题,108个任务分配给15台性能各异(或同等)的服务器。
上面是从时间角度进行的问题转化,也可以从空间角度考虑,把用例耗时对应空间大小,把问题转化为 **存储问题** ,本文暂不研究。
(三)问题解决
我们参考作者的JavaScript代码,考虑用perl实现算法的核心代码。具体步骤如下:
1)提取时间信息:即从仿真日志里提取时间信息,分两步①粗提取,这个使用shell命令即可,可以放到makefile中;②准确提取,在刚刚的makefile中调用perl脚本,在perl脚本中利用perl强大的文本处理能力提取准确的时间信息,存入一个哈希%Case_hash(键-用例名,值-用例对应的时间)中。
2)蚁群算法的perl实现:除了刚刚得到的哈希数组%Case_hash,我们还要给定队列数目QueneNum,这是蚁群算法的输入。同时,蚁群算法还涉及蚂蚁数量AntNum,迭代次数ItNum,随机因子等参数,参考文献[1]中有详细说明,这里不再赘述。 最终,蚁群算法会得到最优的任务分配矩阵,我们通过这个矩阵就可以知道每个队列分配了那几个用例。
3)回归队列生成:得到用例回归队列后,将这些队列以target形式写入新的makefile中(sub_makefile,在主makefile中include这个sub_makefile)。
4)自动回归:刚刚生成了sub_makefile,我们再新建一个脚本,实现“自动打开指定个数terminal,在每个terminal自动输入相应回归命令(make)即可”。
(四)问题的问题
在perl实现蚁群算法时,矩阵的处理可能会稍微麻烦一些,这里使用了哈希嵌套的做法[2]。
另外,在实际应用中,蚁群算法有以下问题①在有限迭代次数内,算法不收敛;②算法收敛,但得到的最优解是**局部最优解**,非全局最优解。局部最优解是传统蚁群算法的缺点之一。实际使用时可以折衷考虑,适当 *增大迭代次数* ,同时提高蚁群的 *随机性* ,在有限的迭代次数内*持续搜寻最短时间的任务分配方案。*
审核编辑:刘清
-
仿真器
+关注
关注
14文章
1016浏览量
83612 -
JAVA
+关注
关注
19文章
2954浏览量
104511 -
蚁群算法
+关注
关注
3文章
55浏览量
13186
原文标题:蚁群算法在验证用例自动化回归中的应用
文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论