2011-06-24 61 views
1

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

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

谢谢。

+0

什么语言? C? C++? C#? OC?强迫症? – Shaz

+0

代码在C. – Tudor

+1

我将它添加到标签中。你现在应该得到更多的意见。 :) – Shaz

回答

1

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

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

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

获取来自存储器的数据,它包含在由一个地方暗示指定的高速缓存层次结构与源 操作数指定的某个位置上的字节的行:

我99%肯定的AMD版本的工作方式,但我太忙了,检查...

因此,如果内存操作数不对齐,将有效向下取整为64字节的倍数,并且该缓存行将被预取。 (好吧,我知道所有当前CPU上的64字节,指令集引用只能保证“最少32字节”,不知道他们为什么这样说;在任何情况下使用这个小工具是合理的,你必须假设很多关于特定的CPU。)