确保 std::vector 始终对齐以实现最佳 SIMD 执行的方法?

问题描述 投票:0回答:1

我想要 X 数量的相同大小的 std::vectors,我可以在 for 循环中一起处理它们,该循环以线性方式从开始到结束。例如:

for (int i = 0; i < vector_length; i++)
    vector1[i] = vector2[i] + vector3[i] * vector4[i];

我希望这一切能够充分利用 SIMD 指令。为此,编译器应该能够假设每个向量都针对 __m256 使用进行了最佳对齐。如果编译器不能假设这一点,则可以在代码中生成并使用各种非最佳循环。

如何确保 std::vector 的最佳对齐以及此类对齐数据的最佳代码生成?

可以假设每个向量内部具有相同的数据结构,可以使用标准 SIMD 指令将其相加/相乘。

我正在使用 C++17。

这里人们要求的更多信息:

32字节对齐很适合我的使用。

我想让它在英特尔 Mac 和 PC 上运行。 (Xcode + Visual Studio),后来当我得到其中一台计算机时,在 ARM CPU Mac 上(再次使用 Xcode)。

c++ optimization c++17 stdvector simd
1个回答
0
投票

控制 std::vector 分配的唯一方法是替换分配器。 Boost 有一个确保对齐的实现:https://www.boost.org/doc/libs/1_84_0/doc/html/align/reference.html#align.reference.classes

© www.soinside.com 2019 - 2024. All rights reserved.