我是openmp的新手,正在玩一些学校项目的东西。我试图通过使用原子而不是关键来使我的程序运行得更快。我在其中一个for循环的末尾有这段代码。
if(prod > final_prod)
{
#pragma omp atomic
final_prod = prod;
}
虽然当我这样做时,我得到以下错误(如果我使用关键程序编译好了)
error: invalid form of ‘#pragma omp atomic’ before ‘;’ token
final_prod = prod;
^
从我到目前为止学到的东西,你可以使用原子而不是通常的东西 可以在一些机器指令中执行。这有用吗?使用原子与关键之间的主要区别是什么?
答案 0 :(得分:5)
根据文档here,您只能使用某些语句形式的原子:
另外,确保比较在暴击内!所以我假设你不能拥有你想要的东西,但如果你有
if(prod > final_prod) // unsynchronized read
{
#pragma omp critical
final_prod = prod;
}
它仍然是数据竞赛
答案 1 :(得分:1)
您只能使用以下形式的运算符使用#pragma omp atomic:
原子指令通常更快,但语法非常严格。