基于smt的中央处理单元以及用于检测指令的数据相关性的装置的制造方法

文档序号:9371897阅读:372来源:国知局
基于smt的中央处理单元以及用于检测指令的数据相关性的装置的制造方法
【技术领域】
[0001]本申请涉及中央处理器技术,具体涉及一种基于SMT的中央处理单元。本申请同时提供一种用于检测指令的数据相关性的装置。
【背景技术】
[0002]CPU是中央处理单元(Central Preocessing Unit)的英文缩写,是计算机的运算核心和控制核心。其基本的工作过程包括:取指、解码、执行和写回这样几个阶段:取指阶段从存储器或者高速缓存中提取指令,解码阶段负责根据指令类型产生不同的控制信号,执行阶段则使用操作数、按照解码产生的控制信号在功能部件(执行单元)中执行指令,最后由写回阶段将执行结果写回存储器或寄存器中。
[0003]为了充分挖掘CPU的吞吐率,出现了多种提高CPU性能的技术,例如:流水线技术、超标量技术、超标量超流水线技术等,这些技术的共同点在于,通过增加单个时钟周期内执行的指令数来提高指令执行的并发度,从而提高CPU的执行效率。然而,在实际中,由于CPU通常使用有限的系统结构寄存器(也称ISA寄存器或通用寄存器)来保存指令的操作数与结果,因此导致了指令和指令之间可能存在某种依赖关系(也称相关性),例如:两条指令使用同一个寄存器,指令间的这种相关性会限制指令的并发执行。为了改善这一问题,在CPU工作过程的解码和执行阶段之间引入了寄存器重命名阶段。该阶段的主要任务是去除指令之间在寄存器使用上的伪依赖性(也称错误依赖),同时还要甄别指令之间的真实依赖性(也称数据相关性,即:在后执行指令的源操作数的取值是否来源于在先执行指令的目的操作数),前者通过重命名表影射来解决,后者则需要使用重命名比较器进行比较判断。
[0004]此外,为了提高CPU执行单元的利用率,现代CPU还引入了将指令级并行和线程级并行相结合的同时多线程技术(Simultaneous multithreading-SMT),通过复制处理器上的结构状态,同一个物理CPU可以同时执行两个以上的独立线程,并共享处理器的执行单元,由于来自两个以上线程的指令流包含更多不相关的、可以并行的指令,因此能够更有效的利用共孚执彳丁单兀,从而提闻CPU的吞吐率。
[0005]鉴于引入SMT机制的CPU有着更多不相关指令流,若是可以加大前端指令宽度(包括取指、解码和重命名阶段),就可以获得更多并行处理指令,从而更为充分地利用多个执行单元。为了提高取指和解码阶段的吞吐量,目前已经有了相应的解决方案,例如:IntelCPU引入了 O级缓存,将已经解码后的指令放置其中,这样当CPU再次需要指令的时候可以直接从O级缓存获取,同时可以获取指令的宽度也从16字节变为32字节;但是关于如何拓宽重命名阶段的指令宽度,一直没有令人满意的方法,具体说明如下。
[0006]由于执行指令的相关性检测所需的硬件比较单元与每个周期重命名指令条数的平方相同(即:硬件比较器个数=ηΧη-η,η为每个周期需要重命名指令条数),也就是说为了拓宽重命名阶段的指令宽度,需要大量地增加硬件比较器的个数。因此Intel带有SMT的CPU由于没有增加任何硬件,导致每个周期仍然只能对4条指令进行重命名,减弱了在引入SMT的情况下并行指令执行的吞吐量;而IBM的带有SMT的CPU,为了使CPU在每个周期的重命名宽度由4条指令拓宽为6条指令,而将硬件比较器个数从12个增加到30个(6X6-6 = 30),不仅增加了 CPU硬件成本,同时增加了硬件的复杂性。

【发明内容】

