IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Probleme avec openMP


Sujet :

Threads & Processus C++

Vue hybride

uriotcea Probleme avec openMP 12/06/2012, 20h11
ternel Bonjour, J'y connais rien... 22/06/2012, 14h19
uriotcea Salut, Remarque... 22/06/2012, 16h05
athlon64 euh je croie pas... car moi... 22/06/2012, 17h14
uriotcea J'ai vérifié que l'ordre ne... 24/06/2012, 23h09
Invité slide 25... 30/06/2012, 22h06
uriotcea Ok j'ai essayé X+= ou X=X+ et... 02/07/2012, 08h30
Joel F c'est juste une erreur de... 02/07/2012, 09h38
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Probleme avec openMP
    Bonjour,

    Le code suivant ne donne pas le même résultat si je désative les directives openMP. Alors, la différence est mineures, 10-8, mais cela suffit à donner un comportement différent dans le reste du code. Est-ce normal compte tenu de la parallélisation ou cela indique-t-il un probléme. Merci d'avance de vos lumiéres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    double X,Y,XP,YP,P,E;
    X=Y=Xp=Yp=P=E=0;
    int npoint0=1000000
    int NN=(npoint0-1)*6;
    #pragma omp parallel for  schedule(guided) reduction(+:X,Y,Xp,Yp,P,E)
    for (int i=0;i<=NN;i=i+6) {
       X+=cord[i];
       Xp+=cord[i+1];
       Y+=cord[i+2];
       Yp+=cord[i+3];
       P+=cord[i+4];
       E+=cord[i+5];
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,

    J'y connais rien en openMP, mais j'ai quelques restes de mes cours de parallélisme (qui remontent un peu)

    J'ai l'impression que le pragma devrait lister les variables dans le même ordre que dans l'alignement du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma omp parallel for  schedule(guided) reduction(+:X,Xp,Y,Yp,P,E)
    Cela dit, je suis sûrement complètement à coté de la plaque.

    PS: mon intervention me sert aussi à apprendre

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Salut,

    Remarque pertinante, je ne me suis jamais même posé cette question. Mais j'espére que tu as tord, parce que là j'aurai un gros probléme dans mes codes.

  4. #4
    Membre confirmé Avatar de athlon64
    Profil pro
    Inscrit en
    Février 2009
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 243
    Par défaut
    euh je croie pas... car moi j'utilise la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #pragma omp parallel for 
     
    for(...;...;...)
    Sans même lister les variables et ça marche très bien.

    La différence se fait au niveau de quels variables ?

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    J'ai vérifié que l'ordre ne changeait rien et c'est bien le cas. Alors toutes les variables sont concernés, l"exemple ci dessous montre en première ligne X0, Xp0 en mode openMP et la seconde, même variables sont openMP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [openMP]
    X0 = 9999.70006585524610000   Xp0 = -0.00000058396747393
    [pas openMP]
    X0 = 9999.70006575312070000   Xp0 = -0.00000058356025479
    Alors la différence n'est pas norme, mais elle est bien là et inexplicable

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Dans ces circonstances, ca me semble venir de différences d'ordre dans les calculs, impliquant la propagation différente des erreurs en virgule flottante.

    Je n'ai pour le coup aucune idée de solution, sauf à passer à des entiers (pour supprimer la cause du problème) ou utiliser des seuils.

  7. #7
    Invité
    Invité(e)
    Par défaut
    slide 25
    je suis pas sûr que tu aies le droit d'utiliser X+=5, il faudrait plus utiliser X = X+5

    Cela dit, j'ai pas fait de tests pour vérifier.
    edit: d'apres stack la notation += à l'air possible...

  8. #8
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Ok j'ai essayé X+= ou X=X+ et cela ne change absolument rien. Les résultats sont exactement les mêmes et toujours différents selon l'option openMP.

  9. #9
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    c'est juste une erreur de propagation d'erreur du a un ordonnancement des calculs differents.

    Pour info : http://floating-point-gui.de/

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo