强制L1缓存上的一些数据

Der*_*unk 3 c caching multicore

抱歉这个简单的问题.仍在努力解决这里的一些记忆概念.问题是:假设我有一个我想重复访问的预先计算的数组A. 有没有办法告诉C程序让这个数组尽可能接近CPU缓存以便最快地访问?谢谢.

zeu*_*xcg 16

在大多数架构上,没有办法强制数组到L1/L2缓存; 通常不需要它,如果经常访问它,则不太可能从缓存中逐出.

在某些体系结构上有一组指令,允许您给处理器一个提示,很快就需要内存位置,以便它可以提前开始将其加载到L1/L2缓存 - 这称为预取,请参阅_mm_prefetch指令示例(http://msdn.microsoft.com/en-us/library/84szxsww(v=vs.80).aspx).如果您访问一个小阵列,仍然不太可能需要这样做.

一般的建议是 - 首先使您的数据结构高效缓存(将相关数据放在一起,打包数据等),如果探查器告诉您仍然花时间在缓存未命中并且无法改进,请稍后尝试预取进一步的数据布局.

  • 要添加到该信息,gcc,如果您使用它,有一个名为`__builtin_prefetch`的扩展名:http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Other-Builtins.html (3认同)