[0007]本申请提供一种基于SMT的中央处理单元,以解决现有技术为了拓宽重命名指令宽度需要大量增加硬件比较器的问题。本申请另外提供一种基于SMT的用于检测指令的数据相关性的装置。
[0008]本申请提供一种基于SMT的中央处理单元,包括:
[0009]指令读取单元,用于从指令缓存中读取指令;
[0010]指令解码单元,用于对所述指令读取单元输出的指令进行解码;
[0011]指令比较单元,用于检测解码后指令的数据相关性,并输出检测结果;
[0012]所述指令比较单元包括用于检测指令之间的数据相关性的复数个比较器,所述复数个比较器,被划分成彼此相互独立的至少两个分组,所述比较器的分组个数与SMT功能启用后支持的线程个数相同;每一组比较器用于对应检测在SMT功能启用后的其中一线程的指令之间的数据相关性,不同分组的比较器用于检测在SMT功能启用后的属于不同线程的指令之间的数据相关性;
[0013]指令分发单元,用于将所述指令解码单元输出的、在SMT功能启用后的多个线程的解码后指令分发给所述指令比较单元中对应的比较器分组。
[0014]可选的,所述任一比较器均包括第一输入端和第二输入端、以及输出端;其中,
[0015]所述第一输入端和第二输入端,分别用于输入待检测数据相关性的两条指令中的在先指令的目的操作数地址、和在后指令的源操作数地址;
[0016]所述输出端,用于输出上述目的操作数地址和源操作数地址是否相同的比较结果。
[0017]可选的,所述指令读取单元具体用于,采用轮询的方式从指令缓存中读取SMT功能启用后的多个线程的指令;
[0018]相应的,所述指令解码单元具体用于,采用轮询的方式对所述指令读取单元输出的多个线程的指令进行解码。
[0019]可选的,所述指令读取单元具体用于,采用轮询的方式从指令缓存中读取SMT功能启用后的线程I和线程2的指令;
[0020]相应的,所述指令比较单元中的复数个比较器被划分为两个比较器分组,其中,第一比较器分组检测属于线程I的指令之间的数据相关性,第二比较器分组检测属于线程2的指令之间的数据相关性。
[0021]可选的,所述指令比较单元包含12个比较器,所述第一比较器分组和所述第二比较器分组各包含6个比较器。
[0022]可选的,所述指令比较单元中的所述复数个比较器被合并为一组,用于检测在SMT功能禁用后的属于同一个线程的指令之间的数据相关性。
[0023]可选的,所述指令分发单元用于将所述指令解码单元输出的、在SMT功能禁用后的属于同一线程的指令发送给所述指令比较单元中的被合并后的比较器分组。
[0024]可选的,所述指令比较单元包括所述指令分发单元。
[0025]本申请还提供一种基于SMT的用于检测指令的数据相关性的装置,包括:指令输入接口、结果输出接口、以及用于检测指令之间的数据相关性的复数个比较器;
[0026]所述复数个比较器,被划分成彼此相互独立的至少两个分组,所述比较器的分组个数与SMT功能启用后支持的线程个数相同;每一组比较器用于对应检测在SMT功能启用后的其中一线程的指令之间的数据相关性,不同分组的比较器用于检测在SMT功能启用后的属于不同线程的指令之间的数据相关性;
[0027]所述指令输入接口的个数与比较器的分组个数相同,并且每一个指令输入接口与一个比较器分组相连接,用于向所述比较器分组输入在SMT功能启用后的属于同一个线程的指令;不同的指令输入接口与不同的比较器分组相连接;
[0028]所述结果输出接口与所述复数个比较器相连接,用于输出所述复数个比较器的比较结果。
[0029]可选的,所述任一比较器均包括第一输入端和第二输入端、以及输出端;其中,
[0030]所述第一输入端和第二输入端,分别用于输入待检测数据相关性的两条指令中的在先指令的目的操作数地址、和在后指令的源操作数地址;
[0031]所述输出端,输出上述目的操作数地址和源操作数地址是否相同的比较结果。
[0032]可选的,所述指令输入接口的个数为两个,所述复数个比较器被划分为彼此独立的两个比较器分组;
[0033]其中,第一指令输入接口与第一比较器分组相连接,用于向第一比较器分组输入在SMT功能启用后的属于线程I的指令;第二指令输入接口与第二比较器分组相连接,用于向第二比较器分组输入在SMT功能启用后的属于线程2的指令。
[0034]可选的,所述比较器的个数具体为12个,所述第一比较器分组和所述第二比较器分组各包含6个比较器。
[0035]可选的,所述复数个比较器被合并为一组,用于检测从一个指令输入接口输入的、在SMT功能禁用后的属于同一个线程的指令之间的数据相关性。
[0036]本申请还提供一种基于SMT的用于检测指令的数据相关性的装置,包括:指令输入接口、结果输出接口、指令分发单元和指令比较单元,所述指令分发单元与所述指令输入接口和指令比较单元相连接,所述指令比较单元与所述指令分发单元和结果输出接口相连接;
[0037]所述指令比较单元包括用于检测指令之间数据相关性的复数个比较器,所述复数个比较器被划分成彼此相互独立的至少两个分组,所述比较器的分组个数与SMT功能启用后支持的线程个数相同;每一组比较器用于对应检测在SMT功能启用后的其中一线程的指令之间的数据相关性,不同分组的比较器用于检测在SMT功能启用后的属于不同线程的指令之间的数据相关性;
[0038]所述指令分发单元包括至少两个指令分发端,每个指令分发端与所述指令比较单元中的一个比较器分组相
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1