在我的应用程序中,有一次我需要对一大块连续的内存数据(100 MB)执行计算。我的想法是继续预取我的程序将来会触及的块的一部分,这样当我对该部分执行计算时,数据已经在缓存中。
有人可以给我一个简单的例子来说明如何用 gcc 实现这一点吗?我在某处读过_mm_prefetch
,但不知道如何正确使用它。另请注意,我有一个多核系统,但每个核心将并行处理不同的内存区域。
gcc
使用内置函数作为低级指令的接口。特别是对于您的情况__builtin_prefetch
。但是,只有在访问模式不容易自动预测的情况下,您才应该看到可测量的差异。
现代 CPU 具有非常好的自动预取功能,如果您尝试启动软件预取,您可能会发现弊大于利。如果您发现自己确实存在性能问题,则很可能还有更多“低悬的果实”可供您专注于优化。当您迫切需要更多百分比的吞吐量时,预取往往是您可能尝试的最后一件事。