12

私は現在、OpenMP の使用法を学ぼうとしていますが、質問があります。そのようなことをしても安全ですか:

  std::atomic<double> result;
  #pragma omp parallel for
  for(...)
  {
  result+= //some stuff;
  }

または、使用しますか:

  double result;
  #pragma omp parallel for
  for(...)
  {
    double tmp=0;
    //some stuff;
    #pragma omp atomic
    result+=tmp;
  }

ありがとう !

編集:配列を使用することを処理する最も簡単な方法を知っていますが、興味があるので尋ねています

4

2 に答える 2

-2

アトミックは並列実行を遅くし、うまくスケーリングしないので、より良い方法です

pragma omp parallel for reduction(+:result)
for(...)
{
  double tmp=0;
  //some stuff;
  result+=tmp;
}
于 2014-02-04T13:56:23.193 に答える