所以我熟悉用于读取优化的循环交换,因为数组在内存中的布局方式。
我对缓存如何工作有点不熟悉。我理解磁盘I / O技术,如预读和等待写入,但我不确定其他用于写入的高速缓存优化。
写入数组或向量时循环顺序是否重要?如果是这样,你能解释缓存机制的原因和方式吗?
谢谢!
答案 0 :(得分:0)
通常,高速缓存是内存中的顺序位置,用于临时保持值,同时发生其他操作。您可以将它们视为一维数组。
缓存也可以是不同的结构。例如,磁盘驱动器缓存可以是Trie,使用扇区作为索引。处理器可以具有高速缓存阵列,使用存储器地址的散列作为索引。
通常,只要访问具有相同的缓存行,从缓存读取就具有相同的性能,无论是增量访问,递减访问还是随机访问。某些处理器可能具有指向缓存值的指针,这些指针在读取或递减后会增加。
缓存的优化技巧是让您经常访问的数据适合缓存行。例如,如果您有一个二维数组,则每一行应该是一个缓存行。行内的任何访问(例如行内的列)都是最佳的。但是,迭代行,保持列相同,不是最佳的,因为处理器必须加载(或搜索)另一行并将其放入其缓存中。
对于硬盘驱动器,缓存有两个目的:1)包含频繁访问数据; 2)数据写入驱动器时缓冲数据来自处理器。在情况2)中,处理器不必等待事务完成;当驱动器将数据从其缓存传输到盘片时,它会转储数据,然后继续执行其他操作。