缓存预取场景 - 电源架构

时间:2013-06-14 14:08:51

标签: c++ performance caching powerpc prefetch

我使用asm dcbt命令触摸我知道执行某些计算所需的内存范围。我的探查器显示缓存未命中模式,因为偶尔访问此范围内的元素(触摸4次,跳过5次等等 - 每次第5次操作产生缓存未命中)。

有一个函数A()可以访问确切的范围及其大小。此A()函数在另一个部分之前调用,该部分也将触及并使用A()范围内的数据。我可以在dcbt 中使用A() ,然后期望B()的改进我是否必须使用{{1在使用该数据集合的同一函数中的范围?

1 个答案:

答案 0 :(得分:3)

假设A()中使用的所有数据都适合缓存,您应该会看到B()的改进。但是,您也可以最终将数据读入未使用的缓存中,这对任何事情都没有任何意义,只有当内存总线可用于加载某些所需的ACTUAL数据时才会导致内存总线繁忙,如果你的模式和你说的一样零星。一定要尝试一下,但不要指望它有效地神奇地工作 - 它通常需要一些“调整” - 特别是关于“你现在在多大程度上读取数据”。

取决于A()B()的确切行为,例如,如果您在读取和写入之间切换,并从一个部分读取并写入完全不同的部分,则将写入批处理一个“保持区域”,然后被复制到RAM通常是一个很好的计划 - 使保持区域类似于L1缓存的1 / 8-1 / 4。

[警告:我对PowerPC架构完全没有任何经验,但我在使用x86处理器时使用了缓存预取和其他内存优化技术,有时会取得一些成功,而在其他时候却没有那么成功]