0

是否有一段时间处理器直接使用 ram 进行操作,而不涉及高速缓存?还是像处理器总是从缓存中获取数据而缓存从内存中获取?

4

2 回答 2

2

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

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

不过有趣的事实是:是的,P5 Pentium CPU 和更早版本中的 MMU 在 TLB 未命中后访问页表时会绕过缓存。资料来源:Andy Glew 的回答,他曾在 P6 上工作过,前英特尔 CPU 架构师:页表遍历是否被缓存?

包括现代 x86 在内的现代 CPU确实通过其数据缓存访问页表,但是:在 L2 TLB 未命中后会发生什么?


x86 有movnt关于缓存绕过存储的指令,以避免大 memset 的缓存污染。带宽需要权衡取舍。有关具有 ERMSB 功能的 CPU 上的NT 存储和无 RFO 存储的更多信息,请参阅用于 memcpy 的增强型 REP MOVSB 。rep movsb可能其他一些架构也有类似的特性。


您还可以将一系列物理地址空间设置为不可缓存。(或者在 x86 上,每 4k 虚拟页面在页表条目中具有页面属性表设置。)

通常这是为 MMIO 区域(内存映射 I/O)完成的,其中“内存”实际上是网卡等设备上的 I/O 寄存器,而不是 DRAM。因此,每个加载/存储都是可见的副作用,并且必须禁止推测性预取。(并且每个存储都必须产生一个单独的非核心写入事务,例如 PCIe 消息。)


此外,x86 CPU 具有控制寄存器,可让您禁用高速缓存,从而使其速度极慢。 如何在现代 x86/amd64 芯片上关闭 L1、L2、L3 CPU 缓存?. 同样,我假设其他 ISA 具有类似的功能。

于 2019-02-28T07:54:03.990 回答
0

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

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

于 2019-02-28T06:10:32.733 回答