使用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。 –