【问题标题】:Is there any way to compel compiler not to remove an arbitrary variable from cache memory?有没有办法强制编译器不要从缓存中删除任意变量?
【发布时间】:2014-08-04 06:12:31
【问题描述】:

我的焦虑是执行以C 语言编写的程序。很明显,内存访问时间是处理器消耗的大量总时间。我想要的只是将部分数据移动到缓存内存以提高性能。

经过一些搜索,我发现了一个使用 Gnu C Compiler(gcc) 的方法,即这个函数:

_builtin_prefetch()

这个函数在实际调用阶段之前从内存中拉取任意变量,但是如何有效地使用这个函数呢?

实际上我不觉得GNU manual 本身有帮助。任何使用此功能或什至其他编译器解决方案的有效示例都将受到赞赏。

【问题讨论】:

  • 为什么必须手动处理缓存内存?我们在谈论什么样的应用程序?我认为这更像是一个设计问题。聪明的代码很难弥补糟糕的设计。
  • 通常这样的问题可以在代码的其他地方修复。如果您求助于缓存,您可能采取了错误的方法。
  • @FilipeGonçalves 在高性能计算方面,我们面临许多类似的麻烦,不是因为设计问题,而是因为问题性质和对加速的需求。

标签: c caching gcc gnu


【解决方案1】:

您可以在创建变量时使用register 修饰符,但不能保证变量会存储在缓存中。我所知道的是,没有办法确定变量是否会在缓存中,你不能只希望编译器这样做。如果你愿意,你必须使用你的目标程序集来获得它。

例子:

register int variable;

register 修饰符只能用于整数变量。

【讨论】:

  • 你能告诉我更多关于你提到的注册表指令吗?我的数据不仅仅是一个变量。
  • register与缓存无关。如果可能,它只是指示编译器将变量放入处理器的寄存器之一。
猜你喜欢
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2015-07-01
  • 2011-01-26
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多