内存层次结构 - 为什么寄存器昂贵?

2023-12-24

我明白那个:

Faster访问时间 >More昂贵的

Slower访问时间 >Less昂贵的

我还了解到寄存器是层次结构的顶部,并且具有最快的访问时间。我很难研究的是why这么贵吗?据我所知,寄存器实际上是直接内置于 ALU 中的电路。如果它们确实内置于 CPU(尤其是 ALU)中,那么究竟是什么让它最昂贵呢?

是大小(当然,寄存器是最小的)吗?


寄存器非常非常昂贵,因为它们必须非常非常快,并且需要同时从许多地方访问它们。

例如,如果您有语句 a = a + x; b = b + x; c = c + x;你有三个指令,它们都想读取同一个寄存器。所以寄存器不仅仅是内存。处理器中还需要所有数据路径,以便来自保存 x 的寄存器的相同数据可以同时发送到三个指令。而且数据可以传输到很多很多地方。如果你写 double a = x;并且x是整数,那么必须有一条数据路径将寄存器x发送到浮点单元。或者向量单位。等等。

那么你就会遇到这样的问题:你不仅需要存储数据,还必须确保它可用。如果你写x = y + z; a = a + x;当第一条指令运行时,必须有人跟踪保存 x 的寄存器现在无效,直到存储加法结果,并停止第二条加法运行。那是超级贵的。

因此,构建寄存器不仅仅是添加一点内存,而且需要付费。寄存器对于处理器的速度至关重要,因此需要使用最昂贵、最快的技术来构建它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存层次结构 - 为什么寄存器昂贵? 的相关文章

  • 清除堆内存以防止内存不足异常

    我知道已经有人问过有关内存不足的问题 但我没有找到解决方案 在位图工厂中 我出现内存不足异常 甚至使用 inSampleSize 1 所以我经常用 try catch 内存不足异常来包围它 因为这是一个不好的做法 try catch Out
  • 在 python 中 pickling 数据时出现内存错误

    我正在尝试使用 python 中提供的 dump 命令将字典转储为 pickle 格式 字典的文件大小约为 150 mb 但仅转储 115 mb 的文件时会出现异常 例外情况是 Traceback most recent call last
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 找出 CPU 时钟频率(每个内核、每个处理器)

    像 CPUz 这样的程序非常擅长提供有关系统的深入信息 总线速度 内存时序等 但是 是否有一种编程方法可以计算每个核心 以及每个处理器 在每个 CPU 具有多个核心的多处理器系统中 频率 而无需处理 CPU 特定信息 我正在尝试开发一个反作
  • 清除通过在 IPython 中绘图分配的内存

    我正在 IPython QtConsole 和 Notebook 中绘制一些大图 这些占用了大量的内存 但是一旦它们被绘制出来 我就不再需要它们了 它们就可以走了 我怎样才能释放内存 None以下作品 close clf cla reset
  • 抛出错误的分配

    我在尝试使用升压托管共享内存时收到 bad alloc 我从他们的快速指南中复制了升压示例 以供不耐烦的人使用 并结合了我自己的更改 我的代码如下 我注释掉了示例内容并在下面编写了自己的代码 我还进行了一些调试和测试 有人有什么想法吗 任何
  • JMeter 负载服务器会影响我的结果吗?

    我正在使用亚马逊 EC2 实例 大型 作为使用 1 000 个线程的负载服务器来运行 JMeter 测试 负载服务器CPU利用率稳定在90 左右 内存利用率稳定在70 是否存在关于负载服务器在什么时候没有足够资源 内存或 CPU 而导致负载
  • R:如何在不耗尽内存的情况下重新绑定两个巨大的数据帧

    我有两个数据框df1 and df2每个都有大约 1000 万行和 4 列 我使用 RODBC sqlQuery 将它们读入 R 没有任何问题 但是当我尝试rbind他们 我收到了最可怕的 R 错误消息 cannot allocate me
  • 为什么在32位armv7l上mmap 4GB文件成功?

    我的印象是来自mmap 2 手册页和搜索结果 mmap仅限于系统可用的地址空间 减去系统保留的地址空间 所以在 32 位 armv7l 上 我假设它大约是 3GB 4GB 1GB 但似乎我实际上可以mmap5 GB 文件没有任何问题 int
  • 用python控制风扇速度并检测电脑内部温度?

    由于我的电脑风扇噪音很大 我想为自己编写一个程序 在不需要全速运行时 关闭它 我想用python制作它 那么有没有任何模块可以检测温度和 或设置风扇速度 不要使用 python 或 WMI 如果您使用的是 Windows 并且无法使用 sp
  • 为什么我可以访问寄存器中较低的双字/字/字节,但不能访问较高的双字/字/字节?

    我开始学习汇编程序 这对我来说看起来不合逻辑 为什么我不能在寄存器中使用多个高字节 我明白了历史原因rax gt eax gt ax 所以让我们关注new64 位寄存器 例如 我可以使用r8 and r8d 但为什么不呢r8dl and r
  • 从 Java 内部限制 CPU

    我在这个 和其他 论坛中看到了许多具有相同标题的问题 但似乎没有一个问题能完全解决我的问题 就是这个 我有一个 JVM 它占用了托管它的机器上的所有 CPU 我想限制它 但是我不能依赖任何限制工具 技术external到 Java 因为我无
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • 如何查找页面上R图形的字节大小?

    我想监控 R 在各个页面上生成的图形的基本质量 例如每个页面的字节大小 我现在只能对平均页面进行质量保证 请参阅下面的章节 我认为这项任务必须有一些比一般措施更内置的东西 生成 4 页的代码Rplots pdf我想知道此处输出中每个页面的字
  • 以编程方式获取 Android 设备的所有 RAM 内存,而不仅仅是分配给用户进程的内存

    我有一台设备 我确信它的 RAM 内存为 512 MB 希望能够以编程方式检索该值 512 MB 到目前为止 我在互联网上遇到的主要是这两种方式 https stackoverflow com a 16143065 1521264 http
  • 段寄存器如何参与内存地址转换?

    到目前为止我所学到的有关细分的知识 虚拟地址包含段选择器和偏移量 段选择器与GDTR配合使用 查找段描述符的线性地址 段描述符保存有关所选段的信息 包括其线性地址 所以 我的问题是 根据我所读到的内容 虚拟地址被加载到段寄存器中 然后以某种
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • 删除指向对象的 C++ 指针

    我认为删除命令会释放我分配的内存 有人可以解释为什么删除后我似乎仍然有内存在使用吗 class Test public int time int main Test e e new Test e gt time 1 cout lt lt e
  • 从 64 位 nasm 代码接收 32 位寄存器

    我正在学习 64 位 nasm 我通过执行以下操作来汇编 nasm 文件 该文件仅包含 64 位寄存器 nasm f elf64 HelloWorld nasm o HelloWorld o 并链接它执行以下操作 ld HelloWorld

随机推荐