标签: cpu-cache

GPU(例如 GTX 1080)中的寄存器文件大小为何大于 L2 缓存大小?

看着这个事实,我开始想知道寄存器在 GPU 中是如何工作的?在知道这一点之前,我认为在分层内存阶梯之上越来越高,大小不断减小(这是直观的(延迟减少,大小减小))。GPU 中寄存器的用途是什么,为什么它们的大小大于 L2/L1 缓存?谢谢。

memory-management gpu cpu-registers cpu-cache

1
推荐指数
1
解决办法
2680
查看次数

Skylake 和较新的环形巴士

在 Intel Skylake 及更新版本中,每个核心的内存子系统可以直接参与环形总线流量吗?这个框图(以及随附的信息)似乎表明了这一点。

如果是这样,子系统的哪一部分被连接?

  • L2?
  • 行填充缓冲区以方便 NT 存储?

x86 intel cpu-architecture cpu-cache

1
推荐指数
1
解决办法
1138
查看次数

您可以使用程序集直接访问缓存吗?

谈到效率,缓存是核心。

我知道缓存通常会自动发生。

但是,我想自己控制缓存的使用,因为我认为我可以比一些不知道确切程序的启发式方法做得更好。

因此,我需要汇编指令来直接移入或移出高速缓存单元。

喜欢:

movL1 address content
Run Code Online (Sandbox Code Playgroud)

我知道有一些指令会给出“缓存系统”提示,但我不确定这是否足够,因为这些提示可能会被忽略,或者它们可能不足以表达任何可以通过这种移入/移出缓存来表达的内容命令。

是否有任何允许完全缓存控制的汇编程序?

旁注:为什么我想改进缓存:

考虑一个具有 1 个寄存器和一个包含 2 个单元的缓存的假设 CPU。

考虑以下两个程序:

(其中 x,y,z,a 是存储单元)

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move z to x"
"move y to x"
"END"

"START"
"move 1 to x"
"move 2 to y"
"move 3 to z"
"move 4 to a"
"move a to x"
"move y to x"
"END"
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您将寄存器和缓存用于 x,y,z(a 只写入一次)在第二种情况下,您将寄存器和缓存用于 a,x,y (z只写入一次)

如果 CPU …

performance assembly caching cpu-architecture cpu-cache

1
推荐指数
2
解决办法
1310
查看次数

是否需要内存屏障是因为CPU乱序执行还是因为缓存一致性问题?

我想知道为什么需要内存屏障,我已经阅读了一些关于这个主题的文章。
有人说这是因为cpu乱序执行,而另一些人说这是因为缓存一致性问题,存储缓冲区和无效队列导致。
那么,需要内存屏障的真正原因是什么?cpu乱序执行或者缓存一致性问题?或两者?cpu乱序执行和缓存一致性有关系吗?x86和arm有什么区别?

x86 arm cpu-architecture memory-barriers cpu-cache

1
推荐指数
1
解决办法
888
查看次数

Volatile 关键字和 CPU 缓存一致性协议

CPU 已经通过一些协议(如 MESI)保证缓存一致性。为什么我们还需要volatile在某些语言(如java)中保持多线程之间的可见性。

可能的原因是这些协议在启动时未启用,并且必须由某些指令(例如LOCK.

如果确实如此,为什么CPU在启动时不启用该协议?

java cpu caching volatile cpu-cache

1
推荐指数
1
解决办法
1669
查看次数

L2缓存

2*512 KB L2缓存和1 MB L2缓存之间有什么区别?

hardware cpu-cache

0
推荐指数
1
解决办法
480
查看次数

如何检查对象是否在CPU缓存中?

有没有办法在java中检查特定对象是否在CPU缓存中?有没有办法测试读/写其中一个字段是否会导致缓存未命中?

我以前编写过java程序,但不是复杂程序,现在我必须在java中做一些学术研究.

如果这是不可能的,有没有一种通用的方法来模拟这种事情?这在低级编程中是否可行,例如C?

java caching cache-control low-level cpu-cache

0
推荐指数
1
解决办法
430
查看次数

经常执行的表达式是否会缓存其结果?

for (int i = 0; i < foo + bar; ++i)
{
      // do something
}
Run Code Online (Sandbox Code Playgroud)

假设这foo + bar是一个巨大的数字,并且它的值在循环迭代期间不会改变.(也就是说,循环的身体不会改变foobar)

foo + barget 的值是否缓存在某个地方?或者每次都会重新评估?

C/C++会不会处理它与Java等高级语言的不同?

c++ java caching compiler-optimization cpu-cache

0
推荐指数
2
解决办法
91
查看次数

缓存未命中 L1 &lt; L2 &lt; L3

我有一个特定的软件,它表现出的行为是未命中率如下所示:

L1-dcache-misses < L2-misses< L3-misses
Run Code Online (Sandbox Code Playgroud)

怎么会这样呢?

未命中率是通过perf查看重新填充计数器除以每个缓存的访问总数来计算的。

caching cpu-cache perf

0
推荐指数
1
解决办法
1658
查看次数

L2 行填充是否总是在查找时触发?

L2是非排除性的,这是一个有据可查的事实,这意味着 L2 不必包含 L1DCache 拥有的所有行。

\n\n

L1d miss (Read, RFO) 是否也错过了 L2 填充 L1d 行而不填充相应的 L2 行?英特尔 mans 中有对此有任何解释吗?更新:有。Intel Vol.3,有关内存类型的部分。

\n\n

或者用另一种方式重新表述这个问题:缺少 L2 的查找是否总是会导致其行被填充?

\n\n

经过一番挖掘后,我自己发现了答案。它是回写内存类型的属性,而不是缓存级别

\n\n
\n

回写 (WB) \xe2\x80\x94 对系统内存的写入和读取均被缓存。读取来自缓存命中时的缓存行;读取未命中导致\n 缓存已满。

\n
\n

x86 assembly x86-64 cpu-architecture cpu-cache

0
推荐指数
1
解决办法
162
查看次数

L1-Dcache是​​终极数据缓存吗,DSB也是gem5可以模拟的缓存吗?

  1. 我想知道 L1-Dcache 是不是数据来自的终极缓存。因为我知道 i-cache,所以有一个更接近 CPU 的 DSB,可以看作是 L0-icache。

  2. 另外,我对哪些硬件更改会影响 DSB 的性能感兴趣?我的意思是缓存,有诸如缓存大小、缓存关联性之类的东西。但是,DSB 是否也只是会受这些因素影响的缓存?

  3. 如果是,我可以使用 gem5.dll 模拟结果吗?我知道使用 gem5,我可以配置 L1 指令缓存并观察 L1 指令缓存性能。如何在 gem 上为 DSB 做同样的事情?

cpu intel cpu-architecture cpu-cache gem5

0
推荐指数
1
解决办法
95
查看次数

cortex-A53 中 L1 和 L2 缓存的写入策略是什么?

Cortex-A53 处理器有 1 到 4 个内核,每个内核都有一个 L1 内存系统和一个共享的 L2 缓存。

arm cpu-architecture cpu-cache cortex-a

-4
推荐指数
1
解决办法
1002
查看次数