簡體   English   中英

這是一場數據競賽嗎? 開放式

[英]Is this a data race? OPENMP

如果變量k存在數據競爭,我有點困惑。 據我了解,只有一個線程將執行單個構造,但由於no wait ,線程將立即開始執行for構造。 這里的atomic是否足以防止任何潛在的數據競爭?

#include <stdio.h>
#include <omp.h>
#define Nthreads 8

void main()
{

int n =9, l,k =n,i,j;
k += n+1;

omp_set_num_threads(Nthreads);

  #pragma omp parallel default(none) shared(n, k) private(j)
  {
   #pragma omp single nowait
    {
    k = k+5;
    }
   #pragma omp for nowait
     for( i =0; i< n; i++)
     {
      #pragma omp atomic
       k +=n+i+1;
     }
  }   
}

假設代碼的 rest 正確地表達了您的預期算法,它幾乎是。 正如您可能懷疑自己的那樣,您還需要在單個區域中保護 k 的更新。

j 是一個未使用的變量,我不知道您是否只是忘記刪除它,或者您試圖實現其他東西。

我會在 for 循環中為 k 使用歸約子句,而不是使用同步構造。 我不知道它是否會更好或更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM