处理器是否可以直接使用 RAM?

Processor can use RAM directly or Not?

是否有处理器直接使用 ram 进行操作而不需要高速缓存的情况? 或者它的类似处理器总是从缓存中获取数据而缓存从 Ram 中获取?

CPU的处理速度远远高于RAM的速度,这就是为什么我们使用可以在1个周期内获取数据的缓存。如果存在缓存未命中,则数据将从 ram 中取出并移动到缓存中,然后执行该过程。可以说处理器直接与 ram 一起工作。例如,RAM 需要 10 个周期来获取一大块数据,CPU 在剩余的 9 个周期中停止。如果它被移动到缓存中,数据将作为一个整体可用而不会停止。这就是它不使用 RAM 的原因。

RAM 也更快,唯一的问题是查找数据需要更多时间。如果它发现剩余的数据快一点。

通常不会,不会,除非软件故意绕过或禁用现代 CPUs 上的缓存。

DRAM 的延迟可能为 70 ns,即 4GHz 上的 280 个周期 CPU。这足以让 Skylake CPU 以每个周期 4 条指令执行约 1100 条指令。但它对内存并行性的限制是大约 12 个未命中缓存。所以缓存对于性能非常非常重要,即使在乱序执行的情况下也是如此。

有趣的事实:是的,P5 Pentium CPUs 和更早版本中的 MMU 在 TLB 未命中 tables 后访问页面时绕过缓存 .资料来源:前英特尔 CPU 架构师 Andy Glew 的回答,他曾在 P6 上工作:Are page table walks cached?

现代 CPUs 包括现代 x86 do 通过他们的数据缓存访问页面 tables,但是:What happens after a L2 TLB miss?


x86 有 movnt 缓存绕过存储的指令,以避免大 memset 的缓存污染。带宽需要权衡。请参阅 Enhanced REP MOVSB for memcpy,了解有关 CPU 上 rep movsb 的 NT 存储和无 RFO 存储的更多信息,以及 ERMSB 功能。可能其他一些架构也有类似的功能。


您还可以将物理地址范围 space 设置为不可缓存。 (或者在 x86 上,每个 4k 虚拟页面在页面 table 条目中设置页面属性 Table。)

通常这是为 MMIO 区域(内存映射 I/O)完成的,其中 "memory" 实际上是 I/O 在设备(如网卡)上注册而不是 DRAM。所以每个 load/store 都是可见的副作用,必须禁止推测性预取。 (并且每个存储都必须导致单独的核外写入事务,例如 PCIe 消息。)


此外,x86 CPUs 有控制寄存器,可以让你禁用缓存,使它们非常慢。 。同样,我假设其他 ISA 具有类似的功能。