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 & threadprivate


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 & threadprivate
    Bonjour,

    J'ai un message d'erreur concernant cette directive dans l'example simplifi� ci-dessous.
    Le message est "r declared 'threadprivate' after first use"
    Ca vient du fait que ma classe a un constructeur mais ca je n'y peut rien.
    Cet operator est appel� dans une boucle parall�lis�e et qui merde parce va variable stratic 'r' est commune aux threads, d'ou la tentaative d'utilisation de la directive "threadprivate"

    Je ne sais pas comment faire autrement.

    Merci de vos suggestions
    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
     
     
    class  my_class
    {
     public :
      double x,y;
      my_class() { x=y=0; }
    };
     
     
    my_class&  my_class::operator*(const my_calss &p)
    {
    // déclaré en static parce que son constructeur prend trop de temps
      static my_class r; 
      #pragma omp threadprivate(r)
     
      r.x=r.y=0.;
      // differents calculs
     
       return(r);
    }

  2. #2
    screetch
    Invit�(e)
    Par d�faut
    avec un pointeur ?

    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
     
    class  my_class
    {
     public :
      double x,y;
      my_class() { x=y=0; }
    };
     
     
    my_class&  my_class::operator*(const my_calss &p)
    {
    // déclaré en static parce que son constructeur prend trop de temps
      static my_class *r = new my_class(); 
      #pragma omp threadprivate(r)
     
      *r.x=*r.y=0.;
      // differents calculs
     
       return(*r);
    }
    il se peut que tu doives faire un if pour l'initialisation
    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
     
    class  my_class
    {
     public :
      double x,y;
      my_class() { x=y=0; }
    };
     
     
    my_class&  my_class::operator*(const my_calss &p)
    {
    // déclaré en static parce que son constructeur prend trop de temps
      static my_class *r;
      #pragma omp threadprivate(r)
      if(!r) r = new my_class(); 
     
      *r.x=*r.y=0.;
      // differents calculs
     
       return(*r);
    }

  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
    Oui �videmment,j 'aurais du y penser, merci beaucoup.

    Une autre question au passage:
    Quelle est la diff�rence entre omp_set_num_thread(0) & omp_set_num_thread(1), en d'autre termes si je veux iniber le mode //, quelle est la facon la plus �fficace ?

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    alors la aucune id�e, j'avais jamais utilis� openmp avant ta question hier ou avant-hier, donc je s�che :p

+ R�pondre � la discussion
Cette discussion est r�solue.

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