SimK:大规模并行模拟引擎
SimK: A Large-Scale Parallel Simulation Engine
-
摘要: 1.本文的创新点
a) 设计并实现一个大规模细粒度并行模拟引擎,它源于OS的理念,为并行模拟提供了同步、通信以及调度等基础架构,简化了并行模拟器设计。
b) 整个模拟引擎是锁避免(lock-free)的。调度模块中的锁避免算法更为新颖,它甚至避开了原子指令的使用。
c) 提出了并行模拟中的性能提升策略,包括基于阻塞/唤醒机制的同步、协作式动态负载迁移机制等。
d) 基于SimK开发了真实模拟器HppSim和HppNetSim,从运行结果中发现多核平台上Cache对细粒度模拟影响较大。
2.实现方法
SimK引擎中集成了同步、调度、通信、缓冲区管理、任务分配部署等模块,这些模块提供了并行模拟的基本功能,以API的形式提供给模块编写者,使得可以像开发顺序模拟器一样来开发并行模拟器,从而简化了并行模拟器的开发难度。
所有模块间采用消息通信的模式来交互,这样使得不同模块可以被部署到节点内部或不同节点上。采用图划分算法,保证了不同宿主机处理器上的负载静态平衡。不同模拟单元都被模拟引擎中的调度模块来调度执行,避免了OS粗粒度调度带来的开销。任何两个通信模块间采用单读单写队列来进行通信,避免了通信过程中锁的使用。
为了避免细粒度同步带来的模块空运行开销,调度模块中对即将空运行的模块进行阻塞,使得这些模块不参与执行,直到时钟被更新为止。并行模拟中两个模拟单元间需要协作推进,推进过程中需要保持时钟同步。对于主从式同步关系,文中提出了基于冗余赋值的优化同步方法。对于对等式同步关系,文中提出了基于顺序的优化同步方法。文中在通信、多线程缓冲区管理方面也做了锁避免的优化。
负载平衡对并行程序性能影响很大,文中将负载推送和负载窃取两种负载平衡机制相结合,提出了协作式动态负载平衡的管理方法,并对其核心数据结构—共享队列,在多核处理器上的实现做了优化。
3.结论及未来待解决的问题
实验结果表明,基于SimK开发的并行模拟器HppSim和HppNetSim在4核或8核SMP节点上都取得了近线性的加速比,某些目标系统配置下还可以取得超线性加速比,比如在2路4核处理器上可以取得14.95倍加速比。对超线性加速比的原因进行分析发现,多核处理器上的cache是造成超线性加速比的成因。即使系统做了静态负载平衡,但协作式动态负载平衡在某些情况下仍可以带来15%左右的性能提升。
本文中多节点模式加速效果不明显,后续工作中会对多节点模式做进一步的优化。并且,SimK的开源工作也将进行。
4.实用价值或应用前景
影响模拟器使用的最根本制约因素是模拟速度,而目前模拟器大多为单线程模式,无法充分发挥多核节点或多节点系统的性能。SimK引擎可以简化并行模拟器的开发,并提供较高的模拟性能,有望缓解模拟器的速度压力。Abstract: Simulation is an important method to evaluate future computer systems. Currently microprocessor architecture has switched to parallel, but almost all simulators remained at sequential stage, and the advantages brought by multi-core or many-core processors cannot be utilized. This paper presents a parallel simulator engine (SimK) towards the prevalent SMP/CMP platform, aiming at large-scale fine-grained computer system simulation. In this paper, highly efficient synchronization, communication and buffer management policies used in SimK are introduced, and a novel lock-free scheduling mechanism that avoids using any atomic instructions is presented. To deal with the load fluctuation at light load case, a cooperated dynamic task migration scheme is proposed. Based on SimK, we have developed large-scale parallel simulators HppSim and HppNetSim, which simulate a full supercomputer system and its interconnection network respectively. Results show that HppSim and HppNetSim both gain sound speedup with multiple processors, and the best normalized speedup reaches 14.95X on a two-way quad-core server.