gpt4 book ai didi

gcc、clang 和 msvc 的 C++ 自动矢量化要求

转载 作者:行者123 更新时间:2023-12-01 19:15:48 25 4
gpt4 key购买 nike

下列说法是否正确?

  1. 使用 GCC 和 clang,如果我使用以下命令进行编译,我的代码将被自动矢量化:

    • -O2 -ftree-vectorize -march=XYZ(XYZ 是目标指令集:native、SSE、AVX2 等)
    • -O3 -march=XYZ
  2. 使用 MSVC,如果我使用以下命令进行编译,我的代码将自动矢量化:

    • /O2

This video似乎建议我不需要用MSVC指定架构。那是对的吗?编译器默认使用 native 架构,如果找不到 vector 指令,则在运行时使用标量操作。

最佳答案

I do not need to specify the architecture with MSVC. Is that correct?

是的,这确实是正确的。对于 MSVC,默认情况下会启用自动矢量化器并选择适当的指令集以实现最快的矢量化。此外,即使您确实指定了 arch,自动矢量化器也可能生成与 /arch 开关指定的指令不同的指令 - 如documentation所述。 。例如,当您编译 /arch:SSE2 时,可能会发出 SSE4.2 指令。

另一方面,与 gcc 或 clang 相比,VS vector 器缺乏很多功能。

With GCC and clang, my code will be auto-vectorized if I compile with -O2 -ftree-vectorize -march=XYZ ? -O3 -march=XYZ ?

不一定,要启用浮点缩减的矢量化,您还需要使用 -ffast-math-fassociative-math 。但是,一般来说,是的,它将被启用。您可能会在 documentation 中找到相同的内容,矢量化由标志 -ftree-vectorize 启用,默认情况下为 -O3

PS:您可以使用https://godbolt.org来看看这一切的实际效果!

关于gcc、clang 和 msvc 的 C++ 自动矢量化要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645037/

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