文献标识码: A
DOI:10.16157/j.issn.0258-7998.2016.11.006
中文引用格式: 刘欢,韩俊刚,李卯良,等. 时钟共享多线程处理器SIMD控制器设计与实现[J].电子技术应用,2016,42(11):29-32.
英文引用格式: Liu Huan,Han Jungang,Li Maoliang,et al. Design and implementation of SIMD controller for a shared-clock multithreading processor[J].Application of Electronic Technique,2016,42(11):29-32.
0 引言
随着并行计算和集成电路的不断发展,如何有效地提高处理器的并行处理性能已经成为热点问题。传统处理器通过开发指令级并行(Instruction Level Parallelism,ILP)[1]来提高处理器的性能,但硬件的复杂度及功耗等因素影响了处理器的性能。因此设计者们纷纷把目光投向更高层次的线程级并行(Thread Level Parallelism,TLP)[1-3]技术,时钟共享多线程处理器就是在这种背景下产生的。多线程这个概念最先由美国加州大学Tullsen等提出的,并提出了SMT[4-5]处理器模型。这种结构通过资源竞争和资源动态共享的方式使所有的处理单元共同活跃,充分提高了资源利用率。本文根据时钟共享多线程处理器的结构,在多核处理器[6-7]的基础上设计实现了一种SIMD控制器,并且对电路进行了功能验证和FPGA验证。
1 整体硬件结构
时钟共享多线程处理器是由16个处理单元(PE)互联构成的一个4×4二维阵列,它主要包括前向处理单元(FEP)、存储管理器(mem_man)、调度器(Sche)和协处理器(ACCL)。整体结构如图1所示。
FEP(前向处理单元)模块:接收外部CPU下发的配置信息、初始化指令和数据、预存数据加载到buffer_memory中、回收计算结果、构建整个阵列进行SIMD运算等。
Sche(调度器)模块:由四个行控制器(Row Controller,CRi)组成。每一个行控制器用来实现SIMD运行模式的构建、并将前向单元发送的初始化指令和数据、配置信息,发送给当前行的各个PE。
mem_man(存储管理)模块:由四个列控制器(Column Controller,CWj)组成。每一个列控制器用来预存数据和回收计算结果。
ACCL(协处理器)模块:每四个处理单元之间共享使用一个协处理器,处理单元可以直接调用该协处理器完成特殊函数运算。
2 时钟共享多线程处理器SIMD控制器
SIMD控制器是由一个前向处理单元(FEP)、一个调度器(Sche)、一个存储管理(mem_man)构成,其中mem_man模块由4个列控制器组成,sche模块由4个行控制器组成,每一列对应一个列控制器,每一行对应一个行控制器。SIMD控制器处于整个时钟共享多线程处理器结构的最顶层,控制该4×4阵列的运行和调度处理。SIMD控制器具体实现功能如下:
(1)执行整个时钟共享多线程处理器的初始化,也就是说对各个基本处理单元的指令存储和数据存储进行加载;
(2)为提高整个时钟共享多线程处理器的运行效率,可对基本处理单元所需数据和相关指令进行预存;
(3)在基本处理单元运算过程中,可进行动态数据加载和读取;
(4)对计算结果进行回收,并实时监测基本处理单元的运行状态。
2.1 SIMD控制器整体结构
根据时钟共享多线程处理器系统整体介绍和该系统具有的基本特征,以及SIMD控制器功能的确定和功能的划分,可以确定SIMD控制器的整体结构,如图2所示。
图2中整个时钟共享多线程处理器由PC控制发送数据和回收计算结果,通过PC机将按照数据包格式将数据、指令以及控制信息发送给FEP,FEP通过解析包头,产生控制信号,将数据或者指令发给行列控制器进而控制PE阵列。
2.2 前向处理单元的设计与实现
前向处理单元主要完成整个基本阵列处理单元的控制,具体功能有:初始化FEP存储、控制整个阵列中PE单元实现SIMD运算、采用广播的形式初始化行列控制器和配置线程管理器信息、读取运算结果、查询PE执行的状态等。具体结构如图3所示。
外部PC将指令和数据写入FIFO0,接收控制模块检测FIFO0的fifo0_empty信号是否有效。当fifo0_empty无效表示FIFO0不为空,此时接收控制模块开始读取FIFO0中的数据,将读取来的数据包头进行解析,产生相应的控制信号,并将数据包头及之后携带的数据写入FIFO1或FEP指令存储中。其中写入到FIFO1时要查看FIFO1的fifo1_almost_full信号是否有效,也就是FIFO1几乎满信号是否为高,如果为高,则不能写入数据,并反馈此信息让外部PC停止发送数据;否则,将数据写入FIFO1中。
当发送模块检测FIFO1不空,也就是fifo1_empty信号时开始读取数据,并将读出的数据广播给行列控制器,由行列控制器解析判断是否接收此数据。对于行控制器,数据首先广播给RC0控制器,如果RC0解析判断该数据不是发送给该行,则RC0将数据发送给RC1,以此类推。
当外部PC发送的是读取指令或数据命令时,也是通过数据包将相关控制器信息以广播的形式发送出去,然后根据FIFO2的几乎满标志信号fifo2_almost_full来判断是否将回收的数据写入FIFO2中,如果fifo2_almost_full几乎满信号为高,则阻塞;否则,将数据写入FIFO2。通过读控制模块来检测FIFO2是否为空,即判断fifo2_empty信号是否有效,如果无效,则将FIFO2的数据读出,写入到FIFO3中,供外部PC读取;否则,阻塞直到读取操作完成。当外部CPU需要读取前向处理单元存储或者行控制器中的SIMD指令时,也发送相应的指令从前向处理单元存储中或者从4个行控制器中读取SIMD指令;如果整个阵列进行SIMD运算,则发送SIMD请求给前向处理单元,前向处理单元中的接收模块检测到该请求后,将前向处理单元存储中的SIMD指令发送给下一级的4个行控制器以完成该SIMD运算,最后,发送一个请求指令来结束SIMD的运算模式。
2.2.1 数据接收控制模块的实现
数据接收模块的功能是:检测FIFO0中的空满信号,如果FIFO0不为空,则读取该数据,并对数据包包头进行解析,解析的相关命令可将SIMD指令写入前向处理单元存储或者将MIMD指令或者数据以及SIMD指令写入FIFO1中,等待数据广播;当根据解析的数据包信息从FIFO2中读取相关指令或者数据,将读取的数据写入FIFO3以供外部CPU读取;如果解析为控制整个阵列单元来执行SIMD运行模式时,则状态跳转到SIMD运行模式状态,将整个基本阵列单元构建成SIMD运行模式。该前向处理单元的数据接收模块采用状态机实现,状态转移图如图4所示。
2.2.2 数据发送控制模块的实现
数据发送模块将外部PC发送的初始化数据进行下发,其具体实现功能是检测FIFO1的空信号和几乎满信号,如果FIFO1不空而且行和列控制器处于空闲状态时,则负责将FIFO1中的指令或者数据以广播的形式发送给4个列控制器和第一个行控制器。状态转移如图5所示。
2.3 行控制器设计与实现
行控制器总体结构如图6所示,由1个RC_CTRL控制单元、1个深度为1 K宽度为48 bit的SIMD指令存储(I-MEM,为RAM)和1个深度为16宽度为10 bit的索引表组成。组合逻辑电路部分主要负责判断是否为加载给当前行控制器的指令/数据,若不是该行操作,则将指令/数据发送给下一个行控制器;若是,则将对应指令/数据发送到RC_CTRL模块进行相应操作。索引表(INDEX_MEM)如表1所示,为一个宽度为10深度为16的RAM,主要用于存储SIMD指令的基址,每一个基址都对应一段完整的SIMD指令。行控制器的核心部分为RC_CTRL模块,该模块状态转移图如图7所示。
RC_CTRL模块按照各个功能点归纳状态转移图,主要包括初始化数据和数据的回收、SIMD运行模式和MIMD运行模式的切换等。初始化数据和数据回收的状态转移图如图7所示。
2.4 列控制器设计与实现
列控制器主要完成了整个阵列处理单元共享存储的数据加载、数据的动态加载和数据回收。前向处理单元采用广播的形式将指令和数据广播给行、列控制器,当列控制器检测到是初始化数据(包括MIMD数据和SIMD数据)时,则将数据存储到列存储中;当检测到是对列存储数据的读取操作时,列控制器则将所需数据从列存储中读取给前向处理单元;当列控制器检测到是给PE动态读取数据请求时,则将列存储中对应的数据广播给PE。
列控制器结构框图如图8所示,主要由1个Init_Ctrl(初始化控制器)、1个Dynamic_Ctrl(动态控制)和一个DMEM(数据存储)3部分组成。Init_Ctrl模块主要用于对初始化加载数据进行控制及完成外部对计算结果数据的读取操作;Dynamic_Ctrl模块主要用于对来自PE动态写入或者读取列存储的数据进行控制;DMEM模块为一个宽度为32 bit深度为1 M的RAM。
3 仿真与FPGA验证
本文采用Xilinx公司的ISE工具进行电路综合,FPGA选用Xilinx公司的XC7V2000t-2fhg1761,电路的最高频率可达到316.877 MHz。
根据以上SIMD控制器的主要实现功能,设计了测试用例,主要针对SIMD控制器的基本功能的测试,包含一系列的数据和指令初始化、SIMD运行模式数据结果的回收等。针对SIMD运行模式主要测试了单行的SIMD运行模式,并依次测试了2行、3行以及4行同时执行SIMD运行模式。
该电路资源利用率如图9所示。
关键路径如图10所示。
4 总结
本文对时钟共享多线程处理器结构进行深入研究,采用了有限状态机设计并实现了SIMD控制器,并对电路进行了功能验证和FPGA验证,工作频率为316.877 MHz。结果表明,该SIMD控制器电路能够满足图形图像处理中的需求,电路工作正常并且电路具有良好的可扩展性,实用性强,能够满足时钟共享多线程处理器的要求。
参考文献
[1] UNGERER T,ROBICB,SILC J.Multithreaded processors[J].Computer Journal,2002,45(1):320-348.
[2] BRUNIE N,COLLANGE S,DIAMOS G.Simultaneous branch and warp interweaving for sustained GPU performance[J].Acm Sigarch Computer Architecture News,2012,40(40):49-60.
[3] SANKARALINGAM K,NAGARAJAN R,LIU H,et al.Exploiting ILP,TLP,and DLP with the polymorphous TRIPS architecture[J].IEEE Micro,2003,31(6):422-433.
[4] EGGERS S J,EMER J S,LEVY H M,et al.Simultaneous multithreading:a platform for next-generation processors[J].IEEE Micro,1997,17(5):12-19.
[5] 张骏,樊晓桠,刘松鹤.多核、多线程处理器的低功耗设计技术研究[J].计算机科学,2007,34(10):301-305.
[6] 黄虎才.多态阵列处理器的并行计算研究[D].西安:西安邮电大学,2014.
[7] 李涛,杨婷,易学渊,等.萤火虫2:一种多态并行机的硬件体系结构[J].计算机工程与科学,2014,36(2):191-200.