![在 L1、L2 缓存和 DRAM 中,顺序访问是否比随机访问更快?](https://linux22.com/image/1415223/%E5%9C%A8%20L1%E3%80%81L2%20%E7%BC%93%E5%AD%98%E5%92%8C%20DRAM%20%E4%B8%AD%EF%BC%8C%E9%A1%BA%E5%BA%8F%E8%AE%BF%E9%97%AE%E6%98%AF%E5%90%A6%E6%AF%94%E9%9A%8F%E6%9C%BA%E8%AE%BF%E9%97%AE%E6%9B%B4%E5%BF%AB%EF%BC%9F.png)
在 L1、L2 缓存和 DRAM 中,由于可以建立预读,顺序访问是否比随机访问更快?我知道在 HDD 中,这当然要快几个数量级。
答案1
是的,有些相同但不完全相同。
根据处理器的手册:-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf
有特定的硬件预取,程序员可以告诉它进行预取,此外,它有多种方式来处理数据块大小,有经验的程序员可以从中获益。此外,同样的硬件或软件方法如果稍有不慎就可能导致预取一再失败,而且这种情况因处理器不同而不同。
将数据移动到更高级别,假设需要它(如预读),并且数据在那里,因为它在移动到这些级别的块大小之内(顺序可能有帮助)。
处理器知道它在那里引用了什么指令集,或者它要做的事情的列表,它准备好数据。
2.1.5.4 数据预取 可以使用软件预取、硬件预取或者两者的任意组合将数据推测性地加载到 L1 DCache 中。...
--
流处理器:此预取器监控 L1 缓存的读取请求,以确定地址的升序和降序顺序。监控的读取请求包括由加载和存储操作以及硬件预取器发起的 L1 DCache 请求,以及代码提取的 L1 ICache 请求。当检测到前向或后向请求流时,将预取预期的缓存行。预取的缓存行必须位于同一个 4K 页中。...
--
Wide Dynamic Execution
Smart Memory Access - prefetches data
Branch Prediction Unit
Instruction Fetch Unit
Instruction PreDecode
这个列表很长,其中包含许多正在考虑的功能。
从链接文档的第 60 页开始。
https://stackoverflow.com/questions/1922249/c-cache-aware-programming Stack Overflow 上提供了更多 PDF 链接,我确信那里有更多相关信息。
关于这个和技术的数据太长了,无法在这里发布,程序员所说的“这在现实中是如何工作的”也太长了。不仅如此,我几乎无法理解它。在阅读了这些内容(和程序员信息)之后,难怪为什么一个软件做几乎同样的事情,却比另一个软件快 50 倍,事情可以一丝不苟地完成、测试和重新测试,以达到最终的优化,或者他们可能会错过一些事情,这是正常的。
&不,RAM 完全是随机访问的,只有极小的延迟,硬盘使用“RAM”进行预读操作,突发传输速度比从盘片读取的速度快很多倍。顺序性对硬盘非常重要,因为磁头移动需要时间,而且不会从盘片上提取数据。磁头到达位置后,必须等到数据在旋转中出现。
使用硬盘预读,它可以在同一旋转中提取数据,从而节省许多毫秒的时间。
假设这两者之间有任何相似之处,可能需要很大的想象力 :-) 。