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 allocation de pointeur


Sujet :

Threads & Processus C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Par d�faut openMP et allocation de pointeur
    Bonjour,

    j'ai une question � propos des allocations pointeurs avec open MP.

    Quand j'�cris :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #pragma omp parallel
    {
      double* pTemp;
     
      #pragma omp single
      pTemp = double[N];
     
      #pragma omp for
      for(int i=0; i<N;i++)
        pTemp[i] = 2*i+N;
    }
    Cela veut-il dire qu'il y a autant de pointeurs dTemp cr��s que de threads cr��s pour la r�gion parall�le ?
    Dans ce cas, quand j'alloue dynamiquement l'un des pointeurs par un seul thread avec single, et qu'ensuite j'�cris dans pTemp avec une boucle for, comment sait-il que c'est dans celui allou� qu'il faut �crire ?

    Merci.


    Cordialement.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Bonjour

    C'est simple, il sait pas... donc il plante (�a doit d�pendre de l'impl�mentation je pense). Il existe une clause master proche de single, qui choisit le thread principal.

    Si tu pr�cises pas dans les pragma, les variables sont consid�r�es en private, c'est � dire que chaque bloc utilise sa propre copie. Si on d�roule :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #pragma omp parallel // si on est sur un dual core, on créé 2 thread T1 et T2
    {
        double* pTemp; // 2 copies de cette variable, pour T1 et T2 : T1p1 et T2p1
     
        #pragma omp single // création d'une nouvelle variable : Txp2 
        pTemp = double[N];
     
        #pragma omp for // ok, pour for, les variables sont shared, on utilise donc T1p1 et T2p1
        for(int i=0; i<N;i++) 
            pTemp[i] = 2*i+N;
    }
    Citation Envoy� par ketchupi Voir le message
    Cela veut-il dire qu'il y a autant de pointeurs dTemp cr��s que de threads cr��s pour la r�gion parall�le ?
    Oui, par exemple 2 sur un dual

    Citation Envoy� par ketchupi Voir le message
    Dans ce cas, quand j'alloue dynamiquement l'un des pointeurs par un seul thread avec single, et qu'ensuite j'�cris dans pTemp avec une boucle for, comment sait-il que c'est dans celui allou� qu'il faut �crire ?
    Comme tu ne le pr�cises pas, single est en private et tu cr�es une nouvelle variable dans l'un des threads. La variable du second thread n'est pas chang�e
    Dans tous les cas, tu as l'une de tes variables qui n'est pas allou�es et qui va planter

Discussions similaires

  1. R�ponses: 8
    Dernier message: 03/09/2010, 09h05
  2. R�ponses: 11
    Dernier message: 01/08/2010, 14h34
  3. Allocation dynamique (pointeur pass� en param�tre)
    Par sperca dans le forum D�buter
    R�ponses: 6
    Dernier message: 03/02/2009, 14h50
  4. allocation et pointeur sur pointeur
    Par noobC dans le forum C
    R�ponses: 7
    Dernier message: 13/11/2007, 19h00
  5. R�ponses: 11
    Dernier message: 20/10/2006, 13h19

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