优化MIC-1微体系结构

速度与价格

商用CPU的优化问题主要集中在对速度(性能)价格(成本)这对矛盾的权衡,更高的性能往往意味着复杂的电路和更多的部件,进而需要更大面积,这又会导致功耗和散热难度的增加和芯片良品率的降低,也就是成本的增加。而且面积并不能无限增大,这会导致部件的电气性能变差,反而降低性能。所以如何合理利用面积也是个重要衍生问题,比如加法器曾有千种设计,速度快的往往面积大,盲目选最快的加法器会占用其他部件的面积,最后整体性能可能下降,这在工业上也有过案例。目前的商用CPU市场中,还没有一种完备的精确定价策略,目前定价所依据的是部件数量晶体管数量这样的指标。

CPU在“速度与价格”上的进步(每代INTEL加速不加价),其实主要靠集成电路技术的发展,但这部分不是计算机系统的内容。那么,对于确定的指令系统层集成电路技术,有如下几种提高速度的策略:

1) 缩短时钟周期:虽然这大部分都是集成电路方面的工作,但如果是通过改变逻辑电路的构造来降低数据通路的延迟,从而缩短时钟周期,那么这就属于微体系结构层优化。

2) 减少路径长度:执行一组操作所需的时钟周期数称为路径长度。比如有种想法是在PC寄存器增加独立的自增模块,减少ALU的使用次数。但是其效果可能不明显,例如MIC-1的Main1微指令是最常用的包含PC自增的指令,但是在Main1的一个周期里还包含内存fetch操作,省下PC自增操作也无法让Main1占用更少周期。又比如有种想法是让MIC-1中fetch的端口从8位改为16位,从而减少fetch次数。但这可能不能让fetch操作从2次降为1次,因为MIC-1的内存数据线(存储字长)是32位的,而MIC-1的操作数和操作码很多时候都是8位的,所以16位数据很可能是跨字的,这时还是需要2次fetch;

3) 指令重叠执行:可看作是种减少路径长度的方式,是设计人员最感兴趣,最有效的策略。比如说可以将PC、MBR、fetch控制信号整体作为取指模块独立出来,取指模块可以独立完成取操作码和操作数,而数据通路的其他部分可以同时执行其他的操作,这样就可能在同一时刻有两个指令在并行,实现明显的优化。对于更复杂的指令重叠设计,可以在同一时刻重叠更多个的操作;

MIC-1的结构十分精简,算上内存其晶体管数也不超过5000个。但这个结构已经能实现IJVM,所以接下来的任务就是一步步优化MIC-1的“速度与价格”。之后的文章会学习更复杂的方案。

 

合并主循环与微指令

63c149bb-6e24-4a8b-ba68-57645af76ff8

e6f080ae-182d-4f2e-9ee4-038669838305

之前给出过用MIC-1实现所有IJVM指令的方案,该方案中的微程序是基于主循环结构的,指令是开始/结束于Main1的。比如上图第一张是POP指令结束后回到主循环(Main1)的例子。但想要实现“回到主循环”,并不代表一定要将Main1的所有操作都放在一个独立时钟周期(独立微指令)执行。比如上图第二张,其把Main1的操作分散并组合进原pop1~pop3里,实现了等价的逻辑,减少了1个时钟周期。

这就是第一种缩短MIC-1执行路径长度的方案,不过其不适用于大部分指令,因为Main1包含PC自增操作,该操作需要通过ALU,但一个时钟周期通常只能通过ALU一次。所以只能把PC自增操作合并到未使用ALU的微指令里,但大部分微指令都使用到了ALU。

这种方案是比较简单的,相当于“升级”实现IJVM的微程序,没有实体硬件的改动。

 

三总线的数据通路

38ab8e2d-ae67-41f3-bdb6-c54d4f80c9b3

4d6d21e1-4e09-416d-8a39-234800da5aba

MIC-1的数据通路包含B、C两条总线(内存总线不算),前者是ALU的右输入,后者是ALU的输出。这里考虑再为ALU的左输入再加上A总线。A总线的功能和B总线类似,可通过控制信号从大部分寄存器中选一个作为ALU的左输入。使用3条总线的一个优势是可在1个时钟周期里作任意2个寄存器的加法,比如上图第一张是MIC-1的ILOAD,其为了计算局部变量起始地址+偏移量,需要先花费一个周期把起始地址LV存入H才能在下一个周期做加法。如果使用了A总线那么就能直接做加法,从而节省一个周期。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部