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 double liste error


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut Openmp et double liste error
    Bonjour,

    j'ai un soucis sur un algo en c++ qui utilise de l'openmp.

    Mon code fonctionne lorsque je travail sur un seul thread, mais lorsque je passe sur plusieurs thread l’obtient l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *** glibc detected ***~/tpImage/MstWorker.obj: double free or corruption (fasttop): 0x41600540 ***
    Object creation failure
    Et voici le code incriminé :

    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
    29
    30
    31
    void MstWorker::segment()
    {
      // Fill the image.
    	readPGM();
      bool isInTree[m_imgSize]; // The cell is true if it is already in the mst.
      std::fill_n(isInTree, m_imgSize, 0);
      int sizeOfPart = 256 / m_segPart;
      printf("segPart: %d sizeOfPart : %d \n", m_segPart, sizeOfPart );
      // TV scan.
    	#pragma omp parallel for shared(isInTree) num_threads(4)
      for (int i = 0; i < m_imgSize; i++)
      {
        if(isInTree[i])
          continue;
        int newColor = getNewColor(i, sizeOfPart);
        m_image[i] = newColor;
    		// Create the new vector containing all point in this graph.
    		std::vector<int> newVector; 
    		// The new point is on the tree now.
        isInTree[i] = true;
    		// TODO ajouter l'offset du sous-segments eventuellement (voir lors du merging)
    		newVector.push_back(i);
     
    		addNewNode(i, newVector, isInTree, newColor, sizeOfPart);
    		int j;
     
    		// Membre de la classe
    		m_vecGraph.push_back(std::make_pair<int, std::vector<int> >(newColor, newVector));
      }
      writeFilePGM();
    }
    A savoir que l'erreur vient du m_vecGraph.push_back, si je commente la ligne l'erreur disparait.

    Voici le typedef du m_vecGraph

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::pair<int, std::vector<int> > graphColor_t;
    typedef std::vector<graphColor_t> vecOfGraph_t;
    Comme en openmp, si je me trompe, les variables de classes sont automatiquement shared, je comprend pas d'ou vient l'erreur quelqu'un aurait-il une idée ?


    Merci de votre aide

  2. #2
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Citation Envoyé par manticore Voir le message
    Comme en openmp, si je me trompe, les variables de classes sont automatiquement shared, je comprend pas d'ou vient l'erreur quelqu'un aurait-il une idée ?
    Salut

    Tu es sur de ce point ? Je suis pas spécialiste d'OpenMP, mais il me semblait que les variables (membre ou non) sont private par défaut

  3. #3
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Non, je crois que tu as raisons en faite, mais du coup j'ai créer une variable dans ma fonction et je l'ai fais en shared mais ça rien changé...

  4. #4
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    http://en.wikipedia.org/wiki/OpenMP
    shared: the data within a parallel region is shared, which means visible and accessible by all threads simultaneously. By default, all variables in the work sharing region are shared except the loop iteration counter

Discussions similaires

  1. [2D/3D] QGLWidget et "corrupted double-linked list error"
    Par fab13 dans le forum Qt
    Réponses: 2
    Dernier message: 26/11/2012, 21h50
  2. pb code double liste
    Par clairette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/02/2006, 11h21
  3. double liste php
    Par clairette dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 17h06
  4. Probleme avec les double Liste chainees
    Par BernardT dans le forum Langage
    Réponses: 1
    Dernier message: 12/07/2005, 17h22

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