0
我知道這個問題的答案可能是編譯器/操作系統特定的,所以我儘量在標題中提供儘可能多的細節。英特爾處理器(linux)上的線程方面g ++編譯代碼的默認行爲是什麼?
說我編譯一個非常簡單的循環,例如所有數字的總和從一百萬到一百萬。當這個代碼在intel處理器(i7-3770k)上執行時,它會默認使用多個線程嗎?我是否願意通過明確地使環路平行來獲得更多的性能?
我知道這個問題的答案可能是編譯器/操作系統特定的,所以我儘量在標題中提供儘可能多的細節。英特爾處理器(linux)上的線程方面g ++編譯代碼的默認行爲是什麼?
說我編譯一個非常簡單的循環,例如所有數字的總和從一百萬到一百萬。當這個代碼在intel處理器(i7-3770k)上執行時,它會默認使用多個線程嗎?我是否願意通過明確地使環路平行來獲得更多的性能?
C++使用您只爲您使用的費用付費的成語。隱含地啓用多線程會懲罰那些不支持的線程。所以你需要自己啓用它。
也就是說,在C++ 17中,我們將收到parallel algorithms,或者您可以編寫一個 - 這並不難。
線程代碼必須明確寫入。但是i7可能會以非線性方式執行代碼,請參閱[無序執行](https://en.wikipedia.org/wiki/Out-of-order_execution)。 –
我沒有看到關於線程的任何事情。但是...來自gcc.gnu.org「矢量化是通過flag -ftree-vectorize啓用的,默認情況下是-O3。」所以你沒有要求就得到矢量化。 – Matt