繁体   English   中英

预取数据以缓存x86-64

[英]Prefetching data to cache for x86-64

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

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

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

现代CPU具有相当好的自动预取功能,如果您尝试启动软件预取,您可能会发现弊大于利。 如果您发现实际上存在性能问题,那么很可能会有更多“低挂果”,您可以专注于优化。 当您急需几个百分点的吞吐量时,预取往往是您可能尝试的最后一件事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM