全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

蚁群算法在验证用例自动化回归中的应用有哪些

时间:2023-10-07 16:58

人气:

作者:admin

标签: JAVA  仿真器  蚁群算法 

导读:如今的芯片规模越来越大,功能也愈加复杂。相应的验证用例也越来越复杂,用例动态仿真耗时也随之增加,而且个数有时动辄上百个。...

背景:如今的芯片规模越来越大,功能也愈加复杂。相应的验证用例也越来越复杂,用例动态仿真耗时也随之增加,而且个数有时动辄上百个。

在验证回归过程中,如何提高效率成为广大验证工程师不得不考虑的问题。

本文尝试在验证工作中,通过蚁群算法优化用例回归序列,尽量缩短回归时间,同时提高用例回归的自动化程度。

(一)问题描述

假设当前有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]。

另外,在实际应用中,蚁群算法有以下问题①在有限迭代次数内,算法不收敛;②算法收敛,但得到的最优解是**局部最优解**,非全局最优解。局部最优解是传统蚁群算法的缺点之一。实际使用时可以折衷考虑,适当 *增大迭代次数* ,同时提高蚁群的 *随机性* ,在有限的迭代次数内*持续搜寻最短时间的任务分配方案。*






审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信