使用GCC编译器时,-ftree-vectorize
选项会启用自动矢量化,并且在使用-O3
时会自动设置此标志。它矢量化的级别是什么?也就是说,我会得到SSE2,SSE4.2,AVX或AVX2指令吗?我知道mavx
,mavx2
标志等的存在,但我想知道编译器在没有这些特定标志的情况下如何强制执行特定类型的矢量化。GNU中的-ftree-vectorize选项
3
A
回答
1
所有x86 64位处理器至少具有SSE2。 GCC编译器将默认为64位模式下的SSE2代码,除非您告诉它使用其他硬件选项。
对于32位模式,GCC可能使用不是SIMD指令的x87指令,因此启用矢量化时,请确保至少启用与-mfpmath=sse -msse2
的SSE。
如果启用更高级别的SIMD选项,则编译器可能会(并且在很多情况下会)在向量化时使用这些新指令。
我相信Clang也是如此。但是,ICC和MSVC以不同的方式做事。 ICC可能会创建一个CPU调度程序来选择最佳硬件(或否决AMD硬件)。 MSVC只有用于在64位模式下启用AVX和AVX2的选项(假定为SSE2)。没有办法明确地启用例如SSE4.1与MSVC。相反在某些情况下,自动矢量化器将添加代码来检查SSE4.1(但不是AVX)并使用这些指令。 GCC只会使用SSE4.1,如果你告诉它例如-msse4.1
或更高的东西,如-mavx
。
相关问题
- 1. GNU make的-j选项
- 2. QMAKE中的GNU make --jobs选项
- 3. gcc std = gnu ++ 0x选项
- 4. 在GNU Emacs中粘贴鼠标选项
- 5. GNU autoconf,使用doxygen的文档选项?
- 6. Gnu Fortran编译器写入选项
- 7. 对于非GNU链接器,是否有与GNU链接器“--just-symbols”选项等价的选项?
- 8. 如何在GNU Info中获得程序的命令行选项?
- 9. 命令在GNU env中包含选项抛出错误
- 10. 在python中使用optparse解析非GNU标准选项
- 11. GNU的grep -P选项与Perl的正则表达式匹配
- 12. GNU Make带有多个选项的目标
- 13. 虽然Bash数组传递给GNU make的选项无效
- 14. GNU/Linux:不使用`getnameinfo`获得DHCP选项15的价值
- 15. GNU链接器中的-l和-L选项的顺序是否重要?
- 16. GNU Screen:从bash脚本启动时,-S选项不起作用
- 17. 用于Java的GNU Readline等效项
- 18. 禁用选项中的多个选项中的一个选项
- 19. LINUX GNU Makefile中
- 20. 在argparse中使用GNU风格的长选项(不会混淆可选参数与位置)
- 21. VERBOSE =是gnu上的makefile选项在cygwin下make使我不工作
- 22. GCC 4.8.2 cc1plus:错误:无法识别的命令行选项“-std = GNU + 11”
- 23. GNU Radio中“工作”功能的输入/输出项目
- 24. 在VS C++项目中使用GNU C++构建的库
- 25. 合并选项卡中的选项卡
- 26. 对话菜单中的选项选项
- 27. Ag-Grid:Rich选项中的搜索选项
- 28. 在Visual Studio中的GSL-GNU
- 29. GNU C库中的opendir()sigsegv
- 30. GNU makefile中的通配符
我假设你只对x86指令集感兴趣?您的问题也可以应用于其他架构,例如带ARM的Neon。 –