簡體   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