0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

寄存器比内存快的原理是什么?

Linux阅码场 来源:未知 作者:胡薇 2018-08-02 16:17 次阅读

计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。

同样都是晶体管存储设备,为什么寄存器比内存快呢?

Mike Ash写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。下面就是我的简单翻译。

原因一:距离不同

距离不是主要因素,但是最好懂,所以放在最前面说。内存离CPU比较远,所以要耗费更长的时间读取。

以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳秒。光在1纳秒的时间内,可以前进30厘米。也就是说,在CPU的一个时钟周期内(0.33纳秒),光可以前进10厘米。

涛声依旧注:每次震荡的耗时也就是CPU的时钟周期,时钟周期为震荡频率的倒数。

因此,如果内存距离CPU超过5厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来会快一点。

距离对于桌面电脑影响很大,对于手机影响就要小得多。手机CPU的时钟频率比较慢(iPhone 5s为1.3GHz),而且手机的内存紧挨着CPU。

原因二:硬件设计不同

苹果公司新推出的iPhone 5s,CPU是A7,寄存器有6000多位(31个64位寄存器,加上32个128位寄存器)。而iPhone 5s的内存是1GB,约为80亿位(bit)。

这意味着,高性能、高成本、高耗电的设计可以用在寄存器上,反正只有6000多位,而不能用在内存上。因为每个位的成本和能耗只要增加一点点,就会被放大80亿倍。

事实上确实如此,内存的设计相对简单,每个位就是一个电容和一个晶体管,而寄存器的设计则完全不同,多出好几个电子元件。

并且通电以后,寄存器的晶体管一直有电,而内存的晶体管只有用到的才有电,没用到的就没电,这样有利于省电。

这些设计上的因素,决定了寄存器比内存读取速度更快。

原因三:工作方式不同

寄存器的工作方式很简单,只有两步:

(1)找到相关的位

(2)读取这些位。

内存的工作方式就要复杂得多:

1.找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)

2. 将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址翻译成实际的物理地址。

3. 将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽(bank)上。

4.确定数据在哪一个内存块(chunk)上,从该块读取数据。

5. 数据先送回内存控制器,再送回CPU,然后开始使用。

内存的工作流程比寄存器多出许多步。每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。

为了缓解寄存器与内存之间的巨大速度差异,硬件设计师做出了许多努力,包括在CPU内部设置缓存、优化CPU工作方式,尽量一次性从内存读取指令所要用到的全部数据等等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72765

