2013-04-22 124 views
3

-O2優化標誌是否有可能重新排列代碼,從而可能使多線程應用程序工作成爲非預期的?使用-O2優化和OpenMP

由於我通過un-intended behavior意味着示例代碼被重新排列時:聲明的變量(由程序員)爲中創建的每個線程被移動外#pragma omp parallal使得僅一個拷貝是創建,由所有線程共享。

+2

不可以。如果您所描述的內容是錯誤的,編譯器可能會被破壞。 – Mysticial 2013-04-22 21:42:43

+0

看看這個問題 http://stackoverflow.com/questions/11626928/petersons-algorithms-behavior-for-various-optimization-flags – arunmoezhi 2013-04-25 06:35:28

回答

2

不,這不會發生。如果編譯器展開循環,或者編譯器重新排序循環時程序崩潰,OpenMP不會非常有用。 OpenMP指令必須指定變量和並行作用域的依賴性和副作用,並且編譯器在應用優化過程時將其考慮在內。