![]() |
1
3
只有当可以使用SSE/AVX指令时,对齐才会影响性能—当您希望对一系列元素应用相同的操作时,使用数组进行操作时通常会出现这种情况。 一般来说,您需要根据CPU选择对齐方式,如果它支持AVX2,它有256bit寄存器,那么您需要32字节对齐,如果它支持AVX512,那么64字节将是最佳的。
为此,
在我的机器上(运行在i7 6700K上的Linux内核4.17.11),默认的
相反,使用
所以使用
简而言之,您希望数据与CPU中向量寄存器的大小对齐,以便可以使用相关扩展。使用
|
![]() |
2
1
唯一的原因是,不管您的输入是什么,指定对齐都不会带来任何损失/收益,因为无论您键入什么,都会获得与机器对齐的内存。所以在你的处理器上,它支持
您还将看到,无论您选择哪种对齐值,内存地址
一些小细节:OSX总是给你32字节的地址,当你分配一块内存时堆/堆栈独立,而Linux总是给你在堆上分配时对齐的内存。堆栈在Linux上是一个运气问题,但是小矩阵已经超过了堆栈分配的限制。我不了解Windows上的内存分配。
当我为我的
numerics library
我用的地方
TLDR公司 :您的校准输入被有效地丢弃,并且您将获得机器校准。 |
![]() |
3
1
我认为没有“最佳”的对齐值。根据您的体系结构,对齐通常是硬件强制执行的属性,主要出于优化原因。 说到你的具体问题,重要的是要说明你到底在为什么分配内存?哪个硬件访问内存?例如,我曾经使用过DMA引擎,它要求源地址与每个事务传输大小对齐(其中xfer size=4、8、16、32、128)。我还研究了向量寄存器,在这里有一个128位对齐负载是明智的。 总结一下:这要看情况。 |
![]() |
Jamboree · 在C++17中,分配器是否处理对齐类型? 7 年前 |
![]() |
afiori · 访问结构并集中结构的第一个字段 7 年前 |
![]() |
BrodieG · R\u分配和对齐注意事项 7 年前 |
![]() |
dempzorz · 将任意元素存储在连续内存中 8 年前 |
![]() |
kgbook · 关于内存对齐的一些困惑 8 年前 |
![]() |
vandale · x64程序集中的堆栈对齐 11 年前 |