16

在我的应用程序中,有一次我需要对一大块连续的内存数据(100 MB)执行计算。我的想法是继续预取我的程序将来会触及的块的一部分,这样当我对该部分执行计算时,数据已经在缓存中。

有人可以给我一个简单的例子来说明如何用 gcc 实现这一点吗?我在某处读过_mm_prefetch,但不知道如何正确使用它。另请注意,我有一个多核系统,但每个核心将并行处理不同的内存区域。

4

2 回答 2

18

gcc使用内置函数作为低级指令的接口。特别是对于您的情况__builtin_prefetch。但是,只有在访问模式不容易自动预测的情况下,您才应该看到可测量的差异。

于 2012-04-25T21:05:35.697 回答
16

现代 CPU 具有非常好的自动预取功能,如果您尝试启动软件预取,您可能会发现弊大于利。如果您发现自己确实存在性能问题,则很可能还有更多“低悬的果实”可供您专注于优化。当您迫切需要更多百分比的吞吐量时,预取往往是您可能尝试的最后一件事。

于 2012-04-25T20:45:41.277 回答