C - determine if a number is primeに基づいて基本的な素数チェッカーを作成しますが、OpenMPを使用しています。 OpenMPを使用した「無効な制御述部」コンパイラエラー
int isPrime(int value)
{
omp_set_num_threads(4);
#pragma omp parallel for
for(int j = 2; j * j <= value; j++)
{
if (value % j == 0) return 0;
}
return value;
}
-fopenmpでコンパイル、GCCバージョン4.7.2は、forループに対してinvalid controlling predicate
を述べ、erroringれます。
このエラーは、forループのjの2乗に起因するようです。私はこれを回避し、アルゴリズムからの望ましい出力を達成する方法がありますか?
open mpループの構文でreturn文が使用できることを確かめていますか? – alexbuisson
残念ながら、OpenMPを使用してループを並列化することは、トライアル部門があるプライムプライムのテストでは役に立ちません。ただし、試行分割を使用して複数の素数をテストする場合に効果的に使用できます。しかし、素数のリストを見つけるために、私はエラトステネスのふるいをお勧めします。 OpenMPを使ったバージョンhttp://create.stephan-brumme.com/eratosthenes/ –
また、 'isPrime'関数で' j * j <= value'の代わりに 'j <= j/value'を使うことをお勧めしますオーバーフローする可能性がありますhttp://rosettacode.org/wiki/Primality_by_trial_division#C –