对这个简单问题抱歉。仍在努力解决这里的一些记忆概念。问题是:假设我有一个我想重复访问的预先计算的数组A.有没有办法告诉C程序让这个数组尽可能接近CPU缓存以便最快地访问?谢谢。
答案 0 :(得分:16)
在大多数架构上,没有办法强制数组到L1 / L2缓存;通常不需要它,如果经常访问它,则不太可能从缓存中逐出。
在某些体系结构上有一组指令允许您给处理器一个提示,很快就需要内存位置,以便它可以提前开始将其加载到L1 / L2缓存 - 这称为预取,请参阅例如_mm_prefetch指令(http://msdn.microsoft.com/en-us/library/84szxsww(v=vs.80).aspx)。如果你正在访问一个小阵列,那么这不太可能是必需的。
一般建议是 - 首先使您的数据结构高效缓存(将相关数据放在一起,打包数据等),如果探查器告诉您仍然花时间在缓存未命中,则可以尝试预取,并且您可以不再进一步改进数据布局。