问题标签 [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.
performance - L1 缓存命中的周期/成本与 x86 上的注册?
我记得在我的架构类中假设 L1 缓存命中是 1 个周期(即与寄存器访问时间相同),但在现代 x86 处理器上真的是这样吗?
L1 缓存命中需要多少个周期?它与注册访问相比如何?
cpu-cache - 高速缓存内存混乱
在 UC 模式下运行时,CPU Cache 是否仍可用于程序员的内存使用?还是因为程序员无法寻址高速缓存而这不可能?我错误地认为 MTRR 可以用来寻址 CPU Cache 内存?
linux - 通过 /proc/mtrr 禁用缓存
当我发出这个命令时
/proc/mtrr 没有改变,而我希望它添加一个新条目。
它适用于以下命令:
它添加了这个条目:
所以我假设 size 参数在某些方面受到限制。有这样的限制吗?是否可以将任意内存区域设置为“不可缓存”?
我的原始(启动后)/proc/mtrr 如下所示:
我在 Pentium M 上使用 Linux 2.6.32-41-generic #89-Ubuntu SMP。参考: http ://www.mjmwired.net/kernel/Documentation/mtrr.txt
背景:对于计时实验,我想为某个进程的内存区域禁用 cpu 缓存。
c - movndq 有效吗?
我的任务是计算 RAM 读/写速度。我使用 asm 插入来避免编译器优化。为了测量时间,我使用 TSC 和 CPU 频率。为了移动数据,我使用不使用缓存层次结构的 asm 指令 MOVNTDQ。
问题在于结果。数据速率(根据数据表)为 800 Mbps,我通过测试得到 > 2000 Mbps 的写入速度。
我使用的 RAM 数据表 - http://www.alldatasheet.com/datasheet-pdf/pdf/308537/ELPIDA/EBE11UE6ACUA-8G-E.html
源代码(为 Win patform 编写):https ://bitbucket.org/closed_eyes/ram_speed_for_win/downloads/memory_test.cpp
caching - Nehalem l2 缓存中的银行数量
当我偶然发现仙人掌界面“银行数量”中的一个术语时,我正在研究不同缓存配置的访问时间。
存储体数量是高速缓存中交错模块的数量,它增加了高速缓存的带宽和并行访问的数量。
在这种情况下,我想找出 Nehalem 架构缓存中的银行数量。我用谷歌搜索了这个东西,但没有找到任何有用的东西。
我的理由是:
- L1 数据和指令高速缓存必须有单个 bank。访问粒度在这里是一个词。
- L2 缓存支持 L1 数据和指令缓存的未命中。因此它必须支持 2 个银行。
- L3 高速缓存通常在系统中的所有内核之间共享,因此它必须具有大量 (32) 个存储体。
我的直觉正确吗??另外,银行的数量是否会改变结构化数据/程序的方式(理想情况下不应该但仍然......)?
c - x86 指令缓存如何同步?
我喜欢例子,所以我用c写了一些自修改代码......
...显然有效:
但老实说,我根本没想到它会起作用。我希望包含的指令c[2] = 0
在第一次调用时被缓存c
,之后所有连续调用c
都会忽略对的重复更改c
(除非我以某种方式明确地使缓存无效)。幸运的是,我的 cpu 似乎比这更聪明。
c
我猜每当指令指针进行较大的跳转(如上面对 mmapped 内存的调用)时,cpu 都会将 RAM(假设甚至驻留在 RAM 中)与指令缓存进行比较,并在缓存不匹配时使缓存无效(全部?),但我希望能得到更准确的信息。特别是,我想知道这种行为是否可以被认为是可预测的(除非硬件和操作系统有任何差异),并且可以依赖?
(我可能应该参考英特尔手册,但那东西长达数千页,我往往会迷失其中......)
java - 如何检查对象是否在 CPU 缓存中?
java中有没有办法检查特定对象是否在CPU缓存中?有没有办法测试读取/写入其中一个字段是否会导致缓存未命中?
过去我写过java程序,但不复杂,现在我必须在java方面做一些学术研究。
如果这是不可能的,是否有一种通用的方法来模拟这种事情?这在诸如 C 之类的低级编程中是否可能?
cuda - CUDA 共享内存是否也被缓存
在我的 CUDA 应用程序中,我将数据从设备内存复制到共享内存。该数据是否也缓存在 L1 中?
cuda - GPU 上的 L1 缓存存储
具有计算能力 2.x 的 GPU 将其片上内存组织成 32 个存储体。片上存储器可用于 2 种配置:48 KB 共享和 16 KB L1,反之亦然。对于 48 KB 共享和 16 KB L1 配置,其中存储有 L1 高速缓存的存储体。据我了解共享内存存储,当写入它时,连续的 32 位字存储在连续的银行中。这让我想到,对于 48 KB 共享和 16 KB L1 配置,每个内存库将存储 384 个 32 位字用于共享内存和 128 个 32 位字用于 L1 高速缓存。这个对吗?
cuda - 跨 CUDA 内核的 L1 缓存持久性
我了解 GPU 上的共享内存不会在不同的内核中持续存在。但是,L1 缓存是否会在不同的内核调用中持续存在?