【问题标题】:How to force keeping some memory buffers in cache?如何强制在缓存中保留一些内存缓冲区?
【发布时间】:2013-11-19 08:41:09
【问题描述】:

我有一个由两部分组成的程序:

  1. 图形编程语言的虚拟机,
  2. 图像处理例程。

问题在于,只要没有处理大图像,虚拟机就可以运行得足够快。处理大图后,虚拟机性能下降约5倍。我猜这是因为当大图像出现时,属于虚拟机的对象的内存缓冲区会从缓存中删除。通常,处理器会为代码保留一个单独的缓存,为数据保留一个单独的缓存,但在解释我的程序时不会。

问题: 有什么方法可以使解释代码相同,即以某种方式将内存缓冲区标记为缓存内存的高优先级,或者以某种方式分配一个保证保留在缓存中的内存缓冲区?

让我补充一点,虽然图像处理比解释程序慢得多,但在某些情况下,第二部分变得至关重要 - 例如,对图像上检测到的一组点进行后处理 - 这些是简单的算术运算,那么在虚拟机上太慢了。

【问题讨论】:

    标签: c++ performance caching memory-management


    【解决方案1】:

    没有精灵尘埃。

    您需要非常仔细地以缓存友好的方式编写代码。看看CPU Caches and Why You Care,绝对肯定得到The Software Optimization Cookbook 的副本,并仔细阅读它。

    另一方面,OS 平台允许固定进程内存(不可交换,这是与 L2 代码/数据缓存不同的主题,但无论如何您都无法证明 L2 缓存是您的罪魁祸首...) 但 101% 的情况下,操作系统比您的应用更了解并阻止它交换会导致性能更差,而不是更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多