FPGA|CPLD|ASIC论坛
直播中

王波

7年用户 1401经验值
私信 关注
[经验]

如何理解Xcelium的多核仿真呢?

  提升仿真速度,一直是各EDA厂商努力的目标,原因自然都是time to Market。但是,既然已经有了非常快的硬件仿真器(如Z1),以及比非常快更快的FPGA原型验证环境(如S1),为什么还要提升Simulation的速度呢?这个问题暂且放一放,我们先思考另一个问题。
  在Formal、Simulation、Emulation、FPGA Prototype中,验证工程师会选择哪种方法作为其最主要的验证手段?
  我相信大部分的验证工程师会说:Simulation。因为:
  Simulation 的验证方法最完备(功能覆盖率、代码覆盖率等);
  Simulation 的验证积淀最深厚(Feature List、Checklist、VIP等);
  Simulation 的验证流程最成熟(版本管理与发布流程等);
  Simulation 的验证平台最可控(验证组件修改方便);
  Simulation 的验证环境最可视(查看波形,打印信息等)。
  Simulation 在整条产业链中,涉及到芯片项目中如版本管理、项目沟通等方方面面内容,因此具有一定的不可替代性。对Simulation进行加速,非常必要。
  多核并行如何让仿真快起来
2.jpg
  Linux工作站一般使用的是64bit通用的处理器。通用处理器处理的是通用的业务,在工作站上,我们会运行仿真,也会做综合,会做布局&布线等各种工作。通用处理器不会像GPU那样,基于图像处理那样的特定任务,做针对性的指令优化(如指令集并行ILP)。因此,EDA厂商只能从仿真的算法上下功夫。
  上图中,左边“Dependency Graph”为“依赖图”,即某些程序的启动,依赖于之前程序的结果。基于Xcelium的算法(Algorithm),在不违背数据依赖关系的前提下,仿真验证过程可以被分配到多个核上去执行。
  至于Xcelium如何实现将程序分配到多个核去执行,研讨会推荐的材料,给出了一些提示。在研讨会推荐的第二篇文章《Four Keys to Successful Multicore Optimization》中,提到了“Multithreading is especially well suited for multicore PCs(多线程特别适合多核程序)”。通过应用优化(application optimization),算法优化(tool optimization),系统性能调度(tuning for overall system performance),以及软件对核个数的适应性(software portability)共4种方法,达到性能的最优。虽然文章的例子不是仿真验证,但是基本思路估计是一致的。
  核数并非多多益善
  《Multicore Processors Create ­Software Headaches》是2010年4月20日MIT的一篇文章(研讨会推荐的第3篇文章),其中,介绍了多核软件面临的问题。其中,引用了当时惠普的副总裁的观点:“如果不解决程序的问题,用户无法从更多的核中获得收益”,因为,写出高效和稳定的多核程序,是一件困难的事情。本文的结论是,五年以内,很难有面对多核程序友好的编译器(compiler)。不过,从这篇文章算起,已经过去了7年,多核程序的编译器应该获得了一些成就,厚积薄发,才有了Xcelium这样的仿真工具。
  但是,程序本身的“依赖关系”是很难破除的,程序的优化能力,受技术限制存在上限。这应该就是研讨会上,推荐使用并行8~10核的原因,更多的核很难良好的调度。
  研讨会上,还有工程师提问是否可以让程序利用不同工作站上的核,达到更大的并行,答案是不推荐。因为跨设备之间的程序并行执行,比单设备的程序并行,又复杂了不少,单就软件调度而言,其额外增加的开销,可能就可以抵消多核带来的收益。
  总之,单个服务器内,提供8~10个核做并行处理,是对Xcelium“恰恰好”的一种配置方式。
  单双核任务划分
2.jpg
  Xcelium并非可以对所有仿真程序进行加速,某些行为级模型就是在单核上执行。我对Xcelium的理解是:一个单核作为主核进行行为级模型仿真,并调度多核;其它多核作为副核进行RTL、网表等仿真,实现多核仿真加速。
  单核的范围包括:testbench(如UVM),low power(低功耗),mixed signal(模拟数字混合信号),VHDL;
  多核的范围包括:gate-level(门级),RTL,X-prop(X态传播),以及SVA等。
  其中,Xcelium将SVA与testbench独立出来,可以使SVA获取更大的性能提升。对验证工程师来说,非常有益。
  另外,Xcelium会自动完成单/多核的划分,不需要人工参与,用户不用设置哪些功能在单核模式执行,哪些功能在多核模式下执行。
  单双核切换
  本节的切换,可以理解为两个概念:
  1、原有的单核验证环境(Incisive),切换到多核验证环境(Xcelium);
  2、仿真过程中,资源不够时,本可以多核运算的程序,还是放在单核上执行;资源增加时,原本在单核上执行的多核程序,重新被分配到多个核去执行。
  对于第一种验证环境的切换,需要做的事情不多,基本上仅需要将脚本中的irun,修改为xrun;
  对于第二条根据资源情况,动态切换,我认为如果仿真器做的更优秀的话,应当支持该功能,会非常有利于工作站的资源管理。
  不过,我目前的认知是:“Xcelium资源一旦分配,如果线程没有执行完成,与该线程相关的CPU资源不会被释放” ,即不支持处理器资源占用动态可调。
  算法适应性
  Xcelium根据算法,对仿真验证程序进行优化。而这个算法,对不同的程序,优化效果是存在差异的。一般的经验数据为:
  1、RTL仿真提升3X的速度;
  2、门级网表仿真提升5X的速度;
  3、门级完备+DFT仿真提升10X的速度。
  对于不同的业务,其加速比率也不相同,事件密度较高的场景,往往可以获得更大的性能提升。例如,多核SOC仿真,在RTL层面,就可以达到5X的提升。
  磨刀不误砍柴工
  仿真程序需要根据Xcelium的算法合理的规划。而这个过程,需要对仿真程序进行深入的分析,做细致的分解。这些工作都会消耗编译的时间,即使用稍多的编译时间,换取更快的仿真速度。
  别小看单核
  此次Xcelium的升级,不仅仅是多核并行仿真,而是一次显著的升级。除了多核提供的仿真速度提升外,单核也提升了仿真速度。根据场景不同,可以获取平均2X的速度提升。在某些场景下,甚至可以达到3.9X的仿真速度提升。
  总结
  Xcelium有可能采用了多线程的仿真加速方法;
  Xcelium根据设计不同,可以提供3X-10X的仿真速度提升;
  Xcelium的单/双核划分是自动化的;
  Xcelium的验证环境可以方便的从Incisive获取;
  Xcelium的单/双核的资源,还不能自由调度;
  Xcelium的仿真加速特征值为:RTL-3X,GLS-5X,GLS-DFT-10X;
  Xcelium的推荐核数为8~10颗;
  Xcelium需要对程序进行深入分析,即用编译/细化时间,换取仿真提速;
  Xcelium的单核性能,也得到了显著的提升。



原作者:吴杉 IC VEngineer

更多回帖

发帖
×
20
完善资料,
赚取积分