基于动芯基带芯片的多核并行同步仿真平台
2017-04-19周鸣
周 鸣
(重庆邮电大学 通信与信息工程学院,重庆 400065)
基于动芯基带芯片的多核并行同步仿真平台
周 鸣
(重庆邮电大学 通信与信息工程学院,重庆 400065)
为了对物理层代码进行验证与分析,提出了一种基于动芯基带芯片的多核仿真平台。该平台采用多线程技术,通过共享内存和信号量分别实现了多核间的通信和同步功能。实验结果表明,该仿真平台可以正确模拟多核间的并行运行情况,并验证物理层代码的正确性。该仿真平台在动芯基带芯片设计实现方面发挥了巨大作用。
物理层代码;多线程;共享内存;信号量
引 言
随着基带芯片的结构以及处理过程越来越复杂,研发所需的时间越来越长,成本也越来越高。在芯片研发的过程中,设计者需要一个软件仿真系统来对处理器的功能和物理层代码进行验证[1]。一方面,软件仿真系统在芯片没有制造出来之前,就可以让物理层代码在仿真平台上运行调试,这样应用程序设计和处理器结构设计可以同时进行,大大缩短了芯片开发周期;另一方面,芯片在设计验证时经常需要改动,如果都使用样本进行评估,所需要的时间和成本是无法估计的,而使用仿真平台对处理器结构进行评估所需的时间和成本会大大降低。目前,模拟器已经成为处理器设计和制造过程中不可或缺的一部分[2]。
动芯基带芯片是中科院计算机所研发的针对基带数字信号处理的可重构和可扩展的基带芯片。目前,动芯基带芯片缺少一种方便实用的针对SoC的软件仿真工具,在芯片设计之初很难对物理层算法进行评估及量化分析,使得这种基于工程师经验的SoC设计方法难以在大规模SoC设计空间中找到一种满足应用需求的最合理的点。此外,在软基带的设计方法中,片上多核应用程序的调试问题也非常突出。
目前,采取的解决方案是将多核应用程序分片在单核上执行并调试,然后将多核程序在RTL层进行仿真调试。但是该方案仿真速度慢,需要程序员了解硬件的并行执行逻辑,会使用硬件仿真工具,而且在RTL调试过程中,不能像高级语言调试那样可以随时查看变量,随时设置断点等,具有很大的限制,所以在多核芯片上,移植及仿真调试运行第三方的软件程序非常困难。因此,急需一款基于动芯基带芯片的多核仿真平台来支持芯片的使用和推广。当前,已经拥有一个良好的开发基础:完整的动芯DSP开发工具,其中包括模拟器、编译器、调试器和集成开发环境,这些条件完全可以支撑开发一款基于动芯基带芯片的多核仿真平台。
1 总体设计思想
基于动芯基带芯片的多核仿真平台的核心是多线程技术[3]。使用多线程,可以对SoC上各硬件的并行情况进行较高程度的模拟。仿真平台的结构如图1所示。
图1 仿真平台结构图
平台主要由DSP模块、共享内存模块和调试器模块组成。其中,共享内存模块使用全局变量模拟,其余模块使用线程模拟。在整个多核仿真平台中,最重要的部分是DSP模块,其基础是动芯DSP指令集模拟器。动芯DSP指令集模拟器采用C语言开发,完全模拟了硬件功能实现,包括所有指令功能的实现、流水线结构、跳转预测、多指令并行(VLIW)、数据的装载与导出、变量的打印、与调试器的连接等诸多功能,除此之外,模拟器还肩负起了数据并行度探索、程序执行周期数统计等Profiling信息统计的责任。指令集模拟器只模拟硬件执行指令的行为,只是功能上的实现,并不涉及到信号线,只是模拟一条条指令执行后的寄存器、MEMORY的实时情况,所以在涉及此模拟器前不用去过多地关注硬件的布线等细节,应该更多地关注处理器的功能、结构、指令的执行、BYPASS、多通路等。由于多核仿真平台实现不需要对DSP指令集模拟器内部结构进行修改,只是添加了一些用于通信同步的指令,所以为了方便多核模拟器的实现以及对DSP内部数据的保护,将整个DSP指令集模拟器都封装到一个DSP类中。这样通过将实例化的多个DSP对象传进对应线程,就可以在完全继承DSP指令集模拟器全部功能的基础上实现多核DSP并行的目标。
从单核指令集模拟器到多核指令集模拟器,最重要的是解决多核间的通信以及同步问题。本文的思想是将多核间的问题转换成多线程间的问题,将多线程间用于通信以及同步的函数以指令的形式添加到指令集模拟器中,同时在编译器中也相应地加入这些指令,程序员就可以通过调用这些指令来解决多核间的通信同步问题。并行调试问题的解决方案是将每个DSP核都与一个GDB相连,并通过远程调试的方法调试相应DSP核上的应用程序。
启动多核仿真平台之前,通过命令行参数对DSP核的个数、DSP内存、寄存器大小和各DSP核上物理层代码进行配置,除了DSP核个数之外,其余都是通过读取配置文件实现的。启动之后,主线程会根据命令行的参数启动各DSP核对应的线程,并将所需要的数据存入DSP线程的内存空间中,此时仿真平台便可以运行物理层代码。
2 多核关键技术及实现
2.1 核间通信
在多核仿真平台中,每个DSP核都是通过一个线程来表示的,因此多核间的通信和同步问题就转化成线程间的通信和同步问题。在线程中,它们之间的通信通过共享内存来实现,即在程序中新建一个全局变量的数组SM,这样,各个线程就可以对这个数组读写数据,进而实现核间的数据交换。但是在SoC中,各个DSP只能通过指令向本地的局部地址中读写数据,不能直接向全局地址的共享内存中读写数据。为了解决此问题,在局部地址中分配一块和共享内存同样大小的内存空间,并保证两块内存空间中的数据具有一致性,为简化实现过程,将局部地址和全局地址的起始地址均设为0x9000 0000,其结构如图2所示。
图2 共享内存结构图
但是,这种简单的通信方式会造成一个严重的后果:多个线程同时访问全局变量SM,会造成数据混乱。为了解决这个问题,需要通过加锁的方式对共享内存中的数据进行保护。在此基础上考虑了两种线程锁:互斥锁和读写锁。相较于互斥锁,读写锁具有更好的适用性,可以有多个线程同时占用读模式的读写锁,但是只能有一个线程占用写模式的读写锁,具有很高的并行性,因此,选择读写锁来保护共享内存中的数据。将新增的读写指令添加到编译器中,程序员即可调用汇编语言来实现多核间的读写功能,其使用方法与线程中的读写锁使用方法一致,汇编语言和读写锁函数对照如表1所列。
表1 读写指令对照表
2.2 核间同步
多核间同步可以理解为在物理层算法人员的调度下,各核可以按照指定的先后次序运行。因此需要设计同步指令,可以实现多核间的同步功能。同样的,实现核间同步也可以转换成线程间的同步问题。在线程同步中,主要有两种方法可以考虑:条件变量和信号量。相比于条件变量,信号量有以下优点:信号的递增与减少会被系统自动记住,系统内部有一个计数器实现信号量,不必担心会丢失,而唤醒一个条件变量时,如果没有相应的线程在等待该条件变量,这次唤醒将会丢失。因此,从SoC实际情况考虑,本文使用信号量来设计多核仿真平台的同步指令。将新增的同步指令添加到编译器中,程序员即可调用汇编语言来实现多核间的同步功能,使用方法与线程中的信号量使用方法一致,汇编语言和读写锁函数对照如表2所列。其中,汇编语言的mode值可以根据程序员需要自由选择,范围是0~31,这样,程序员就可以使用多个信号量来控制多核间的同步。
表2 同步指令对照表
2.3 调试模块
图4 并行同步调试验证图
本文采用两种方法对调试模块进行研究:一是在动芯DSP开发工具调试器的基础上,通过将调试器与各个核进行通信,从而实现多核并行调试的目的,但是DSP模拟器采用GDB调试,在设计多核调试时受制于已有的框架,增加多核调试器设计的难度;二是针对整个多核仿真器重新开发调试器,这样做不会受制于已有的平台,但是工作量大,需要从头做起。通过研究发现,动芯DSP的调试器从整体上来说也适用于多核仿真平台调试器,其框架只具有很小的限制性。因此,只需要将调试器在模拟器这一端做少量的修改,即可将动芯DSP指令集模拟器的调试器移植到多核仿真平台调试器。
动芯DSP指令集模拟器调试器的方案是通过GDB对指令集模拟器上的应用程序进行远程调试。Socket是模拟器与GDB的通信方式,其中,DSP模拟器作为Socket通信的服务端,GDB作为Socket的客户端,RSP作为两者通信协议。多核仿真平台调试器设计结构如图3所示,将DSP线程作为Socket通信的服务端,且每个DSP线程都有一个GDB客户端与之相连,这样就可以同时使用多个GDB并行调试多核仿真平台,最终完成多核仿真平台调试器的设计工作。
图3 调试模块结构图
从单核调试器转到多核调试器,从进程的角度观察,就是从一个DSP模拟器进程和一个GDB进程之间的关系到一个多核模拟器进程与多个GDB进程之间的关系。其实现的方案是将DSP模拟器进程中公共RSP转变为多核模拟器中各DSP线程私有的RSP。本文需要做的工作就是将RSP中用来存储调试信息的数据在DSP类中重新声明。这样RSP的性质就从公共的变为线程私有的。完成以上工作就可以同时打开多个GDB调试器,对每个DSP核上运行的物理层代码进行调试。
假设启动两个核的多核仿真平台,此时需要打开3个终端,终端1用来启动多核仿真平台,终端2和终端3用来打开GDB对物理层应用程序进行调试,各终端命令行实现过程如下所示:
终端1:./dongxin -z 2 -j 20000 -k 20001。
终端2:Dongxin-gdb a.out;target remoter:20000;load。
终端3:Dongxin-gdb b.out;target remoter:20001;load。
其中,z后面的数字表示启动的DSP核个数,j和k后面的数字分别为核1和核2与对应GDB连接的端口号,a.out和b.out分别表示在核1和核2上运行的应用程序的二进制代码。
3 多核仿真平台功能验证
首先对多核仿真平台的并行、多核同步、调试模块三部分进行验证。使用第2.3节中介绍的方法启动两个DSP核的多核仿真平台,并对各个DSP核上的代码进行调试,过程如图4所示。
通过与图5中的源代码进行对比,可以看出第2个终端和第3个终端可以正确地对各个DSP上的应用程序进行并行调试,此过程验证了多核仿真平台并行和调试模块的正确性。继续执行源代码,当终端2执行到__asm__("sem_wait 0")指令时,应用程序挂起,等到终端3程序执行完__asm__("sem_post 0")指令后,终端2中的应用程序又可以继续执行,此过程验证了多核仿真平台多核同步的正确性。
图5 应用程序源代码
接下来,主要对多核间的通信进行验证。同样,先打开调试界面,然后对核1和核2上的应用程序进行调试,过程如图6所示,当两个核同时对共享内存数据进行读操作时,两个核上的程序可以并行执行;当核2在进行读操作时,核1的写操作不能执行,核1会挂起;当核1在进行写操作时,核2的读操作不能执行,核2会挂起。这个功能与多线程中的读写锁功能一致,验证了多核仿真平台通信的正确性。
图6 多核通信验证图
结 语
[1] 吴哲凯.可配置多核仿真器的研究与实现[D].南京:东南大学,2012.
[2] 林明亮.基于SimpleScalar的拥有存储与总线扩展能力的异构多核仿真器[D].上海:上海交通大学,2007.
[3] 罗汉青,梁利平,叶甜春.一种多核指令集仿真器构建技术[J].计算机应用研究,2013,30(10):3035-3037.
[4] 李德明,全盛程,叶进.基于SoC的多核处理器并行仿真机制的研究[J].微电子学与计算机,2014,31(2):23-26.
[5] 付琳,胡锦,梁利平.指令集仿真器的关键技术[J].计算机应用,2015,35(5):1421-1425.
[6] 苏雅丽.一种多核处理器时钟精确并行仿真技术[J].赤峰学院学报:自然科学版,2015,31(3):12-13.
[7] 喻之斌,金海,邹南海.计算机体系结构软件模拟技术[J].软件学报,2008,19(4):1051-1068.
[8] 高翔,张福新,等.基于龙芯CPU的多核全系统仿真器SimOS-Goodson[J].软件学报,2007,18(4):1047-1055.
[9] 戴鹏,魏来,王明江,等.一种多核处理系统通信机制的仿真模型[J].微电子学与计算机,2012,29(6):1-6.
V.Kamakoti, SHAKTI Processors: An Open-Source Hardware Initiative[C]//29th International Conference on VLSI Design and 2016 15th International Conference on Embedded Systems (VLSID), Kolkata, India, 2016.
[5] PULPino User Manul[EB/OL].[2016-09].http://www.pulp-platform.org/documentation/.
[6] Michael Zimmer, David Broman, Chris Shaver,et al.FlexPRET: A Processor Platform for Mixed-Criticality Systems[C]//Proceedings of the 20th IEEE Real-Time and Embedded Technology and Application Symposium (RTAS), April, 2014.
[7] PEYRET Thomas, VENTROUX Nicolas, OLIVIER Thomas.HETEROGENEOUS MULTICORE BASED ON RISC-V PROCESSORS AND FD-SOI SILICON PLATFORM[C]//4th RISC-V Workshop Proceedings, 2016.
雷思磊(工程师),主要研究方向为处理器架构、嵌入式处理器应用等。
(责任编辑:杨迪娜 收稿日期:2016-09-12)
Multi-core Parallel Synchronous Simulation Platform Based on Dongxin Baseband Chip
Zhou Ming
(College of Communication and Information Engineering,Chongqing University of Posts and Communications,Chongqing 400065,China)
In order to check and analyze the physical layer code,a multi-core simulation platform based on Dongxin baseband chip is proposed.The platform uses the multithread technology to realize the function of communication and synchronization between cores by shared memory and semaphore.The experiment results show that the platform can correctly simulate the parallel operation between cores and verify the correctness of the physical layer code.This simulation platform plays a huge role on implementation of Dongxin baseband chip.
physical layer code;multithread;shared memory;semaphore
TP337
A
�士然
2016-11-18)