问题标签 [cpu-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3345 浏览

linux - 有没有办法检查处理器缓存最近是否被刷新?

在 i386 linux 上。如果可能的话,最好在 c/(c/posix std libs)/proc 中。如果没有,是否有任何组件或第三方库可以做到这一点?

编辑:我正在尝试开发测试内核模块是否清除缓存行或整个处理器(使用 wbinvd())。程序以 root 身份运行,但如果可能,我更愿意留在用户空间。

0 投票
3 回答
2348 浏览

c - 测试缓存失效和刷新

因此,在对 Linux 内核 ( ) 中的基本 L1 和 L2 缓存相关例程进行编程之后arch/arm/mm/cache-X.S,例如特定于 ARM11 处理器,是否有可用的测试实用程序/程序来测试缓存是否正常工作,从而使失效、刷新正常发生。我们如何确保它而不是仅仅依靠我们自己的程序。

0 投票
1 回答
3045 浏览

powerpc - 如何使 PowerPC PQ-III e500 上特定内存范围的 L1 数据缓存失效?

DMA 任务会定期更新一个特殊的内存块。当另一个Task频繁尝试在这个block中查找数据时,会出现关于L1数据缓存奇偶校验的MCE(Machine Check Exception)。我可以完全或仅在 DMA 更新后使此内存块的 L1 数据缓存无效吗?

libogc 中有一个有趣的 API,例如:

我不熟悉 ASM,也不熟悉 PowerPC 上的 ASM。人们会推荐有关此操作的链接或描述吗?

0 投票
1 回答
3887 浏览

c# - 生成 CPU 缓存未命中时的性能

我正在尝试了解 .NET 世界中的 CPU 缓存性能。具体来说,我正在阅读 Igor Ostovsky关于 Processor Cache Effects 的文章

我已经浏览了他文章中的前三个示例,并记录了与他大不相同的结果。我想我一定是做错了什么,因为我机器上的性能显示的结果与他在文章中显示的结果几乎完全相反。我没有看到我所期望的缓存未命中的巨大影响。

我究竟做错了什么?(错误的代码、编译器设置等)

以下是我机器上的性能结果:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

如果有帮助,我机器上的处理器是 Intel Core i7-2630QM。以下是有关我的处理器缓存的信息:

在此处输入图像描述

我已经在 x64 发布模式下编译。

下面是我的源代码:

0 投票
3 回答
86 浏览

c++ - 处理设备时,缓存是否有限制?

在我的计算机架构课上,教授向我们提出了以下问题:

我不知道为什么会有限制或它们可能是什么。在谷歌上搜索后,我似乎无法找到准确的答案。有人可以解释为什么存在限制以及这些限制可能是什么,或者指出一个可能有助于我回答问题的方向吗?

0 投票
3 回答
769 浏览

caching - 缓存如何被打败?

我这周的作业有这个问题,我不明白缓存是如何被打败的,或者我如何用汇编程序来展示它。有人能指出我正确的方向吗?

通过汇编程序示例展示如何击败两种不同的缓存(关联和直接映射)。解释为什么会发生这种情况以及如何解决。用于破坏缓存的相同程序是否相同?

注意:这是家庭作业。不要只为我回答问题,它不会帮助我理解材料。

0 投票
4 回答
583 浏览

c++ - 把它放在堆栈上还是放在堆上?

恰好函数使用本地缓冲区来准备一些大小有限的数据块并将其传递给另一个函数,就像这样:

但是,根据 的值MAX_SIZE,您可能会担心会吃掉太多的堆栈,并用类似于以下示例的代码替换代码(但希望更关心内存管理):

在一般情况下,这两个函数的行为应该相同。但是,在第一个示例中,如果MAX_SIZE太大,我们更有可能达到堆栈限制。如果您知道函数的使用位置,则使用较大的值可能会很好,但有时您不知道。

在第二个示例中,我们正在处理额外的间接性,缓冲区更容易出现 CPU 缓存未命中,如果foo位于低延迟关键路径上,并且我们预计在大多数情况下准备缓冲区的成本非常低,则可能会出现这种情况.

您认为多大尺寸不能堆叠?将大块数据放在堆栈上但只使用其中的一小部分是否有任何惩罚?

编辑:write_fancy _things只是说*我正在将一些数据写入缓冲区的同义词,介于 1 和 MAX_SIZE 字节之间*。您可以将第二个foo示例视为类方法,将静态指针视为在构造函数中分配的类成员。我可能只是过度简化了事情,但不想引入比需要更多的复杂性并专注于堆栈问题。

0 投票
2 回答
10648 浏览

c - WBIVD 指令用法

我正在尝试使用 linux 上的 WBINV 指令来清除处理器的 L1 缓存。

以下程序可以编译,但是当我尝试运行它时会产生分段错误。

int main() {asm ("wbinvd"); return 1;}

我正在使用 gcc 4.4.3 并在我的 x86 机器上运行 Linux 内核 2.6.32-33。

处理器信息:Intel(R) Core(TM)2 Duo CPU T5270 @ 1.40GHz

我构建的程序如下:

$ gcc

$ ./a.out

分段故障

有人可以告诉我我做错了什么吗?我如何让它运行?

PS:我正在运行一些性能测试,并希望确保处理器缓存的先前内容不会影响结果。

0 投票
2 回答
116 浏览

algorithm - 存储在缓存中的算法应该有多小?(需要线索)

我正在做一个国际象棋移动生成器,我有机会用许多“if 语句”替换“while/for 循环”,我想知道添加这 3000 行是否会像理论上那样提高性能,或者只是让算法也一样大要存储在cpu缓存中

我知道这取决于缓存大小(我有 AMD Phenom 8650 Triple Core 2.3),但我真的没有 IDEA

0 投票
1 回答
578 浏览

memory - 缓存一致性协议 AMD Opteron 芯片 (MOESI?)

如果我可以从一个例子开始。

假设我们有一个 4 个插槽的系统,其中每个插槽有 4 个内核,每个插槽有 2GB RAM ccNUMA(高速缓存相干非统一内存访问)类型的内存。

假设在每个套接字上运行的 4 个进程都在 P2 的 RAM 中分配了一些共享内存区域,表示为 SHM。这意味着对该区域的任何加载/存储都会导致查找 P2 的目录,对吗?如果是这样,那么......当查找发生时,就延迟而言,这是否等同于访问 RAM?这个目录在物理上驻留在哪里?(见下文)

举一个更具体的例子:假设 P2 在 SHM 上执行 LOAD,并且该数据被带入 P2 的 L3 高速缓存,并带有标记“(O)wner”。此外,假设 P4 在同一个 SHM 上执行 LOAD。这将导致 P4 对 P2 的目录进行查找,并且由于数据被标记为由 P2 拥有,我的问题是:

P4 是从 P2 的 RAM 中获取 SHM,还是总是从 P2 的 L3 缓存中获取数据?

如果它总是从 L3 缓存中获取数据,那么直接从 P2 的 RAM 中获取数据不是更快吗?既然它已经必须在 P2 的目录中进行查找?我的理解是,该目录实际上位于 RAM 之上。

抱歉,如果我严重误解了这里发生的事情,但我希望有人能帮助澄清这一点。

此外,是否有任何关于此类目录查找速度的数据?在数据检索方面,是否有关于此类查找的平均延迟的文档?L3 读命中、读未命中、目录查找有多少个周期?等等