繁体   English   中英

Openmp原子和关键

[英]Openmp atomic and critical

我是openmp的新手,正在为一个学校项目玩一些东西。 我试图通过使用原子而不是关键来使我的程序运行得更快。 我在其中一个for循环的末尾有这段代码。

  if(prod > final_prod)
  {
    #pragma omp atomic
    final_prod = prod;
  }

虽然当我这样做时,我得到下面的错误(如果我使用批评程序编译好)

error: invalid form of ‘#pragma omp atomic’ before ‘;’ token
     final_prod = prod;
                      ^

从我到目前为止学到的东西,你可以使用原子而不是关键,通常可以在一些机器指令中执行。 这有用吗? 使用原子与关键之间的主要区别是什么?

根据这里的文档你只能使用某些语句形式的原子:

在此输入图像描述

另外,确保比较在危险中 所以我假设你不能拥有你想要的东西,但如果你有的话

if(prod > final_prod) // unsynchronized read
{
  #pragma omp critical
  final_prod = prod;
}

它仍然是数据竞争

您只能使用#pragma omp atomic的以下形式的运算符:

  1. x ++,x--等
  2. x + = a;,x * = a等

原子指令通常更快,但语法非常严格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM