什么是决定计算机内部寄存器,什么是计算机的内存寄存器?看完明白了

许多程序的变量比计算机的寄存器要多。因此,编译器试图在寄存器中保留最常用的变量,并将其余的变量保存在内存中,使用负载和存储来在寄存器和内存之间移动变量。将较少使用的变量(或稍后需要的变量)放入内存的过程称为溢出寄存器。

7e4518207f20450983897f040a3eb044.png

与大小和速度相关的硬件原则表明,内存必须比寄存器慢,因为寄存器的数量更少。这个建议确实是这样的;如果数据是在寄存器而不是内存中,那么数据访问就会更快。

此外,数据在注册时更有用。RISC-V算术指令可以读取两个寄存器,对它们进行操作,并写出结果。RISC-V数据传输指令只读取一个操作数或写一个操作数,而不需要操作它。

因此,寄存器的访问时间比内存少,并且具有比内存更高的吞吐量,使寄存器中的数据更快地访问和更易于使用。访问寄存器也比访问内存消耗更少的能量。为了达到最高的性能和节约能源,一个指令集架构必须有足够的寄存器,并且编译器必须使用有效注册的方式。

a18f429cced466deaaa5de79e7bed167.png

让我们把寄存器和内存的能量和性能放到一个透视图中。假设64位数据,寄存器的速度大约是2015年的200倍(0。25比50纳秒),比DRAM的能量效率高1万倍(0.1比1000 picoj)。这些巨大的差异导致了缓存,这降低了进入内存的性能和能量损失。

3959ad0cea10955b7aabc1f3fd7bd90b.png

考虑到寄存器的重要性,它的增长速度是多少,随着时间的推移,芯片中的寄存器数量?

1.非常快:它们的增长速度和摩尔定律一样快,该定律预测每18个月就会将芯片上的晶体管数量增加一倍。

2.非常慢:由于程序通常以计算机的语言分布,所以指令集体系结构中存在惰性,因此寄存器的数量只会随着新指令集变得可行而增加。

6263985f0dc0657e6ea38669f568af65.png

使用Load和Store示例编译:

假设变量h与寄存器x2i相关联,而数组A的基址是在x22中。下面的C分配语句的RISC-V汇编代码是什么?

回答:

尽管在C语句中有一个单一的操作,但是现在有两个操作数在内存中,所以我们需要更多的RISC-V指令。前两个指令与前面的示例相同,只是这次我们使用适当的偏移量来在荷载寄存器指令中选择一个8,而add指令在x9中放置总和:

Id x9、64(x22)//临时reg x9获得8

添加x9、x21、x9//临时reg x9获得h+8

最后的指令把总和存储为12,使用96(8<12)作为偏移量,并将x22注册为基本寄存器。

sdx9,96(x22)//存储h+A 8回到12。

0a55be1466db02e1a2552ea6562b84ea.png

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值