【问题标题】:Does a one cycle instruction take one cycle, even if RAM is slow?即使 RAM 很慢,一个周期指令是否需要一个周期?
【发布时间】:2010-12-05 12:41:03
【问题描述】:

我使用的是嵌入式 RISC 处理器。有一件基本的事情我有一个问题。

CPU 手册明确指出指令ld r1, [p1](在 C 中:r1 = *p1)需要一个周期。寄存器 r1 的大小为 32 位。然而,内存总线只有 16 位宽。那么如何在一个周期内获取所有数据呢?

【问题讨论】:

    标签: memory cpu cpu-cycles


    【解决方案1】:

    时钟时间假定为全宽零等待状态存储器。内核执行该指令所需的时间是一个时钟周期。

    曾经有一段时间,每条指令占用不同数量的时钟周期。那时内存也比较快,通常是零等待状态。在流水线之前有一段时间,您必须烧掉一个时钟周期提取,然后是一个时钟周期解码,然后是一个时钟周期执行,加上可变长度指令的额外时钟周期和如果指令具有内存操作的额外时钟周期。

    今天的时钟速度很高,芯片空间相对便宜,因此一个时钟周期的加法或乘法是常态,流水线和缓存也是如此。处理器时钟速度不再是性能的决定因素。内存相对昂贵且速度较慢。因此高速缓存(配置、数量和大小)、总线大小、内存速度、外设速度决定了系统的整体性能。通常提高处理器时钟速度但不提高内存或外围设备的性能提升会很小,在某些情况下它可能会变慢。

    内存大小和等待状态不是参考手册中时钟执行规范的一部分,它们仅讨论内核本身为每条指令花费的时钟单位。如果它是指令总线和数据总线分开的哈佛架构,那么一个时钟与内存周期是可能的。指令的获取至少发生在前一个时钟周期之前,因此在时钟周期开始时,指令准备就绪、解码和执行(读取内存周期)发生在指令结束时的一个时钟期间一个时钟周期,读取的结果被锁存到寄存器中。如果指令和数据总线是共享的,那么您可能会争辩说它仍然在一个时钟周期内完成,但是您无法获取下一条指令,因此那里有一点停顿,他们可能会作弊并调用那个时钟循环。

    【讨论】:

    • 请您向我确认一下,指令缓存(因此在获取阶段)或数据缓存(因此在内存阶段)上的缓存未命中会导致流水线停顿,内存延迟的长度是多少?
    • 确定如果一次提取未命中并且没有其他正在运行的事务,那么内存控制器会等待该提取完成。这并不意味着管道会停止,如果它确实停止了,也不意味着它会停止特定的时间。您的问题是关于数据周期而不是指令(获取)周期,并且您没有提到缓存或缓存。使用数据缓存,您可能需要一个 mmu 或其他一些方案,一个 mmu 也会为获取或数据周期添加时钟周期。再次,管道不一定会停止,如果是这样,则不是内存周期的长度。
    • 感谢您的回复,但实际上我并不清楚数据周期与指令(获取)周期之间的关系。我对 CPU 架构的了解非常有限,我遇到了这个问题,而当我向其中添加代码时速度更快的应用程序出现问题。
    • 通过添加代码,您正在更改缓存中的混合内容,这可能就是它更快的原因。有时您可以在启动代码中添加或删除 nop 以移动整个程序并查看性能变化,因为各种事物与缓存行对齐。
    • 如果你有一个缓存,实际上你有一个单独的指令缓存和数据缓存,那么指令获取是...缓存...由指令缓存缓存数据读取和写入使用数据缓存。指令周期不会影响数据缓存,不会影响数据性能等。拥有缓存意味着您的内存系统速度较慢,因此您的代码性能可能/将会对代码/指令和缓存的交互方式敏感。我从您的回复中猜测您需要在维基百科或其他地方对这些东西进行一些研究。
    【解决方案2】:

    我的理解是:当说某些指令需要一个周期时,并不是说指令会在一个周期内完成。 我们应该计算指令pipe-line假设你的CPU有5个阶段的流水线,如果按顺序执行该指令将需要5个周期。

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2023-03-31
      • 1970-01-01
      • 2021-06-24
      • 2020-12-10
      • 2010-10-16
      • 2019-06-02
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多