预取数据以cachingx86-64

在我的应用程序中,我需要在一个连续的大块内存数据(100 MB的MB)上进行计算。 我当时的想法是保持预取程序将在未来触及的块的部分,以便在对该部分执行计算时,数据已经在caching中。

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

gcc使用内置函数作为低级指令的接口。 特别是对于你的情况__builtin_prefetch 。 但是,如果在访问模式不易自动预测的情况下使用此功能,则只能看到可衡量的差异。

现代的CPU具有相当不错的自动预取功能,如果你尝试启动软件预取功能,你会发现你做的更坏。 如果您发现实际上存在性能问题,那么最有可能会有更多的“低成果”,您可以专注于优化。 当你急于获得更多的吞吐量时,预取往往是你可能尝试的最后一件事情之一。