gpt4 book ai didi

C++/Linux 出于性能原因对齐字符数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:03 25 4
gpt4 key购买 nike

我正在 Linux 上用 C++ 编写一些代码,我在其中创建了一个用于字节处理的大型 char 数组。读了一些书后,我想知道我是否应该在 16 字节边界上对齐数组,显然这可以让 CPU 利用 SSE?

如果是这样,我如何告诉 GCC 编译器我希望数组对齐的位置?

最佳答案

内存对齐不会直接导致 GCC 生成 SSE 代码。如果你真的想让 GCC 生成 SSE 代码,你应该至少使用以下之一:

  1. GCC Optimize Options-msse, -mtune.

  2. 程序集,或 Inline Assembly

  3. GCC Vector Extensions

在第1点中,是否产生SSE指令仍然取决于编译器,而在第2点和第3点中,SSE指令肯定会产生。

由于SSE中涉及到XMM寄存器,所以很多SSE指令对于128位确实需要严格的内存对齐。您可以使用 GCC Type Attributes __attribute__ ((aligned (N))) 在你的类型定义上以确保这一点。

注意:内存对齐不仅受益于 SSE 指令的潜在使用,还受益于原子指令的使用和高效的缓存操作。在许多平台中,一条指令只有在访问内存时才是原子的对齐其大小。同时,缓存通常以稳定映射到内存的行组的形式组织,如果越过缓存行边界,则需要多访问一次。

另请注意:malloc 仅确保返回适合任何内置类型对齐的指针(参见malloc 手册页)。如果你想对齐自己定义的结构,你仍然应该使用 GCC Type Attributes __attribute__ ((aligned (N))) 上面提到过。

关于C++/Linux 出于性能原因对齐字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com