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).如果您访问一个小阵列,仍然不太可能需要这样做.
一般的建议是 - 首先使您的数据结构高效缓存(将相关数据放在一起,打包数据等),如果探查器告诉您仍然花时间在缓存未命中并且无法改进,请稍后尝试预取进一步的数据布局.