翻译最后一弹:后续可能继续^~^
OR1200处理器的多线程扩展
曾坤 刘福东
中国湖南长沙
邮箱:kunzeng.nudt@gmail.com lfd010509@163.com
摘要:
多线程是一门拥有广泛运用前景的技术,它被广泛用于通用目的处理器中,用来避免长时延问题,例如高速缓存器丢失。本文提出一种基于OR1200处理器的支持多线程的嵌入式处理器设计方案。这种多线程OR1200处理器支持在一个周期内四个线程的交叉执行。其硬件设计的评估是通过寄存器传输语言(verilog代码)模拟仿真实现的。结果显示多线程的交叉执行能够有效地解决存储器时延,并且能够使速度平均提高1.16倍。
关键字
交叉执行 OR1200 多线程 存储器时延
一:简介
硬件多线程是诸多能够有效回避存储器时延方法中的一种。多线程能够被处理器同时执行。如果其中的一个线程占据了存储器通道,另外的线程仍然能够被执行,而使流水线继续处于繁忙的工作状态。
许多通用目的处理器都利用多线程的优点来增强其性能,诸如Nehalem和UltraSparcT2。但是很少有嵌入式处理器支持多线程。对于此现象的解释如下:第一,嵌入式处理器的频率并没有通用目的处理器的高,这使得内存墙问题表现得不明显。其二,嵌入式处理器通常用SRAM而非DRAM,这也就减轻了它们之间的代沟。第三,很少有线程级别的并行出现在嵌入式应用中。然而,随着嵌入式系统的发展,这种情况就随之发生了变化。例如,一些嵌入式处理器的频率可以达到1.5GH,同时DRAM也被广泛用于移动电话中。对于嵌入式处理器而言,硬件多线程则显得越来越重要了。
本文是对OR1200处理器的扩展,这是一种开源嵌入式处理器,支持四线程的交叉执行。我们使用寄存器传输语言(verilog代码)模拟仿真对多线程OR1200处理器的性能进行评估。结果显示多线程OR1200处理器的性能平均比非多线程处理器要高16%。
二: 相关内容
多线程的思想可以追溯至20世纪80年代到90年代的HEP系统,此系统中运用了多线程来避免访问主存储器时出现的长时延。近年来,则利用多线程技术来解决较短时延问题,如主高速缓冲器的丢失。这些多线程方法可以分为三类:交错多线程,阻塞多线程和同步多线程。交错多线程处理器,如Cray MTA,ASA及ltraSparcT2,取另一个线程的指令送至执行流水线中。阻塞多线程处理器,如MIT J-Machine,PL/PS Machine和Fermi,一直执行一个线程直到长时延操作出现。同步多线程处理器,如IBM Power7和Intel Nehalem,从多线同时发送多个指令,用以填满超标量处理器的执行单元。
由于OR1200处理器是一种单发送RISC处理器,因而同步多线程对其不适用。与阻塞多线程相比,同步多线程的硬件花费较少,这使得它更适合与嵌入式处理器。因此,本文将把OR1200处理器扩展成为一种交叉多线程处理器。
三:OR1200处理器的扩展
1、 OR1200处理器的概述
OR1200是32位开源嵌入式处理器,它服从OpenRISC1000指令集结构。OR1200拥有一个5级流水线,并支持虚拟内存以及基本的DSP功能。图(1)显示OR1200的基本结构。
图(1)OR1200处理器结构
如图(1)所示,OR1200处理器由内核是由七个部分组成:指令单元、异常单元、系统单元、通用目的寄存器组、整数执行单元、乘及计算单元和存取单元。指令单元从存储器系统取指令,然后发送指令至合适的执行单元,并且维持in-flight指令之间的相关性信息。系统单元和异常单元掌控系统寄存器的数据访问和异常。通用目的寄存器组可实现把32个32位寄存器当做两个同步双端口存储器使用。整数执行流水线完成Open-RISC 32位指令,包括算术指令,比较指令,循环指令和移位指令。MAC单元执行32位乘-累加操作。累加器的宽度是48位。存取单元在GRPs和OR1200内部总线中传输数据。系统单元实现所有系统成为特殊的目的寄存器。
对于基本OR1200内核,有两个主要的特征应当引入进来用以支持四线程的交叉执行。第一,寄存器组应当能够增大以维持四线程的运行环境;第二,执行流水线应当能够扩展用以支持四线程的交叉执行。
2、 寄存器组的扩展
OR1200处理器的寄存器组包含32个通用目的寄存器,我们简单将寄存器组复制四次用以维持四线程的运行环境,同时增加了一些额外的控制信号控制对四寄存器组栈的访问。
图(2)四栈寄存器组的读逻辑
每个线程被标以线程号,用作访问寄存器组地址的一部分。图(2)显示了四栈多线程组的读逻辑。多线程寄存器组的地址包括两个部分:线程号及寄存器地址。线程号定义了读哪个线程,从OR1200指令中可获得寄存器地址,其定义了读哪个寄存器。线程号被译码为四位的写使能信号,每一位对应一个栈(bank),当写使能信号为高时,相应的栈被激活。寄存器地址送至所有的栈用以读正确的寄存器。线程号也被用作多路器的控制信号,用其选择正确的输出数据。
如图(3)所示,四栈寄存器组的写逻辑与读逻辑相似,与之不同处是需要无输出多路器,而且输入数据送至所有的栈。当输入数据有效时写使能信号被标记。
在四栈寄存器组中有两个读端口和一个写端口,意味着写逻辑被复制两次。
图(3)四栈寄存器组的写逻辑
3、 执行流水线的扩展
根据操作码图(4)显示了扩展的OR1200流水线的块状表。四个PC寄存器维持支撑四线程。在线程的选择阶段,四个PC寄存器中的一个被选中,被送至取指单元。在取指单元阶段,取指单元利用送达的PC作为地址来访问指令高速缓存器。在指令译码阶段,指令被翻译用以获得操作码并且寄存器组也被访问用以获得源操作数。在执行单元,功能单元根据操作码(图(4)操作)完成适当的操作。执行阶段包含不止一个流水线阶段,根据操作是什么,例如,存储器访问操作跨越两级流水线阶段。功能单元产生的结果在回写阶段被写回寄存器组。线程号(图(4)线程号)在所有流水线中流通,用来确定结果是对应哪个线程的。
图(4)扩展OR1200流水线
四线程用一种循环的方式执行。每一周期内,从四线程内去一条指令然后发送。如果必须的功能单元并不繁忙,指令就会成功发送并且与之响应的PC寄存器也会加四。如果必须的功能单元繁忙,指令就不能成功发送。因而,与之响应的PC寄存器不会更新,进而在下一个循环中相同的指令能够被再次发送。这种执行模式被称作阻塞-重试模式。
PC寄存器更新的逻辑应当能够支持循环执行和阻塞-重试模式。在原始的OR1200处理器中,对于PC寄存器有两个基本的操作。第一,当从指令高速缓存器中取一条指令的时候,PC寄存器加四,然后指向下一条指令;第二,当一条分支指令被执行的时候,分支指令的地址应当被写入PC寄存器。但是这种情况对于多线程OR1200处理器去并非如此。第一,PC寄存器的更新是依据线程号的。当一条指令被取到的时候,仅仅是PC寄存器相关的线程更新;因而,当一条线程号为N的分支指令被执行的时候,仅仅是线程号为N的PC寄存器被更新。第二,如果由于之前的长时延而使一条指令不能够被成功发送时,PC寄存器也不发送变化以便这条指令能够被再次发送。
图(5)显示了PC寄存器的更新逻辑。成功发送的信号标记线程0的指令是否成功发送。成功发送的分支信号标记线程1的分支指令是否成功发送。分支PC信号是由分支指令产生的新的PC。线程0的线程号被译码,用来控制哪个PC寄存器将要更新。
图(5)PC寄存器的更新逻辑
八线程的交叉执行能够避免在执行流水线中的长时延操作。举在图(6)中的指令流为例,在第一个周期里,线程0的取指令被发送至存取单元,致使一个高速缓存丢失(未命中)和LSU变得繁忙起来。在第二个周期中,线程1的存指令由于LSU忙于管理高速缓存丢失(未命中)二不能被发送。因而线程1的PC寄存器不能被更新来容许存指令再次发送。在下一
图(6)一个四线程执行的例子
个周期中,加指令由于ALU并非繁忙而成功发送。算术计算和存储器访问能够并行执行,并且无流水线阻塞产生。
更值得一提的是,八线程的交叉执行消除了在不同阶段中in-flight指令的数据相关性,这是由于in-flight指令来至不同的线程。这就大大精简了在不同流水线阶段之间的相关性判断逻辑和数据前送逻辑,进而明显的增加了频率。
4、 硬件花费评估
我们使用ISE9.1综合多线程OR1200处理器来评估硬件花费。表(I)显示了多线程OR1200处理器和OR1200处理器之间的对比情况。
表(I)硬件花费对比
多线程OR1200处理器的block ram使用数是OR1200处理器的四倍,寄存器组大小也为四倍。同时4输入LUTs的使用率提高了5.3%,触发器使用率提高了3.2%。
5、 性能指标
1)方法
我们利用寄存器传输语言器模拟仿真我们写的多线程OR1200处理器的verilog代码,依据执行周期数来衡量评价性能。在我们的测试中用到了7个内核基准。FFT, Laplace, Stencil是我们用标准的数学算法开发的内核。BMM, Hydro 和 SF来至Livemore测试体系。表(II)列出了详细的内核基准信息。
表(II)基准的详细信息
对于每个内核基准,有两个版本的阐述研究,有一个单线程版本能够在一个线程中实现所有的计算工作,还有一个多线程版本能够把计算工作分成四个线程。单线程版本在OR1200处理器中使用,多线程版本在多线OR1200处理器中使用。
这两种处理器的存储器系统结构是相同的。它们在一块组成一种2级高速缓存系统。L1指令高速缓存和数据高速缓存大小为16KB,并且是直接映射的关系。L2高速缓存是128KB的四集合相关关系。L1和L2的高速缓存块大小都是32字节。L2高速缓存在8个周期中会有一个命中时延,对其的访问为全流水线形式。存储器访问时延为80个周期。
2)结果
如图(7)所示,多线程OR1200处理器在所有基准上都优于OR1200处理器。相应于Inner, Hydro和 Laplace,多线程OR1200处理器能够提高1.33,1.23和1.23倍,但对于BMM,SF而言,速度提高就并不明显(1.02和1.09)。那是因为Inner, Hydro和 Laplace是数据敏感内核,同时也因为它们会产生很多的高速缓存丢失(未命中)。多线程OR1200可以有效的避免这种情况,进而使相应的速度提高。BMM是计算敏感内核,产生并不多的高速缓存丢失(未命中),因而多线程的优点体现的并不明显。
图(7)执行时间对比
我们改变多线程OR1200处理器中的线程数并进行了性能上的对比。图(8)体现了随着线程数的增加而带来的内核基准速度变化的趋势。四线程版的性能在所有基准上表现的都要比双线程版的较为优越。但是六线程和八线程版的在速度变化上并不是那么明显,性能也不再那么优越。对BMM而言,在线程版本达到四时,速度就趋于平稳,八线程版的更是如此。因而对于多线程OR1200处理器而言,线程数定为4是最合适的。
图(8)速度VS线程数
6、 总结
多线程OR1200处理器基于开源的OR1200处理器,支持四线程的交叉执行。速度平均提高1.16倍,然而花费也会增加5%。
7、 鸣谢
作者在此要感谢唐云华,吴俊杰以及匿名的读者对于工作提供的大力支持与帮助。本工作依靠NFS授予的60921062和60873014基金。
sunyzz 2013-4-15 09:07
用户593939 2013-4-14 23:03