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 :

Resultat trés etrange 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 Resultat trés etrange openMP
    Bonjour,

    j'essaye de paralléliser un calcul avec openMP. Mon calcul est constitué de 3 grosses boucles indépendantes alors je procéde comme suit. Mais visiblement je dois me tromper dans la syntax parce que en version non paralléle je met 2 secondes et en version openMP 6 secondes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    omp_set_num_threads(3);
    #pragma omp parallel sections		
    {
      #pragma omp section
      {
         for (int i=0;i<10e7;i++) {
            // traitement
         }
      }
      #pragma omp section
      {
         for (int i=0;i<10e7;i++) {
            // traitement
         }
      }
      #pragma omp section
      {
         for (int i=0;i<10e7;i++) {
            // traitement
         }
      }
    }

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 401
    Par défaut
    bonjour,

    pourquoi ne pas utiliser #pragma omp parallel for ?

  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
    Parce que l'interieur des boucle ne se préte pas à ce type de parallélisation. Ce sont principalement que des recherches de max et de min. En fortran ca l'aurait fait avec la directive 'Reduction: max' mais en C pas moyen.

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 401
    Par défaut
    peut être que sans openmp, le compilo est suffisamment malin pour regrouper tes 3 boucles en une seule.

    en tout cas, à aveugle comme ça je ne sais pas.

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 614
    Par défaut
    +1 pour l'optim du compilo.
    Ou un problème de cache miss. Pour une petite opération sur un gros buffer, il est parfois plus efficace de le faire séquentielle que de paralléliser et provoquer des accès mémoire aléatoire.

  6. #6
    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
    Je ne pense que ce soit le compilateur qui optimise vue que ce comportement est identique avec et sans les options d'optimisation -0x.
    Il est vrai par contre que les boucle travaille sur les mêmes tableaux, mais je suis tout de même surpris qu'il n'y ait aucun gain. J'ai essayé de faire tourner une boucle du du max au min alors que l'autre tourne du min au max, pour voir si ca changeait les choses, mais non.
    Au cas ou voici la boucle que j'ai séparé en 3 boucles au cas ou veriez une soultion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
      for (int i=0;i<hh;i++) {
        moy[0]+=tab[i*6];
        if (tab[i*6]>max[0]) max[0]=tab[i*6];
        if (tab[i*6]<min[0]) min[0]=tab[i*6];
        moy[1]+=tab[i*6+2];
        if (tab[i*6+2]>max[1]) max[1]=tab[i*6+2];
        if (tab[i*6+2]<min[1]) min[1]=tab[i*6+2];
        moy[2]+=tab[i*6+4];
        if (tab[i*6+4]>max[2]) max[2]=tab[i*6+4];
        if (tab[i*6+4]<min[2]) min[2]=tab[i*6+4];
     }

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 614
    Par défaut
    Question stupide, mais ton processeur possède bien plusieurs core ?

    Sinon je ne sais pas du tout... Ca m'étonne quand même qu'un cache miss fasse autant baisser les perfs...

  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
    6 coeurs hyperthreaded donc potentiellement 12 threads possibles. J'obtient généralement un speed-up autour 8-9 pour des boucles openMP plus classiques

Discussions similaires

  1. string avec comportement très etrange
    Par membreComplexe12 dans le forum C++
    Réponses: 9
    Dernier message: 13/06/2011, 10h52
  2. Trés etrange bug
    Par uriotcea dans le forum Débuter
    Réponses: 7
    Dernier message: 25/01/2011, 08h09
  3. Bug ? peut-être, Etrange? très certainement
    Par Inarius dans le forum C#
    Réponses: 0
    Dernier message: 09/04/2010, 23h26
  4. Fonctionnement tres etrange de openMP
    Par uriotcea dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 14/11/2009, 19h27
  5. Requete Update avec Select imbriqué: etrange resultat!
    Par corentone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/08/2007, 15h05

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