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] | Problème avec classe


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut [OpenMP] | Problème avec classe
    Bonjour tout le monde,

    Alors voici mon problème, je suis entrain d'écrire une classe pour faire du traitement d'image, et je me suis lancé dans l'utilisation d'openMP pour la première fois. J'ai l'impression que les directives OpenMP que je donne dans ma classe ne sont pas prise en compte.


    Code Image.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	class ImageGray
    	{
    	protected:
    		PixelGray *_pixels;
    		Int32 _height;
    		Int32 _width;	
    	public:
                    [...]
                    void SetPixel(Int32 k, PixelGray value) { _pixels[k] = value; }
    		void Negate(ImageGray & destination);
    	};

    Code Image.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	void ImageGray::Negate(ImageGray & destination)
    	{
    		destination.SetDimension(_width, _height);
    		int size = _width * _height;
     
    		#pragma omp parallel for
    		for (int k = 0; k < size; k++)
    			destination.SetPixel( k, ~_pixels[k] );
    	}

    Code main.cpp : 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 Negate(ImageGray & source, ImageGray & destination)
    {
    	double width = source.GetWidth();
    	double height = source.GetHeight();
     
    	destination.SetDimension(width, height);
    	int size = width * height;
     
    	#pragma omp parallel for
    	for (int k = 0; k < size; k++)
    		destination.SetPixel( k, ~source.GetPixel(k) );
    }
     
     
    int main()
    {
            [...] // déclaration des variables
     
    	if (LoadBitmapFile(image, "aletsch.bmp"))
    	{
    		///////////////////////////////////////////////////////
    		image.Negate(image2); // process time: 7.35ms
                    SaveBitmapFile(image2, "test1.bmp");
     
    		///////////////////////////////////////////////////////
    		Negate(image, image2); // process time: 0.95ms
                    SaveBitmapFile(image2, "test2.bmp");
    	}
    	return 0;
    }


    Si je place la fonction dans le main.cpp, la parallélisation est bien réalisée (8 thread =~ 8x plus rapide), je ne vois donc pas trop ce qu'il manque pour faire marcher la parallélisation dans ma classe...

    Si quelqu'un a une idée pour m'aider à résoudre mon problème, c'est avec plaisir :p

    A+
    Faff

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Je n'ai pas compris, pourquoi dis tu que les directives ne sont pas prises en compte alors que tu constate bien un gain ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Oui, mais le gain est présent uniquement si la fonction est placée dans le main.cpp. J'aimerais que ça soit le cas aussi lorsqu'elle est externe au main.cpp

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    je passe sur le fait que tes méthodes devrait etre des fonctions ...

    je pense que le pb vient de la référence non const sur destination qui doit faire croire au compilo qu'il y a des dependances la ou il n'y en a pas.

    Si tu ecris ton code de manière plus fonctionelle ( image negate(image const&) ) ca devrait mieux se passer.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Bon, c'était pas une erreur de code finalement!

    J'ai mes classes dans un projet tier, et je compilais uniquement le projet de test avec le /openmp.

    Problème résolu



    Merci quand même pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec classe dérivé de datagrid (webForm)
    Par wadison dans le forum Framework .NET
    Réponses: 1
    Dernier message: 19/02/2008, 14h40
  2. problème avec class vector
    Par abdelmajid_daosabah dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/11/2007, 22h40
  3. Problème avec Class.forName
    Par steftanguy dans le forum JDBC
    Réponses: 4
    Dernier message: 14/08/2007, 16h24
  4. problème avec classe interface
    Par bandit_debutant dans le forum Langage
    Réponses: 6
    Dernier message: 05/11/2006, 20h54
  5. Problème avec classe MySQL
    Par shadeoner dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/07/2006, 11h25

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