14得票1回答
生成CPU缓存失效时的性能表现

我正试图学习在.NET世界中CPU缓存性能。具体来说,我正在阅读Igor Ostovsky的有关处理器缓存效应的文章。 我已经完成了他文章中的前三个示例,并记录了结果,这些结果与他的结果大相径庭。我认为我一定做错了什么,因为我的机器性能显示出与他在文章中展示的几乎完全相反的结果。我没有看到我...

14得票2回答
为什么没有与缓存行大小相同宽度的数据总线?

当缓存未命中时,CPU会从主内存中将整个缓存行(在x86_64中通常为64字节)加载到缓存层次结构中。 这是通过数据总线完成的,现代64位系统上的数据总线仅为8字节宽(因为字长为8字节)。 编辑:在这种情况下,“数据总线”指的是CPU芯片和DRAM模块之间的总线。这个数据总线宽度不一定与字...

14得票2回答
为CPU缓存行效率优化Java对象

我正在编写一个库,其中: 需要在各种不同的平台 / Java实现上运行(通常情况下,在Windows或Linux上使用OpenJDK或Oracle Java在Intel 64位机器上运行) 优先考虑实现高性能,甚至关心对象访问中CPU缓存行效率 在某些区域,将遍历/处理相当 大的小对象 图...

14得票1回答
Cache-as-Ram(无填充模式)可执行代码

我已经多次阅读了有关缓存作为RAM模式(无填充模式)的内容,想知道第一,是否可以编写并跳转到可执行代码,如果可以,可执行代码是否受限于一级缓存的一半(因为缓存实际上只是SRAM)。

14得票2回答
如何解释使用Xeon处理器时,一个包含顺序复制和分散存储的循环表现不佳?

在一些Intel Xeon处理器上运行以下c++代码时,我遇到了一个奇特的性能问题: // array_a contains permutation of [0, n - 1] // array_b and inverse are initialized arrays for (int i ...

14得票2回答
缓存中“块大小”的概念

我刚开始学习直接映射和集合关联高速缓存的概念,我有一些非常基本的疑问。假设地址长度为32位,我有一个32KB高速缓存,块大小为64字节,具有512个框架,实际上在“块”中存储了多少数据?如果我有一条指令从内存位置加载值,并且该值是16位整数,那么64字节块中现在只存储16位(2字节)整数值。那...

13得票1回答
为什么x86架构中存在CLFLUSH指令?

我最近了解到行攻击。为了执行这种攻击,程序员需要刷新CPU的完整缓存层次结构,以针对特定数量的地址。 我的问题是:为什么在x86中需要使用CLFLUSH?如果所有的L*缓存都是透明的(即不需要显式的缓存失效),那么有什么理由使用这个指令呢?此外:CPU不是可以自由地推测内存访问模式,从而忽略...

13得票3回答
什么具体标志着x86缓存行为脏 - 任何写操作,还是需要显式更改?

这个问题特别针对现代x86-64高速缓存一致性架构 - 我知道其它CPU上的答案可能会不同。 如果我写入内存,MESI协议要求先将缓存行读入缓存,然后在缓存中进行修改(将值写入缓存行,然后标记该行为脏)。在旧的写通微体系结构中,这将触发缓存行被刷新,在写回中,缓存行的刷新可以延迟一段时间,并且...

13得票2回答
Aliasing的定义/含义是什么?(CPU缓存架构)

我对CPU缓存和物理地址之间的“别名(Aliasing)”的含义有点困惑。 首先我在维基百科上找到了它的定义: 但是,VIVT存在别名问题,即几个不同的虚拟地址可能指向同一个物理地址。另一个问题是同义词,即相同的虚拟地址映射到几个不同的物理地址。 但是过了一会儿我在DAC'05(第43届设...

13得票3回答
仅针对一个变量禁用CUDA的L1缓存

在CUDA 2.0设备上,有没有办法只针对一个特定的变量禁用L1缓存?虽然我知道可以通过在编译时添加标志-Xptxas -dlcm=cg到nvcc来禁用所有内存操作的L1缓存,但是我想要在特定全局变量的内存读取中禁用缓存,以便其余内存读取仍可以通过L1缓存进行。 根据我在网上搜索的内容,可能...