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 :

OpenMP et Qthread


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 OpenMP et Qthread
    Bonjour,

    J'ai quelques soucies avec openMP. Si je fais ca dans le main de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       omp_set_num_threads(3);
       #pragma omp parallel
       printf("Hello, world.\n");
    j'obtient bien 3 fois "Hello.."

    Mais si je fais de même dans un thread // par example un QThread issue de Qt4.5 ca plante diectement à la premiere ligne.
    Cela signifie-t-il que l'on ne peut utiliser les directive openMP que dans le thread principale ?
    Si quelqu'un à quelques expériences de openMP je suis preneur

    Merci d'avance

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    printf n'est normalement pas thread safe. D'où le plantage à mon avis.
    Essai,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    omp_set_num_threads(3);
    #pragma omp parallel
    qDebug() <<"Hello, world.\n";
    pour voir

  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
    C'est l'example fournit avec openMP et ca plante dé la prémiere fonction "omp_set_num_threads" avant même d'arriver au fprint

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    sous visual, ceci marche

    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
    24
    25
    26
    27
    28
    #include <QtGui>
    #include <omp.h>
     
    class thread : public QThread
    {
        void run()
        {
            omp_set_num_threads(5);
            #pragma omp parallel
            qDebug() <<"Hello, world_thread.\n";
        }
    };
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc,argv);
     
     
        omp_set_num_threads(3);
        #pragma omp parallel
        qDebug() <<"Hello, world.\n";
     
        thread t;
        t.start();
        t.wait();
     
        return 0;
    }

  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
    Oui, je viens d'essayer sous linux et ca fonctionne bien. Je ne sais pas quel est mon probleme sous windows. Je n'ai pas du inclure la bonne librairie pthread ou quelquechose comme ca.
    Je vais explorer ca
    Merci encore

  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
    Ok je viens de tester ton example et j'ai moi ca plante sur la ligne "omp_set_num_threads(5)" dans le thread. Je ne comprend pas ce qui se passe.
    Alors je suis en Qt4.5.3, gcc4.4.0, lib Qt en static , pthread et libgomp en static aussi. Qu'en est-il pour toi ?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Je ne sait pas trop où en est le dev de openmp sous mingw. C'est peut être juste cela.
    comme je t'ai dit, j'ai juste testé sous visual sans problème...

  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
    Ca me parait ok puis que cela fonctionne bien sous le main. Et puis cela semble eprouvé depuis un moment d'apres mes longues recherches sur le web.

    Une question que je me pose tout de même. n'aurais-je pas due compiler mes lib Qt qui sont en static avec l'option -fopenmp

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Une question que je me pose tout de même. n'aurais-je pas due compiler mes lib Qt qui sont en static avec l'option -fopenmp
    y as pas de raison.

  10. #10
    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
    Bon je viens d'essayer avec une verison de Qt en dll, ce ne change effectivement rien.
    Je suis un peu désesperé là...
    Je plaisante mais c'est galére ce truc. Je vais essayer le dernier gcc 4.4.2 je crois

  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
    Rien à faire même avec la dernier version de gcc. Là je suis au bord du gouffre...

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Rien à faire même avec la dernier version de gcc. Là je suis au bord du gouffre...
    Si je ne me trompe pas, tu as deux façon de spécifié le nombre de thread. Soit avec la fonction que tu veut utiliser, soit dans le #pragma. Essai de voir si la deuxième peut fonctionner.

  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
    Non, dé qu'il rencontre un bloc // dans le thread ca plante.
    Bon j'ai simplifié le programme de maniére à m'afranchhir de Qt, ca donne ca:

    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
    24
    25
    26
     
    #include <stdio.h>
    #include <omp.h>
    #include <pthread.h>
     
     
    void *myThreadEmit(void *arg)
    {
      printf("start thread.\n");
      #pragma omp parallel
      printf("Hello, world_thread.\n");
    }
     
     
    int main(int argc, char *argv[])
    {
      pthread_t tid;
     
      omp_set_num_threads(3);
      #pragma omp parallel
      printf("Hello, world.\n");
      pthread_win32_process_attach_np();
      pthread_create(&tid,NULL, myThreadEmit, NULL);
      pthread_join(tid,NULL);
      return 0;
    }
    Et malheureusement ca plante toujours aprés la ligne "start thread". Je compile ca sous gcc4.4.0 avec l'option "-m32 -fopenmp" . Alors si quelqu'un pouvait essayer pour me dire si ca fonctionne chez lui, ce serai pas mal

  14. #14
    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
    Bon j'ai deja essayé avec gcc4.4.1 sans succé alors je suis revenu à le une plus veille gcc4.3.3 et c'est pareil.

    Personne ne pourrait tester ce petit bout de code et me dire ce qu'il en est chez lui. Je met un petit zip contenant le cpp et make file

    Je suis sous windows Xp et ca fonctionne trés bien sous linux
    Fichiers attachés Fichiers attachés

  15. #15
    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 cru comprendre que printf n'etait pas thread safe, alors j'ai réecirt les choses mais ca plante toujours sous windows quelquesoit la version de gcc.

    Vraiment personne pour tester ce petit bout de code ?

    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
     
    #include <iostream>
    #include <pthread.h>
    #include <omp.h>
     
    void *myThreadEmit(void *)
    {
      std::cout << "start thread.\n";
      #pragma omp parallel
      std::cout << "Hello, world in thread.\n";
      return(NULL);
    }
     
    int main(int argc, char *argv[])
    {
      pthread_t tid;
      #pragma omp parallel
      std::cout << "Hello, world.\n";
      pthread_create(&tid,NULL, myThreadEmit, NULL);
      pthread_join(tid,NULL);
      return 0;
    }

  16. #16
    screetch
    Invité(e)
    Par défaut
    je l'ai teste chez moi, Windows 7 avec GCC 4.3.0 et 4.4.0 ca n'a pas marché

  17. #17
    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
    Ca à planté au même endroit que moi, ou tu n'as pas réussi à compiler ?

  18. #18
    screetch
    Invité(e)
    Par défaut
    meme erreur que toi

  19. #19
    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, je n'arrive pas à m'expliquer ce truc là, c'est plutôt basic comme example, ou alors j'ai oublié une initialisation essentielle quelquepart !

  20. #20
    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
    Là je suis vraiment coincé, ca fait 2 jours que je galére avec ce probléme. J'ai une grosse application de calcul basée sur un GUI qui lance le calcul via un Thread et je ne peux changer cette architecture. J'ai commencé à utiliser openMP sous linux avec succes et là tout mon boulot et à jetter si je n'arrive pas à le porter sous windows.
    Je ne vois pas par quoi remplacer openMP, si quelqu'un à des suggestions pour une librairie plus stable, je suis preneur

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. GCC PTHREAD OPENMP MACOSX
    Par epsilon68 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 30/11/2007, 01h46
  2. Qt macosx gcc & icc openmp
    Par epsilon68 dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 34
    Dernier message: 29/10/2007, 11h07
  3. TBB vs OpenMP
    Par yan dans le forum C++
    Réponses: 3
    Dernier message: 24/08/2007, 00h30
  4. OpenMP & Library
    Par uriotcea dans le forum C++
    Réponses: 8
    Dernier message: 04/10/2006, 22h16
  5. OpenMP sous Visual 2005
    Par teddy fredaigues dans le forum MFC
    Réponses: 6
    Dernier message: 19/01/2006, 14h43

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