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

Don't optimize an specific loop using -O3 flag in GCC

本文关键字:优化 标志 循环 -O3 GCC      更新时间:2023-10-16

在我的代码中,我使用一个简单的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循环"消失"在编译的代码…例如,如果我在循环中放入一个printf行,while就会发生,一切正常…

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

—Edit—

抱歉缺少上下文…我需要创建在特定处理器上工作的线程团队,因为我使用的是NUMA系统,所以我需要按顺序创建"团队创建"部分,这样我就可以使用处理器亲和性……请看这个问题的相关内容:C中使用GCC和OMP的特定线程顺序

如前所述,这是一种糟糕的同步线程方式。由于我不想让我的答案被否决,我将解释您应该使用其他形式的同步。通常,一个信号量是用来计数的,所以在这里可能是正确的,但是因为我们没有你所有的代码,所以没有一个特别好的方法来区分。