2013-04-22 125 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指令必须指定变量和并行作用域的依赖性和副作用,并且编译器在应用优化过程时将其考虑在内。