1
我有一些线程C代码需要处理的数据结构的64字节对齐。这种对齐与预取指令如gcc __builtin_prefetch如何交互?预取的效果是否与使用非对齐数组相同?预取对齐的内存
请注意,我正在使用memalign来获取对齐数组。
谢谢。
我有一些线程C代码需要处理的数据结构的64字节对齐。这种对齐与预取指令如gcc __builtin_prefetch如何交互?预取的效果是否与使用非对齐数组相同?预取对齐的内存
请注意,我正在使用memalign来获取对齐数组。
谢谢。
这个问题的答案高度依赖于实现。
但是,在x86和x86_64上,GCC将__builtin_prefetch
作为单个PREFETCH
汇编指令实现。
根据Intel's documentation(搜索“PREFETCH”):
获取来自存储器的数据,它包含在由一个地方暗示指定的高速缓存层次结构与源 操作数指定的某个位置上的字节的行:
我99%肯定的AMD版本的工作方式,但我太忙了,检查...
因此,如果内存操作数不对齐,将有效向下取整为64字节的倍数,并且该缓存行将被预取。 (好吧,我知道所有当前CPU上的64字节,指令集引用只能保证“最少32字节”,不知道他们为什么这样说;在任何情况下使用这个小工具是合理的,你必须假设很多关于特定的CPU。)
什么语言? C? C++? C#? OC?强迫症? – Shaz
代码在C. – Tudor
我将它添加到标签中。你现在应该得到更多的意见。 :) – Shaz