【问题标题】:Prefetching aligned memory预取对齐内存
【发布时间】:2011-06-24 21:08:34
【问题描述】:

我有一些线程化的 C 代码,需要对已处理的数据结构进行 64 字节对齐。这种对齐将如何与 gcc __builtin_prefetch 等预取指令交互?预取的效果会和使用非对齐数组一样吗?

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

谢谢。

【问题讨论】:

  • 什么语言? C? C++? C#?超频?强迫症?
  • 我将它添加到标签中。你现在应该得到更多的意见。 :)
  • 它的用处会比平常少。在高速缓存行(大多数主流 cpu 上为 64 字节)上对齐数据让每个人都开心而无需太多帮助。

标签: c memory memory-alignment prefetch


【解决方案1】:

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

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

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

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

我 99% 确定 AMD 版本的行为方式相同,但我太忙没时间检查...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2012-09-28
    • 2010-11-07
    • 2010-10-27
    • 2013-02-02
    • 2018-07-22
    相关资源
    最近更新 更多