寄存器访问为啥比Cache要快

寄存器应该是由“触发器”构成的,而cache应该是由SRAM构成的,两种存储机理不一样,所以访问时可靠下速度也不一样(凭脑袋记忆回答,请做参考)

■网友
以RISC为例,我要做一个Load: ldr r1, (读取r0的内容,加上0x1002,把计算结果作为地址去访问memory,最后把memory的内容load到r1里面。)我先要访问寄存器r0, 加上0x1002,才知道我要访问的地址吧,才有可能cache hit吧。所以你说register和cache哪个快。。。当然上面说的是data access. Instruction access的地址可直接从program counter拿。即使如此L1 cache还是要好几个cycles (modern processors)。 至于为什么是这样,因为就是这么设计的。1. 在Memory Hierarchy中,访问速度越快,允许做到的capacity越小,同时也越expensive. 作为memory hierarchy的金字塔的顶端,registers存在的意义就是为了提供最快的访问速度。因此寄存器的size也最小。按照32个GPRs,每个64bit 来计算,也只有256 bytes. 但是现在的L1 cache至少是16KB, 32KB往上了。size越大就意味着访问越慢。2. 访问memory和访问寄存器的方式有本质不同。Cache是memory access的一部分。memory access需要计算地址. 在out-of-order core中,还需要进load/store queue进行复杂的disambiguation, merging等。但register是作为一个instruction的opcode来访问的。比如ADD R3,R1,R2. 因此在cpu在decode的时候就知道我需要访问哪些寄存器。等到后面的stage的时候花1个cycle拿一下就好了。 【寄存器访问为啥比Cache要快】 寄存器访问为啥比Cache要快

3. 寄存器用flip flops,cache用SRAM。flip flop比SRAM快
■网友
寄存器就直接连接在CPU计算单元上,cache则在内存控制器外面。
如果把CPU当成城市,数据当水果,寄存器是市中心便利店,cache是郊区大超市,内存是区县仓库,硬盘是果园。

■网友
构造不同是一方面,我觉得主要原因是访问方式,寄存器是底层指令的微程序设计或硬布线时就用上的,但是cache是通过操作系统调用


    推荐阅读