我想要 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)。
控制 std::vector 分配的唯一方法是替换分配器。 Boost 有一个确保对齐的实现:https://www.boost.org/doc/libs/1_84_0/doc/html/align/reference.html#align.reference.classes