问题标签 [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 投票
1 回答
2671 浏览

x86 - 使用 in/out 指令的内存映射 i/o 操作(在英特尔处理器中)......仍然被缓存吗?

如果映射 i/o 的地址范围被键入为回写 (WB),即使我使用 in/out 指令,内存映射 i/o 操作(在英特尔处理器中)是否仍会被缓存?

编辑:这个问题解决了。我发现 MMIO 是可缓存的,并且 MMIO 操作可以根据其内存类型重新排序。这就是为什么英特尔建议使用 MTRR 将 MMIO 设置为 UC(不可缓存)的原因。我在英特尔软件开发人员手册 v3A 上找到了它,它也可能适用于 amd 处理器...

0 投票
1 回答
734 浏览

performance - 缓存相关的性能优化技术?

有很多关于缓存相关性能问题的讨论。我对他们有几个问题:

  1. 可能最流行的问题是缓存局部性错误的缓存共享。还有其他人吗?
  2. 有什么好的概述吗?
  3. 有没有经过验证的技术可以对抗它们?
  4. 真正存在问题的应用程序有哪些共同特征?计算密集型领域(数学/图像处理等)?高度并行的应用程序?
0 投票
3 回答
23157 浏览

c - 了解 CPU 缓存和缓存线

我试图了解 CPU 缓存是如何运行的。假设我们有这个配置(例如)。

  • 缓存大小 1024 字节
  • 高速缓存行 32 字节
  • 1024/32 = 总共 32 条缓存线。
  • 单个缓存行可以存储 32/4 = 8 个整数。

1)根据这些配置,标签长度应为 32-5=27 位,索引大小为 5 位(2^5 = 缓存行中每个字节的 32 个地址)。

如果总缓存大小为 1024,并且有 32 个缓存行,那么标签+索引存储在哪里?(还有另外4*32 = 128字节。)是不是表示缓存的实际大小是1024+128 = 1152?

2) 如果在这个例子中缓存线是 32 字节,这意味着每当 CPU 需要从 RAM 中获取新字节时,32 字节就会被复制到缓存中。我是否正确假设所请求字节的缓存行位置将由其地址确定?

这就是我的意思:如果 CPU 请求的字节位于[FF FF 00 08],那么可用的缓存行将被从[FF FF 00 00]到的字节填充[FF FF 00 1F]。我们请求的单个字节将位于 position [08]

3)如果前面的语句是正确的,这是否意味着用于索引的 5 位在技术上是不需要的,因为所有 32 字节都在缓存行中?

如果我有什么问题,请告诉我。谢谢

0 投票
4 回答
1140 浏览

optimization - 机器码对齐

我正在尝试了解机器代码对齐的原理。我有一个可以在运行时生成机器代码的汇编器实现。我在每个分支目标上使用 16 字节对齐,但看起来这不是最佳选择,因为我注意到如果我删除对齐,有时相同的代码会运行得更快。我认为这与缓存线宽度有关,因此某些命令被缓存线切断,因此 CPU 会遇到停顿。因此,如果在一个地方插入了一些对齐字节,它会将指令移动到某个地方,进一步通过缓存边界线......

我希望实现一个自动对齐程序,它可以将代码作为一个整体处理并根据CPU的规范(缓存线宽,32/64位等)插入对齐...

有人可以提供有关此程序的一些提示吗?例如,目标 CPU 可以是 Intel Core i7 CPU 64 位平台。

谢谢你。

0 投票
1 回答
2327 浏览

android - 是否可以在 Android 中读取 CPU 缓存命中/未命中率?

是否可以在 Android 中读取 CPU 缓存命中/未命中率?

0 投票
2 回答
629 浏览

caching - 如何查找 L1 和 L2 缓存?

最近我在阅读一些关于 cpu 缓存的资料。我想知道 cpu 如何查找 L1 和 L2 缓存以及 cpu 缓存中的数据以什么格式存储?

我认为缓存的线性扫描效率低下,有没有更好的解决方案?

谢谢。

0 投票
2 回答
3424 浏览

c++ - 查找缓存块大小

如何以编程方式(使用 C++)或其他方式在 Ubuntu 中找到缓存块大小?

0 投票
1 回答
1031 浏览

amazon-ec2 - 虚拟化环境中的 CPU 亲和性

在 Amazon EC2 等虚拟化环境中尝试在多核处理器上有效使用 L2 缓存时,CPU 亲和性任务集是否适用?

0 投票
1 回答
3544 浏览

android - 如何在 Android (ARM) 中读取 L2 缓存命中/未命中率?

我找到了一种使用http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4237.html读取 L1(数据和指令)缓存的方法。我也想阅读 L2 性能计数器。有没有人知道如何使用 ARM 程序集或更高级别(如 Java)来测量 L2 缓存命中率?

0 投票
2 回答
15229 浏览

caching - 别名的定义/含义?(CPU 缓存架构)

我对CPU-cache 和 Physical address 之间的“别名”的含义有些困惑。首先,我在 Wikipedia 上找到了它的定义:

然而,VIVT存在别名问题,其中几个不同的虚拟地址可能引用同一个物理地址。另一个问题是同音异义词,其中相同的虚拟地址映射到几个不同的物理地址。

但过了一会儿,我在 DAC'05 的演示文稿(ppt)上看到了不同的定义:“具有虚拟内存的嵌入式处理器的节能物理标记缓存”

缓存别名和同义词:

别名:来自不同上下文的相同虚拟地址映射到不同的物理地址同义词:不同的虚拟地址映射到相同的物理地址(数据共享)

由于我不是母语人士,我不知道哪个是正确的,尽管我觉得 Wiki 的定义是正确的。

编辑:

CPU缓存中的“aliasing”概念通常是“同义词”,相反是“同义词”。在更通用的层面上,“混叠”是“混乱”或“混乱”或类似的东西。所以在我看来,“混叠”恰好意味着 (X->Y) 的映射是“非双射的”,其中

“X” = 已缓存的物理地址单元的子集。(每个元素是一行字节)

“Y” = 有效缓存行的集合。(元素a也是“线”)