Questions tagged «cpu-cache»


7
在2D数组上进行迭代时,为什么循环顺序会影响性能?
下面是两个几乎完全相同的程序,除了我切换了i和j变量。它们都以不同的时间运行。有人可以解释为什么会这样吗? 版本1 #include <stdio.h> #include <stdlib.h> main () { int i,j; static int x[4000][4000]; for (i = 0; i < 4000; i++) { for (j = 0; j < 4000; j++) { x[j][i] = i + j; } } } 版本2 #include <stdio.h> #include <stdlib.h> main () { int i,j; …


15
如何编写一个最能充分利用CPU缓存来提高性能的代码?
这听起来像是一个主观的问题,但是我正在寻找的是与之相关的特定实例。 如何使代码有效,缓存有效/缓存友好(缓存命中率越高,缓存未命中越少)?从两种角度来看,数据高速缓存和程序高速缓存(指令高速缓存),即代码中与数据结构和代码结构有关的东西,都应该使高速缓存有效。 是否存在必须使用/避免的任何特定数据结构,或者是否存在访问该结构的成员的特定方法等,以使代码缓存有效。 是否有任何程序构造(如果,用于,切换,中断,转到,...),代码流(用于if,如果位于for等内部……)在此问题上应该遵循/避免使用? 我期待听到与一般而言使高速缓存高效代码有关的个人经验。它可以是任何编程语言(C,C ++,Assembly等),任何硬件目标(ARM,Intel,PowerPC等),任何OS(Windows,Linux,Symbian等)。 。 多样性将有助于更好地深入了解它。

5
回写与直写式缓存?
我的理解是,这两种方法之间的主要区别在于,在“直写”方法中,数据会立即通过高速缓存写入主内存,而在“写回”中,数据是在“较后的时间”内写入的。 我们仍然需要在“延迟时间内”等待内存,因此“直写”的好处是什么?

3
了解std :: hardware_destructive_interference_size和std :: hardware_constructive_interference_size
添加了C ++ 17std::hardware_destructive_interference_size和std::hardware_constructive_interference_size。首先,我认为这只是获得L1缓存行大小的一种可移植的方法,但这过于简单了。 问题: 这些常量与L1缓存行大小有何关系? 有没有一个很好的例子来说明他们的用例? 两者都被定义static constexpr。如果生成二进制文件并在具有不同缓存行大小的其他计算机上执行二进制文件,这不是问题吗?当您不确定代码将在哪台计算机上运行时,如何在这种情况下防止错误共享?

4
L1和L2缓存的行大小
从该论坛上的上一个问题中,我了解到,在大多数内存系统中,L1缓存是L2缓存的子集,这意味着从L2删除的所有条目也将从L1删除。 所以现在我的问题是我如何确定L1缓存中对应于L2缓存中的条目的条目。L2条目中存储的唯一信息是标签信息。基于此标签信息,如果L1和L2缓存的行大小不同,则如果我重新创建addr,它可能会跨越L1缓存中的多行。 该体系结构是否真的要对两条线进行刷新,还是只是将L1和L2高速缓存保持为相同的线大小? 我知道这是一项政策决定,但我想知道常用的技术。

5
什么是缓存命中和缓存未命中?为什么上下文切换会导致高速缓存未命中?
从第11章(性能和可伸缩性)以及JCIP书籍中名为上下文切换的部分开始: 切入新线程时,所需的数据不太可能位于本地处理器高速缓存中,因此上下文切换会导致大量高速缓存未命中,因此在首次调度线程时,它们的运行速度会稍微慢一些。 有人能以一种易于理解的方式解释高速缓存未命中的概念及其可能的对立面(高速缓存命中)吗? 为什么上下文切换会导致很多缓存丢失?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.