880得票10回答
什么是“缓存友好”的代码?

什么是“不利于缓存的代码”和“友好缓存的代码”之间的区别? 我如何确保编写高效的缓存代码?

409得票7回答
为什么在遍历二维数组时循环的顺序会影响性能?

下面是两个程序,它们几乎完全相同,唯一的区别在于我交换了 i 和 j 变量的位置。它们运行的时间不同。有人能解释一下为什么会出现这种情况吗? 版本 1#include <stdio.h> #include <stdlib.h> main () { int i,j...

259得票3回答
“每个程序员都应该了解的内存知识”这篇文章有多少仍然有效?

我想知道Ulrich Drepper于2007年撰写的关于内存的每个程序员都应该知道的内容有多少仍然有效。此外,我找不到比1.0更新的版本或勘误表。 (在Ulrich Drepper自己的网站上也有PDF格式:https://www.akkadia.org/drepper/cpumemory...

217得票5回答
访问各种缓存和主内存的大致成本是多少?

有人能告诉我在Intel i7处理器上访问L1、L2和L3缓存以及主内存所需的大致时间(以纳秒为单位)吗? 虽然这不是一个专门的编程问题,但了解这些速度细节对于一些低延迟编程挑战是必要的。

179得票15回答
如何编写代码以最大限度地利用CPU缓存以提高性能?

这可能听起来像一个主观性的问题,但我所寻求的是具体的实例,您可能遇到了与此相关的内容。 如何使代码高效缓存(更多缓存命中,尽可能少的缓存未命中)?从数据缓存和程序缓存(指令缓存)的两个角度考虑,即在代码结构和数据结构方面应该注意哪些事项,以使其缓存高效。 是否有特定的数据结构必须使用/避免...

172得票5回答
写回与写直通缓存?

我的理解是两种方法的主要区别在于,在“写透”方法中,数据立即通过缓存写入主存储器,而在“写回”方法中,数据在“稍后的时间”写入。 虽然在“写透”中仍需要等待内存在“稍后的时间”,但是它有什么好处呢?

97得票4回答
L1和L2缓存的行大小

从这个论坛的一个之前的问题中,我了解到在大多数内存系统中,L1缓存是L2缓存的子集,这意味着从L2中删除的任何条目也会从L1中删除。 现在我的问题是如何确定L1缓存中与L2缓存中的条目相对应。 L2条目中仅存储标记信息。 基于此标记信息,如果我重新创建地址,则如果L1和L2缓存的行大小不同,...

96得票3回答
理解std::hardware_destructive_interference_size和std::hardware_constructive_interference_size

C++17新增了std::hardware_destructive_interference_size和std::hardware_constructive_interference_size。起初,我以为它只是一种获取L1缓存行大小的便携式方法,但这是一种过度简化。 问题: 这些常量与...

81得票5回答
什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

来自JCIP书籍第11章(性能和可扩展性)以及名为上下文切换的部分: 当一个新线程被切换进入时,它需要的数据不太可能在本地处理器缓存中,因此上下文切换会导致一连串的缓存未命中,从而使得线程在首次调度时运行略慢。 有人可以用易懂的方式解释缓存未命中(cache miss)的概念及其...

76得票4回答
在Linux中,测量C程序缓存命中/未命中和CPU时间的最简单工具是什么?

我正在用C语言编写一个小程序,想要测量它的性能。 我想要看到它在处理器上运行的时间以及它产生了多少高速缓存命中与未命中。同时了解有关上下文切换和内存使用情况的信息也很不错。 该程序执行时间不到1秒。 我喜欢/proc/[pid]/stat提供的信息,但我不知道如何在程序死亡/被杀死后查看...