【论文研究】LTE-Sim仿真软件的并行化设计思路

 
        目前该软件的开源版本是lte-sim-r5采用的是基于event-driven事件驱动的架构设计。Events被组织成一个链表(linked list),按照时间戳顺序排列,每次执行一个事件。对于该平台的更多的介绍,可以参考本人的另外一篇文章:4G5G开源软件框架
 

       该软件的作者对于LTE-Sim还进一步设计了一套专用的并行化调度方案Multi-Master用于加速LTE-Sim的仿真速度和性能。下面的内容作者发表的论文的学习笔记。(注意:这个并行化调度器在开源的lte-sim-r5版本中并没有实现,猜测可能是作者在研究所内部闭源使用的吧。)

 

       文章题目:Multi-threaded Simulation of 4G Cellular Systems within the LTE-Sim

       文章链接:https://www.docin.com/p-1424463987.html?docfrom=rrela

II. 基于LTE-Sim的LTE小区系统仿真
...
 
B. Event management in LTE-Sim
 
       LTE-Sim是基于event-driven事件驱动的架构设计。在LTE-Sim平台引入multi-threaded,首先要考虑的就是Event的生成、管理和Events间的交互。
 
       多线程仿真引擎设计时需要考虑的情况:
       1. 分析仿真运行期间有多少事件具有相同的时间戳?
       2. 具有相同时间戳的时间之间的关系是什么?
       3. 时间之间的交互能够依照时间逐步执行?
 
       多线程仿真保证正确性的原则要求:
       为了确保仿真的正确执行,我们需要注意:所有具有相同时间戳的事件(Events)在并行执行时是安全的,因为它们彼此之间是独立的(比如,它们的执行会引起仿真模型状态的不同的数据结构的数据更新)。换言之,那些具有不同时间戳的事件则必须按照时间戳顺次执行,因为一个事件执行完毕之后,会影响系统未来的行为;如果执行事件的顺序错误可能导致错误的仿真结果。
 
III. Mutil-threaded调度和执行
 
       并行算法需要考虑的因素:
  1. 软件竞争:共享数据的访问问题,加锁;
  2. 硬件竞争:内存架构问题,总线访问,缓存一致性问题;
  3. 并行化程度(degree of paralelism):提供应用并行化处理。
 
一种备选的并行策略:Symmetric Synchronization
       Symmetric Synchronization是一种经典多线程仿真的方法。如Fig-2所示,线程池中的n个线程访问一个事件队列(基于时间戳顺序的队列)。为了保证事件队列的一致性,访问共享资源的过程必须串行化(通过加锁实现互斥访问)。这种逻辑竞争(Symmetric Synchronization)导致了计算资源的浪费,另外对于高性能仿真(如果同步是通过spinlock旋转锁来完成的会占用内存总线)更加无法忍受。
 
 
文章提出的一种新颖的专用的调度策略:Multi-Master Scheduler
       // TODO Study
 
A. Multi-Master软件实现说明(Implementation of the Multi-Master Loop architecture within LTE-Sim)
 
       早期LTE-Sim平台采用的是“Serial+Linear Event Scheduler”,其中,Events被组织成一个链表(linked list),按照时间戳顺序排列,每次执行一个事件。
 
       新版本的调度器实现了Fig-3所示的调度方法。为了移植性等问题,采用了Boost库和STL。
 
       Fig-3并行事件队列采用STL C++容器实现:1. 建模timestamps list(采用std::list容器);2. 建模 concurrent events array(采用std::vector容器)。设计考虑:最小化操作事件集合的难度,通过list::front(),list::pop_front(),vector::front(),vector::at()和vector::erase()等标准方法。Per-thread data采用boost的Thread Local Storage(TLS),即boost::thread_specific_prt,来实现。
 
       Mutil-Master Loop采用boost::barrier()来处理线程同步和atomic_test_and_set实现Leader Election过程。
 
       In particular, the only thread which, within a round, is able to successfully execute the atomic_test_and_set call on the multimaster guard is elected as leader, is charged of assigning events across all the avaliable worker threadss, and then remises the role by atomically resetting the multimaster guard.
特别是,在一轮中能够成功执行对多机保护的atomic_test_and_set调用的唯一线程当选为领导人,负责在所有易受攻击的工作线程中分配事件,然后通过原子重置多机保护来放弃该角色。
 
posted @ 2019-10-14 11:22  HelloMia  阅读(622)  评论(0)    收藏  举报