c - 预取对齐内存

标签 c memory memory-alignment prefetch

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

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

谢谢。

最佳答案

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

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

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

Fetches the line of data from memory that contains the byte specified with the source operand to a location in the cache hierarchy specified by a locality hint:

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

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

关于c - 预取对齐内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473796/

相关文章:

c - 如何在 C 中显示随机数生成器的百分比

c - 如何在C中从甲板上抽牌而不重复?

mysql - 用于不断变化的数据的最佳存储引擎

c - C 中增长内存中的多维数组

c# - 类方法所需的资源

memory-alignment - 如果 EXE 和 DLL 的内存对齐方式不同怎么办?

c++ - IDA PRO 将 C++ 代码转换为 C 代码 __OFSUB__ 宏

c++ - 放置-新地址对齐

c - malloc 和 C 对齐 : is this hand-made optimization safe?

c - libevent中两个回调之间的区别