“缓存不友好”和“缓存友好”代码有什么区别?
“缓存友好”是指最大化性能的代码通过有效地使用计算机的内存层次结构,特别是其缓存。另一方面,“缓存不友好”的代码会导致缓存未命中,从而降低性能。
如何编写缓存高效的代码:
-
利用时间局部性: 访问最近使用过的数据,增加在缓存。
-
利用空间局部性:将相关数据在内存中分组在一起,以最大限度地减少跨越内存页边界的缓存线,这可能会触发多个缓存未命中。
-
使用缓存对齐的数据结构: 选择 std::vector 等数据结构而不是 std::list,因为它们连续存储元素,从而改善缓存
-
利用数据结构和算法排序:设计优化缓存使用的数据结构和算法。缓存阻塞和利用数据顺序等技术可以显着提高性能。
-
思维分支预测:避免不可预测的分支,因为它们会阻碍预取并增加缓存未命中。
-
最大限度地减少虚拟函数调用:虚拟函数会引入固有的开销,并可能导致查找期间缓存未命中。对性能关键型代码使用替代设计模式或考虑手动函数绑定。
常见的缓存相关问题:
-
错误共享: 当多个线程访问同一缓存中的数据时,多处理器可能会遇到缓存未命中的情况
-
Thrashing:由于内存使用过多而导致连续页面错误,导致磁盘访问速度变慢。
以上是是什么让代码对缓存友好或对缓存不友好?的详细内容。更多信息请关注PHP中文网其他相关文章!