问题描述
在我的应用程序中,我需要在一个大的连续存储器数据(100s MB)上执行计算.我想的是,我的程序将来会触摸我的程序的部分,以便当我对该部分进行计算时,数据已经在缓存中.
有人可以给我一个简单的例子,说明如何使用GCC实现这一目标?我在某个地方阅读_mm_prefetch,但不知道如何正确使用它.另请注意,我有一个多核心系统,但是每个核心都将并行处理不同的内存区域.
推荐答案
gcc使用内置函数作为Lowlevel指令的接口.特别是您的情况 __builtin_prefetch __builtin_prefetch __builtin_prefetch .但是,如果在访问模式不容易自动预测的情况下,您只应看到可测量的差异.
其他推荐答案
现代CPU具有很好的自动预摘要,您很可能会发现,如果您尝试启动软件预取,弊大于利.如果您发现自己确实存在性能问题,则很可能有更多的"低悬挂水果"来优化.当您迫切希望再吞噬几百分之几时,预摘要往往是您可能尝试的最后一件事.