不要在 GCC 中使用 -O3 标志优化特定循环
Don't optimize an specific loop using -O3 flag in GCC
在我的代码中,我使用一个简单的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的特定线程顺序
如前所述,这是一种糟糕的同步线程方式。由于我不想让我的答案被否决,我将解释您应该使用其他形式的同步。通常,一个信号量是用来计数的,所以在这里可能是正确的,但是因为我们没有你所有的代码,所以没有一个特别好的方法来区分。
相关文章:
- 如何告诉 gcc 显示您使用的优化标志列表
- C++ - 优化矩阵乘法来自后藤一重的论文,在 O3 标志中表现比幼稚差
- 使用 -O1 优化标志编译项目时共享库崩溃
- 使用优化标志进行编译时线程不启动
- C PRAGMA优化与构建标志
- 如何禁用"不支持优化标志"的 clang 警告
- 英特尔顾问优化标志和设置
- 优化标志会导致计算错误
- 在分析代码时,我应该使用匹配(gcc)编译器优化标志吗
- 在这种情况下,为什么QMAKE添加-O1和-O2优化标志
- Visual Studio 2013优化标志(/O2与/Ox)
- gcc优化标志-O3使代码比-O2慢
- 树矢量化:GCC 优化标志
- 从可执行文件中查找编译优化标志
- g++-5.1.1仅在使用优化标志时警告未使用的变量
- GCC优化标志中断代码
- 如何在gcc中保留命令行选项,但为某些功能添加更多优化标志
- 为什么优化标志 (-O3) 不能加快四倍精度计算的速度?
- 如何在SWIG中使用C++优化标志
- g++内联asm在使用优化标志时未按预期工作