3

非常に単純なコードで、コンパイラが私の使用についてエラーをスローする理由がわかりませんomp atomic capture

// my_class.h

class my_class
{

my_class()
{ }

static int class_int;
static int get_next_int();

};

// my_class.cpp

int my_class::get_next_int()
{
   int next_int;
  #pragma omp atomic capture
  next_int = class_int++;

  return next_int;
}

コンパイラエラー:

my_class.cpp: In static member function 'static int 
my_class::get_next_int()':

my_class.cpp:2069: error: expected end of line before 'capture'
my_class.cpp:2070: error: invalid operator for '#pragma omp atomic' before '=' token

それは何か関係があるのstaticでしょうか?理由が想像できない...

代わりに使用すると、正常にpragma omp critical動作します(コンパイラエラーはありません)。

PS私は #include <omp.h> すべての.hと.cppにあります。そして-fopenmp、いつものように、とリンクします

4

2 に答える 2

4

このcapture句はOpenMP3.1で導入されました。準拠したコンパイラが必要です。

  • v4.7以降のGCC
  • v10.1以降のインテル®コンパイラー
  • v12.3以降のOracleSolarisStudio
  • を除く他の多くのコンパイラ...
  • MSVC(2012を含むすべてのバージョン)。2.0以降のOpenMPバージョンをサポートしていません。

GCC4.4.5はOpenMP3.1をサポートしていません。OpenMP3.0のみをサポートします。

于 2012-08-08T10:51:35.283 に答える
0

Microsoftコンパイラを使用している場合、ディレクティブのはサポートされていません。omp atomic

コードをちょうどに変更#pragma omp atomicし、ms docsに従って、コンパイラは正しいことを行います。私に懐疑的な色を塗ってください。:)

于 2012-08-07T18:40:15.497 に答える