原文标题:为什么寄存器比内存快?

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    寄存器内存条的基础实现电路方案

    那么存储器应该如何工作呢,首先我们要决定数据存在哪儿,就是存储的地址,其次就是数据要稳定的存在,不能受其他操作的影响。
    发表于 09-05 11:29 3188次阅读
    <b class='flag-5'>寄存器</b>和<b class='flag-5'>内存</b>条的基础实现电路方案

    为什么寄存器的速度内存

    `在看C专家编程的时候, 上面有一幅图,整理的是内存媒介的速度,与成本的关系说明, 这里我在网上找了一张说明更为细致的图:那为什么寄存器的速度会比内存?Mike Ash写了一篇很好的
    发表于 12-27 10:19

    maxq7667芯片用户指南下载

    寄存器内存位置或在寄存器和/或寄存器之间移动数据 内存位置。 这个简单的顶层指令解码允许在一个周期内执行所有指令。由于执行所有CPU操作
    发表于 04-06 10:04 23次下载
    maxq7667芯片用户指南下载

    操作系统中数据存储构造应用设计

    计算机存储系统是层次性的,从内向外,依次为寄存器、cache 、内存、外存,其访问速度越来越低,访问的粒度和存储容量越来越大,特别是最外层(外存) ,数据是永久性的,需要软件参与实现数据在最外层
    发表于 09-20 16:36 5次下载

    寄存器Load/Store内存访问指令

    5.4 多寄存器Load/Store内存访问指令 多寄存器Load/Store内存访问指令也叫批量加载/存储指令,它可以实现在一组寄存器和一
    发表于 10-18 15:56 1次下载

    为什么寄存器内存快_原因是这个

    本文开始介绍了寄存器特点、分类以及寄存器的工作原理,其次介绍了内存的容量、大小与选购方法,最后阐述了寄存器内存更快的原因。
    发表于 04-11 09:09 6549次阅读
    为什么<b class='flag-5'>寄存器</b>比<b class='flag-5'>内存</b>快_原因是这个

    如何初始化miniDSPCodec和基于MCU控制器的参考代码详细中文资料

     miniDSP Codec 内部的寄存器分为两大类: 常规配置寄存器和miniDSP 内存寄存器。常规配置寄存器是用来控制Codec 时钟
    发表于 04-28 10:25 7次下载
    如何初始化miniDSPCodec和基于MCU控制器的参考代码详细中文资料

    RFM反射内存5565控制和状态寄存器

    3.3 RFM反射内存控制和状态寄存器 内存访问周期RFM5565 反射内存控制和状态寄存器,偏移值存储在基址
    发表于 08-13 07:58 668次阅读

    IO端口和IO内存有什么区别和分别使用说明函数接口的详细资料说明

    ,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的
    发表于 05-08 18:19 0次下载
    IO端口和IO<b class='flag-5'>内存</b>有什么区别和分别使用说明函数接口的详细资料说明

    基于RTDX技术实现图像目标识别系统的设计

    在数字信号处理系统开发过程中,通常要对算法的正确性进行验证,也就是程序调试。而传统的主机调试器必须通过在目标应用程序中插入断点,在中断目标应用程序运行时观测目标机上各寄存器内存变量的值。但是,由于处理系统是实时的,因此,这种经典的方法不能实时地跟踪数据的变化,有时显示的
    的头像 发表于 05-21 09:41 1442次阅读
    基于RTDX技术实现图像目标识别系统的设计

    是的 你没看错!!!用JAVA为MCU开发物联网程序?

    是的 你没看错!!!用JAVA为MCU开发物联网程序? 一直以来,物联网设备这种嵌入式硬件,对于Java软件开发者来说,就是Black Magic Box,什么中断、寄存器,什么指针、内存泄漏
    发表于 10-28 19:21 9次下载
    是的 你没看错!!!用JAVA为MCU开发物联网程序?

    51汇编(一):存储器结构

    文章目录内存结构程序存储器数据存储器通用寄存器区位寻址区一般RAM区特殊功能寄存器内存结构MCS-51单片机在物理结构上有四个存储空间:片内程序存储器、片外程序存储器、MCS-51单
    发表于 11-23 09:36 13次下载
    51汇编(一):存储器结构

    反射内存卡编程的三个寄存器

    反射内存卡编程 基本 RFM5565 反射内存写入和读取操作需要很少或根本不需要编程知识。反射内存板上电后进入功能模式。用户将需要访问 PCI配置寄存器(基址
    发表于 04-02 16:25 471次阅读

    便携式刺激内部—硬件软件接口

    、仿真器、原型设计解决方案、虚拟平台和真实芯片。现在,考虑一个需要将数据放入某个寄存器内存位置或检索该寄存器内存的内容以确保测试正确运行的测试。
    的头像 发表于 07-27 09:26 646次阅读
    便携式刺激内部—硬件软件接口

    访问寄存器代替内存引用

    我们先看一个例子: 有这么两个程序:它们的目的就是将数组x中的数,按照下标累加到数组y中,最后在把数组y中的数据累加到一个数dest里面。为了验证效果,我们将这个过程重复10000遍。 Prog 1 Prog2 这两个程序的区别就在Prog2中红框里面的内容。那么哪个程序运行的更快呢? 话不多说,我们看实际的结果: 这里为了说明效果,我们编译的时候,并没有采用优化(编译优化,确实可以提高程序运行的效率,但是过高的编译优化等级会有一定的副作用,另
    的头像 发表于 12-13 11:07 156次阅读
    访问<b class='flag-5'>寄存器</b>代替<b class='flag-5'>内存</b>引用