预取对齐的内存

时间:2011-06-24 21:08:35

标签: c memory memory-alignment prefetch

我有一些线程C代码,需要64字节对齐已处理的数据结构。这种对齐如何与预取指令(如gcc __builtin_prefetch)相互作用?预取的效果是否与使用非对齐数组相同?

请注意,我使用memalign来获取对齐的数组。

感谢。

1 个答案:

答案 0 :(得分:1)

这个问题的答案高度依赖于实现。

但是,在x86和x86_64上,GCC将__builtin_prefetch实现为单个PREFETCH汇编指令。

根据Intel's documentation(搜索“PREFETCH”):

  

从包含源指定的字节的内存中获取数据行   操作数到由locality提示指定的缓存层次结构中的位置:

我99%肯定AMD版本的行为方式相同,但我太忙了,无法检查......

因此,如果内存操作数未对齐,它将有效地向下舍入到64字节的倍数,并且将预取该缓存行。 (好吧,我所知道的所有当前CPU都有64个字节。指令集引用只能保证“至少32个字节”。不知道为什么他们打扰说这个;在任何使用这个小工具都有意义的情况下,你必须已经对特定CPU做了很多假设。)