SMT处理器基础

传统SMT架构设计需要解决的主要问题是:“如何在处理器经常需要等待速度较慢的主内存传送关键代码或数据的情况下,保证处理器可以经常运行在满负荷的工作状态下?”在实际应用中,要想将某个线程的执行状态保存下来,并将处理器的执行资源转交给另外一个线程,是一个非常复杂而耗时的过程,而且通常需要进行大量的内存操作。因此,处理器通常会一次载入两个或两个以上数量的线程有关代码和数据,然后再由执行机构在这几个线程中根据线程的优先级进行动态切换。采用这种设计的处理器中,如果有某个线程处于停等内存数据的状况,那么处理器便可以迅速切换为执行另外一个不需要停等数据的线程,而无需进行复杂的上下文开关切换操作。

基于这种思路,为了让SMT设计的处理器能够正常工作,处理器中所有的代码或数据存储机构所存储的内容必须一致或采用分区的形式保存数据。这是大家必须首先牢记的一点,我们在文章的后面还会用到这个结论。

这里我们举双路SMT设计的处理器为例。这种处理器中需要设置两套不同的架构寄存器组architectural registers)和换名寄存器组rename registers),其中一套供给线程A使用,另一套则供线程B使用;同时,处理器的指令队列缓存器 instruction queues)的容量也需要设计得很大,这样才可以让指令窗口中存有足够多的分属两个线程的指令条数,以便处理器的执行单元能够时时处于较忙的工作状态。

最后,SMT处理器中由两个线程共享的功能单元这些单元通常是执行管线上各个执行单元的指令缓存)必须被设计成任何一个线程都不能完全独占的结构。也就是说,这些共享单元必须在两个线程之间进行平衡,时刻保证供给某个线程使用的功能单元不会处在空置的状态之下。

基于以上的原因,SMT处理器的内核需要增加许多额外的功能单元,系统的整体功耗也会因此而提升。不过由于采用以上设计之后,处理器可以不需要把大量的时间和功率耗费在等待慢速的内存传送上,因此还可以算得上是物有所值。


相关内容