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

C++ Discussion :

Tableau d�chiquet� & performances


Sujet :

C++

  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut Tableau d�chiquet� & performances
    Hello,

    Pour l'impl�mentation d'un tableau d�chiquet�, l'utilisation de vecteurs de vecteurs, plut�t qu'une tambouille � base de tableaux de pointeurs, repr�sente--t-elle une baisse significative de performances ?

    Seules les performances en lecture m'int�ressent. Le remplissage est d�terministe, et n'induira pas de probl�me de r�allocation.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Bonjour,

    Je pense que la meilleure solution reste encore de tester

    Apr�s, "baisse significative de performances" d�pend surtout de ce que ton programme fera et du nombre de donn�es qu'il manipulera.

    Si tu t'amuses � lire des fichiers tout en ayant une interface graphique 3D et que tu ne manipules que 4 valeurs, prendre un tableau de pointeurs ou un vecteur de vecteur ne fera pas grande diff�rence.

    Par contre si ton programme ne fait que lire les donn�es de ton vecteur de vecteur ou de ton tableau de pointeur et que tu as un nombre important de valeurs � traiter alors oui, peut-�tre que cela pourra jouer.

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Pour l'instant, il y a un tableau de pointeurs qui m'emm�nent quelque part sur un m�me tableau d'octets. L'�l�ment point� me donne le nombre d'�l�ments auquel je dois m'attendre, puis j'it�re sur les octets suivants (modulo une taille de classe : c'est de la d�s�rialisation) avec un passage par un reinterpret_cast().

    J'ai plut�t envie, � la lecture, de transformer tout �a en un vecteur de vecteurs.

  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
    un vecteur de vecteur n'est pas contigu et va pourrir ton cache

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Sinon, c'est un peu tir� par les cheveux, mais ne pourrait-on pas stocker toutes les donn�es dans un seul vecteur "data" comme tu le fait avec ta m�thode de tableau de pointeur puis cr�er un vector de Ligne contenant des Lignes.

    Une Ligne h�riterait alors de vector et red�finierait les m�thodes de sorte qu'il aille rechercher les donn�es dans le vecteur "data" � chaque demandes (DP Proxy je ne m'abuse).

    Ainsi tu ne devrais pas trop perdre en performances et tu aura un conteneur "STL".

  6. #6
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Une Ligne h�riterait alors de vector et red�finierait les m�thodes de sorte qu'il aille rechercher les donn�es dans le vecteur "data" � chaque demandes (DP Proxy je ne m'abuse).
    L'h�ritage et les conteneurs STL, �a va tr�s mal ensemble, les destructeurs ne sont pas virtuels.

  7. #7
    Membre �prouv�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    118
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 118
    Par d�faut
    Un seul vecteur r�sout compl�tement le probl�me sans perte de performance!

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par Iradrille Voir le message
    L'h�ritage et les conteneurs STL, �a va tr�s mal ensemble, les destructeurs ne sont pas virtuels.
    J'avais oubli�

    Il n'y a peut �tre pas besoin d'h�ritage alors, je sais que les it�rateurs doivent h�riter de pas mal de choses ( mais il suffit d'utiliser ceux du vecteur "data"), mais pour les conteneurs je ne suis pas s�r que ce soit le cas.

  9. #9
    Membre chevronn�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Sant�

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par d�faut
    Citation Envoy� par Iradrille Voir le message
    L'h�ritage et les conteneurs STL, �a va tr�s mal ensemble, les destructeurs ne sont pas virtuels.
    ... ce qui n'emp�che pas d'utiliser l'h�ritage priv�, de rendre publiques les m�thodes de std::vector que l'on souhaite exposer, et d'impl�menter sois-m�me celles qui ont un comportement diff�rent de la base :
    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
    template<typename T>
    class Ligne : private std::vector<T> {
        using base = std::vector<T>;
     
    public :
        using base::iterator;
        using base::const_iterator;
        using base::reverse_iterator;
        using base::const_reverse_iterator;
     
        using base::begin;
        using base::end;
        using base::rbegin;
        using base::rend;
     
        // ...
     
        T& operator [] (std::size_t i) { ... }
        const T& operator [] (std::size_t i) const { ... }
    }

  10. #10
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Citation Envoy� par Kalith Voir le message
    ... ce qui n'emp�che pas d'utiliser l'h�ritage priv�
    ok, je connaissais pas �a, �a peut �tre utile dans pas mal de cas, merci =)

  11. #11
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Citation Envoy� par Iradrille Voir le message
    L'h�ritage et les conteneurs STL, �a va tr�s mal ensemble, les destructeurs ne sont pas virtuels.
    Ce qui ne d�range que si tu comptes utiliser ton container avec du polymorphisme
    Ecrire class MyVector : public std::vector ne g�ne en rien tant que tu ne manipules par MyVector comme �tant un std::vector, mais uniquement des MyVector
    Ca revient plus ou moins � se limiter � l'h�ritage private dans son utilisation, moyennant un minimum d'attention du programmeur.
    C'est pas forc�ment du plus propre, mais quel gain de temps on peut gagner
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  12. #12
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Bonjour,

    Ce que vous proposez est int�ressant, mais je n'ai malheureusement pas le temps pour l'impl�menter.

    Je vais donc en rester � l'existant pour �viter les probl�mes de manque de localit� des donn�es.

  13. #13
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    En fait, comme je compte mettre mes vecteurs en m�moire partag�e, o� la m�moire allouable est contrainte dans un espace r�duit, je ne devrais finalement pas �tre confront� au probl�me de la localit� des donn�es.

  14. #14
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Attention, pas de pointeurs dans la m�moire partag�e.
    (des pointeurs vers elle, ok, mais pas dedans)

  15. #15
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Boost.Interprocess offre un pointeur intelligent bas� sur un offset pour g�rer l'utilisation des pointeurs.

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par leternel Voir le message
    Attention, pas de pointeurs dans la m�moire partag�e.
    (des pointeurs vers elle, ok, mais pas dedans)
    Si des pointeurs dans la m�moire partag�e pointent vers une zone de cette m�me m�moire partag�e est-ce qu'il y a vraiment un probl�me ?
    Je pense que non mais je commence � avoir un doute

  17. #17
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Je d�bute dans le domaine, mais d'apr�s ce que j'ai cru comprendre, il n'y a pas moyen de travailler avec des pointeurs, quelle que soit leur forme, entre deux zones m�moire.

    Si c'est au sein de la m�me zone m�moire, il faut utiliser un pointeur sp�cial, sauf si c'est un seul et unique processus qui travaille avec ces pointeurs.

  18. #18
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    les m�moires partag�es sont "mapp�s" vers des blocs de m�moires internes � chaque processus.
    ainsi, la "shared adress 17" peut �tre � l'adresse 134 pour process1 et 812 pour process2;

    &"shared adress 17" = 134 dans process1 et &"shared adress 17" = 812 dans process2

    dans process1, stoquer l'adresse 134 dans un pointeur partag� ne le traduit pas pour process2.

  19. #19
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Si des pointeurs dans la m�moire partag�e pointent vers une zone de cette m�me m�moire partag�e est-ce qu'il y a vraiment un probl�me ?
    Je pense que non mais je commence � avoir un doute
    Pas possible. La zone m�moire peut �tre mapp�e � deux adresses diff�rentes (0x7000a000 et 0x7000b000 par exemple) dans deux process diff�rents. Du coup, un pointeur 0x7000a110 dans la zone de m�moire partag�e ne pourra pas �tre utilis�e dans la seconde.

    offset_ptr<> dans boost.interprocess stocke l'offset entre l'objet offset_ptr<> et la cible - donc, dans le cas des deux exemple, si (p = this = 0x700a100 = 0x10), offset. Le d�r�f�rencement de offset_ptr<> effectue l'op�ration inverse. Sur la seconde zone, (p = this = 0x7000b100, donc *p = (0x7000b100+offset) = 0x7000b110.

    Il y a des petites astuces sur la copie, le move... pour que l'offset reste toujours valide quelque soit l'instance de offset_ptr<> consid�r�e.

    C'est la seule mani�re de proc�der (mani�re � laquelle je n'avais pas pens�, d'ailleurs).
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. R�ponses: 0
    Dernier message: 14/07/2010, 23h35
  2. R�ponses: 2
    Dernier message: 23/08/2007, 12h22
  3. R�ponses: 3
    Dernier message: 25/04/2007, 09h45
  4. R�ponses: 1
    Dernier message: 02/04/2007, 15h26
  5. [C#] Performance : c'est mieux un tableau ou un ArrayList?
    Par trotters213 dans le forum Windows Forms
    R�ponses: 14
    Dernier message: 31/03/2005, 11h59

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