首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc clang msvc C++自动矢量化要求

gcc clang msvc C++自动矢量化要求
EN

Stack Overflow用户
提问于 2020-01-08 11:37:27
回答 1查看 2.6K关注 0票数 3

下列陈述正确吗?

  1. 使用GCC和clang,我的代码将自动矢量化,如果我用:
代码语言:javascript
复制
- `-O2 -ftree-vectorize -march=XYZ` (XYZ being the target instruction set: native, SSE, AVX2, etc.)
- `-O3 -march=XYZ`

  1. 使用MSVC,我的代码将自动矢量化,如果我用:
代码语言:javascript
复制
- `/O2`

这段视频似乎建议我不需要使用MSVC来指定体系结构。对吗?在默认情况下,编译器将使用本机架构,如果找不到矢量指令,编译器将在运行时返回标量操作。

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 12:44:49

我不需要用MSVC指定架构。对吗?

是的,那确实是正确的。对于MSVC,默认情况下,自动向量器是启用的,并为最快的矢量化获取适当的指令集。此外,即使您确实指定了arch,自动向量器也可能生成与/arch交换机指定的指令不同的指令--如文档所述。例如,在编译/arch:SSE2时,可能会发出SSE4.2指令。

另一方面,VS向量器与gcc或clang相比缺乏相当多的特性。

使用GCC和clang,如果我用-O2 -ftree-vectorize -march=XYZ-O3 -march=XYZ ?编译,我的代码将自动矢量化。

不一定,为了支持浮点减少的矢量化,您还需要使用-ffast-math-fassociative-math。但是,一般来说,是的,它将被启用。您可能会发现,在文档中编写的代码相同,矢量化是由标志ftree-vectorize启用的,默认情况下是在-O3启用的。

PS:您可以使用https://godbolt.org来查看所有这些操作!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59645037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档