是否有一段时间处理器直接使用ram进行操作,而不涉及高速缓存? 还是类似Processor总是从缓存中获取数据而从Ram中获取缓存?
答案 0 :(得分:2)
通常,不是,除非软件有意绕过或禁用现代CPU上的缓存。
DRAM的延迟可能为70 ns,在4GHz CPU上为280个周期。 Skylake CPU有足够的时间以每个周期4条指令的速度执行1100条指令。但是它对内存并行性的限制是大约12个未决的高速缓存未命中。因此,即使执行顺序混乱,高速缓存对于性能也非常重要。
不过,有趣的事实是:是的,在TLB丢失后访问页表时,P5 Pentium CPU和更早版本的MMU绕过了缓存。资料来源:前Intel CPU架构师Andy Glew的答案,他曾从事P6:Are page table walks cached?
包括现代x86 do 在内的现代CPU通过其数据缓存访问页表,但是:What happens after a L2 TLB miss?
x86具有movnt
条指令,用于绕过缓存的存储,以避免大内存集的缓存污染。需要权衡带宽。有关具有ERMSB功能的CPU上来自rep movsb
的NT存储和无RFO存储的更多信息,请参见Enhanced REP MOVSB for memcpy。可能其他一些架构也具有类似的功能。
您还可以将一系列物理地址空间设置为不可缓存。 (或在x86上,每4k虚拟页面在页面表条目中具有页面属性表设置。)
通常,这是针对MMIO区域(内存映射的I / O)完成的,在该区域中,“ DRAM”实际上是网卡等设备上的I / O寄存器,而不是DRAM。因此,每次加载/存储都是明显的副作用,因此必须禁止进行推测性的预取。 (而且每个存储区都必须导致单独的内核外写事务,例如PCIe消息。)
此外,x86 CPU具有控制寄存器,可让您禁用高速缓存,这使其非常慢。 How can the L1, L2, L3 CPU caches be turned off on modern x86/amd64 chips?。同样,我假设其他ISA具有类似的功能。
答案 1 :(得分:0)
CPU的处理速度远高于RAM的速度,这就是为什么我们使用可以在1个周期内获取数据的缓存的原因。如果存在高速缓存未命中,则将数据从内存中取出并移至高速缓存中,然后执行该过程。可以说处理器直接与ram一起工作。例如,RAM需要10个周期来获取数据块,而CPU停顿了剩余的9个周期。如果将其移到高速缓存中,则数据整体上将可用而不会停顿。这就是为什么它不使用RAM。
RAM也更快,唯一的原因是查找数据需要更多时间。如果发现剩余数据则速度更快。