18得票3回答
实际CPU缓存中使用了哪些缓存失效算法?

我要谈论的话题是缓存、映射和缓存未命中,以及当所有块已满时缓存块被替换的顺序。 有最近最少使用算法、先进先出算法、最不经常使用算法和随机替换等算法... 但实际的CPU缓存使用哪些算法呢?或者你可以使用全部算法,...操作系统会决定使用哪种最佳算法吗? 编辑:即使我选择了一个答案,任...

18得票3回答
缓存如何被攻破?

我这周的作业中有这样一个问题,我不理解如何攻破缓存,或者说如何用汇编程序来演示。有人可以指导我一下吗? 请用汇编程序的例子展示两种不同的缓存(联想式缓存和直接映射缓存)是如何被攻破的,解释其原因以及如何修复。攻破这些缓存所使用的程序是否相同? 注意:这是一道作业题,请勿直接为我回答问题,那...

18得票1回答
在L1和L2预取数据

在Agner Fog的手册优化C++软件第9.10节“大型数据结构中的高速缓存争用”中,他描述了一个问题:当矩阵宽度等于所谓的关键步幅时,转置矩阵的问题。在他的测试中,当宽度等于关键步幅时,L1中矩阵的成本比正常情况高40%。如果矩阵更大,只适合L2,则成本为600%!这在他的文本中的表格9....

18得票2回答
现代CPU每个时钟周期的缓存带宽

现代CPU缓存访问的速度是多少?Intel P4、Core2、Corei7和AMD每个处理器时钟周期可以从内存读取或写入多少字节? 请回答理论上的数字(ld/sd单元的宽度及其在uOPs/时钟周期中的吞吐量),以及实际数字(甚至包括memcpy速度测试或STREAM基准测试)。 PS这是与...

18得票2回答
CLFLUSH如何处理尚未在缓存中的地址?

我们尝试使用Intel CLFLUSH指令在Linux用户空间刷新进程的缓存内容。 我们创建了一个非常简单的C程序,首先访问一个大数组,然后调用CLFLUSH来刷新整个数组的虚拟地址空间。我们测量CLFLUSH刷新整个数组所需的延迟时间。程序中数组的大小是一个输入参数,我们将输入从1MB变化...

18得票2回答
直接映射缓存与全相联缓存的区别

我不太明白这两个缓存之间的主要区别,想知道是否有人可以帮助解释一下? 我知道在全关联缓存中,一个地址可以存储在标记阵列的任何一行,而直接映射缓存每行只能有一个地址。 但那就是我所知道的全部内容。

17得票3回答
CPU缓存临界步长测试根据访问类型给出意外结果。

受最近在SO上提出的问题和给出的答案的启发,这让我感到非常无知,我决定花些时间学习更多关于CPU缓存的知识,并编写了一个小程序来验证我是否全都理解正确(很可能不是,我很担心)。首先,我会记录下我期望的假设,如果这些假设是错误的,您可以在此处阻止我。根据我所读的,一般而言: An n-way ...

17得票4回答
Java内存模型(JSR-133)是否意味着进入监视器会清空CPU数据缓存?

Java内存模型中有一个问题困扰着我(如果我正确理解了所有内容的话)。如果存在两个线程A和B,除非A和B都在相同的监视器上同步,否则不能保证B将看到A写入的值。 对于任何保证线程间缓存一致性的系统架构,这没有问题。但是,如果架构不支持硬件缓存一致性,这基本上意味着每当一个线程进入监视器时,必...

17得票2回答
非本地指针会影响缓存性能吗?

据我所知,硬件预取器至少可以检测和获取内存中的常量步长。此外,它可以监视数据访问模式,尽管我不太清楚这是什么意思。这让我想知道,硬件预取器是否基于存储在内存中的实际数据或者仅基于程序表现来做出决策? 我之所以问这个问题,是因为我有时会使用“非本机”指针作为指针。一个简单的例子是预分配的一组东...

17得票3回答
如何从用户模式代码中通用地检测缓存行关联性?

我正在为valgrind中的cachegrind/callgrind工具组建一个小补丁,该补丁将使用完全通用的代码自动检测CPU指令和缓存配置(目前只有x86/x64自动配置,其他架构不提供CPUID类型配置给非特权代码)。此代码需要完全在非特权上下文中执行,即纯用户模式代码。它还需要在非常不...