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++

  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
    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
    Différence d'ordre dans les calculs!
    Veux-tu dire que A+B donnerai quelquechose de différent avec B+A ?

  8. #8
    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
    Je veux dire que la manière de réaliser a+b+c+d dans le binaire n'est pas forcément la même avec et sans openMP

    Et comme tu manies des flottants, cela donne des résultats qui peuvent différer.

  9. #9
    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
    Oui j'avais bien compri, mais c'est un peu ennuyeux

  10. #10
    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
    Citation Envoyé par uriotcea Voir le message
    Oui j'avais bien compri, mais c'est un peu ennuyeux
    Si tu pouvais mettre la totalité de ton code , je pense que ça serait plus facile à identifier.

    Il parait aussi que la taille de la pille joue dans certains cas.

  11. #11
    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
    Le code fait environ 150.000 lignes. On va donc oublier. J'ai mis la partie incriminée, difficile de faire mieux. Je pense que c'est un problème général à openMP.

  12. #12
    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...

  13. #13
    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.

  14. #14
    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