不要在GCC中使用-O3标志优化特定循环

时间:2013-01-05 19:25:01

标签: c++ c optimization gcc openmp

在我的代码中,我使用一个简单的int变量(名为counter)来同步4个线程。

以下是我的代码片段:

int counter = 0;
#pragma omp parallel shared(counter) num_threads(4) 
{
    while(counter != thread_id){
        // What should I put here?
    }
    // Actions needed to be performed 'in order'
    counter++;
    // The rest of the code
}

我面临的问题是,如果我使用-O3优化标志,那么编译代码中的while循环'dissapear'...例如,如果我在循环中放置了一个printf行,那么就会发生这种情况。工作正常......

我应该在while循环中放置什么,所以-O3不会影响它的行为?

---编辑---

很抱歉缺少上下文...我需要创建一个可以处理特定进程的线程团队,因为我正在使用NUMA系统所以我需要“团队创建”部分按顺序制作所以我可以使用处理器亲和力...请看,这个问题有关: Specific thread order in C using GCC and OMP

1 个答案:

答案 0 :(得分:3)

如前所述,这是一种同步线程的BAD方式。由于我不希望我的回答被低估,我将解释你应该使用其他形式的同步。通常情况下,一个semphore用来计算东西,所以这可能是正确的,但由于我们没有你所有的代码,所以没有一个特别好的方法来判断。