【问题标题】:Can I store data in the processor cache directly? [closed]我可以将数据直接存储在处理器缓存中吗? [关闭]
【发布时间】:2011-12-13 17:26:21
【问题描述】:

我想知道是否有一种方法可以将数据直接存储在处理器的数据缓存中,而不是存储在主内存中。我知道缓存的工作方式是存储最常用的数据,但是,有一个汇编指令来告诉处理器是有意义的,这将是一个经常使用的数据。 我使用的是 IA-32 汇编语言。

谢谢!

【问题讨论】:

标签: caching memory assembly


【解决方案1】:

根据架构,有预取提示可以将数据直接移动到缓存中。对于 ia32,这是 prefetch 指令,可以将数据移动到 L1、L2。

另一方面,有一些指令告诉处理器避免使用缓存,例如moventdq,它直接将数据从内存移入/移入内存。

编辑:此外,还有为特定类型的缓存算法设置内存范围的说明,例如回写、直写、写入组合或不可缓存。见http://en.wikipedia.org/wiki/Memory_type_range_register

【讨论】:

  • 我不确定 IA-32 是否包含 SSE。而且据我所知,不能保证在预取指令之后将数据存储到缓存中。但我可能是错的。
  • SSE 早于 x86_64 存在。早在 1999 年的 Pentium III 是第一个包含 SSE 的处理器,prefetch 指令属于该处理器,这是一个纯 32 位处理器。是的,prefetch 只是一个提示,但这就是被问到的:“有一个汇编指令来告诉处理器是有意义的,这将是一个经常使用的数据。”这就是预取的用途。
  • prefetch 实际上是一条 MMX 指令。所以它可以追溯到 1995 年。
【解决方案2】:

不,您不能直接在程序集级别访问缓存。因为缓存在处理器中是“隐藏的”(L1 和 L2),可能根本没有缓存。

【讨论】:

  • 缓存(大部分)对软件是透明的,因此没有单独访问缓存的指令。那是因为每个标准读取或写入指令都直接访问缓存。另一种情况,绕过缓存直接访问内存需要特殊指令,但确实存在。
猜你喜欢
  • 2021-04-27
  • 2020-10-27
  • 2013-08-31
  • 2011-06-28
  • 2021-08-03
  • 2017-05-27
  • 2021-09-21
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多