“non valide le contrôle de prédicat” erreur de compilation en utilisant OpenMP

Je suis en création d'un nombre premier outil, basé sur C - déterminer si un nombre est premier , mais utilisant 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;
}

Lors de la compilation avec -fopenmp, la version de GCC 4.7.2 est erroring, indiquant invalid controlling predicate à l'égard de la boucle for.

Il ressemble à cette erreur est causée par le j au carré dans la boucle for. Est il possible que je peux contourner ce problème et d'obtenir le résultat souhaité de l'algorithme?

êtes-vous sûr que l'instruction return est autorisé dans un mp boucle de construire ?
Malheureusement, la parallélisation de la boucle avec OpenMP ne va pas les aider pour les essais pour un seul premier avec la division de première instance. Vous pouvez, cependant, utiliser efficacement pour les tests multiples des nombres premiers en utilisant la section de première instance. Cependant, pour trouver des listes de nombres premiers, je recommande le Crible d'Eratosthène. Voici une version utilisant OpenMP create.stephan-brumme.com/eratosthenes
Aussi, dans votre isPrime fonction je vous recommande d'utiliser j <= j/value au lieu de j*j <= value qui peuvent déborder, rosettacode.org/wiki/Primality_by_trial_division#C

OriginalL'auteur Nick | 2013-07-10