私はOpenMPと並列化を全く新しくしています。この問題は非常にシンプルですが、その原因や解決策を探す方法がわかりません。私のコードは次のようになります。また、FindPrime
を呼び出して、その数が素数であるかどうかをチェックするisPrime
主な機能はありOpenMPが変数を正しく宣言しています
int FindPrime(int size) {
long long next_p = 2;
#pragma omp parallel \
shared(next_p,size)
long long tid = omp_get_thread_num();
long long tnum = omp_get_num_threads();
for(int long long i = tid; i < size; i=i+tnum) {
long long j;
j=next_p+1;
while (!IsPrime(j)) {
j++;
}
next_p = j;
}
return next_p;
}
。
私はグラムで、このコードをコンパイルしてみてください++とフラグ-fopenmp
と-lpthread
、私は結果の行に
for(int long long i = tid; i < size; i=i+tnum){
を指し
error: 'tid' was not declared in this scope
を得ることは、それだけで文句と私にも奇妙です約tid
であり、tnum
ではありません。これもOpenMP関数からのものです。
'parallel'領域のスコープを定義する' {'と'} 'を追加します – Gilles
OpenMPランタイムライブラリの関数は他の関数と同じように機能します。これらは並列領域や他のOpenMP構造体の外部で呼び出すこともできます。 –