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 :

[Loki] SmallObject décevant


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut [Loki] SmallObject décevant
    Bonjour,

    j'ai fait un test sur les smallobject de Loki et je suis déçu du résultat.

    J'ai une classe Test avec seulement un int un char[32] et un long.

    Dans une boucle for sur un million d'iterations, j'instancie ma classe de trois façons :

    - Statiquement :
    avec Test t; environ 3 ms
    - Dynamiquement :
    avec Test * t = new Test(); delete t; environ 2,3 secondes
    - Dynamiquement + Hérite de SmallObject<> :
    + de 20 secs

    Alors j'ai du mal comprendre l'utilité de SmallObject ? Logiquement, cela permet de gagner un peu de temps pour les new et delete et également de perdre moins de place en mémoire du fait d'une organisation contigue...

    Pourquoi ai-je des résultats si mauvais ? merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Bon ça va plus être des pistes à creuser que des réponses :

    - As tu testé avec différents ordres d'allocations/désallocations ? Du style un premier programme ou tu désalloues immédiatemment juste après alloué, un autre ou tu alloues plusieurs objets avant de tous les désallouer dans le même ordre, un autre ou tu alloues plusieurs objets avant de les désallouer dans l'ordre inverse, et enfin un dernier ou tu les alloues / désalloues de manière un peu aléatoire. Il me semble que la stratégie de désallocation suivie par les SmallObjects n'est pas optimale dans tous les cas, peut être es-tu tombé sur un cas où la stratégie de l'allocateur standard est plus efficace.

    - Je ne sais pas sur quel OS tu as fait les tests, ni comment les allocateurs mémoires ont évolué depuis 1995 (date à laquelle les SmallObjetcs ont été écrits), peut-être ont-ils été amélioré pour ce type d'allocation.

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Bonsoir,

    Je n'ai pas Modern C++ Design sous la main, mais as-tu regardé si A. Alexandrescu avait écrit quelque chose pouvant t'aider à résoudre ton problème, ou alors l'expliquant ?

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Alp Voir le message
    Bonsoir,

    Je n'ai pas Modern C++ Design sous la main, mais as-tu regardé si A. Alexandrescu avait écrit quelque chose pouvant t'aider à résoudre ton problème, ou alors l'expliquant ?
    Salut,
    ben j'ai lu le chapitre traitant des SmallObjects hier et je me faisait un plaisir de les tester, en pensant suivre l'objectif

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    J'ai trouvé la faille : j'étais en mode Debug !

    En passant en Release, j'observe effectivement de bien meilleures performances, surtout avec le tableau de pointeurs : 53 ms avec les SmallObjects contre plus de 5 secs avec new et delete standards.

    Pour l'allocation et la désallocation immédiate, le standard rattrape un peu de l'écart mais c'est quand même une optimisation appréciable.

    J'adopte!

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Salut,
    le premier c'est ce que j'avais testé initialement.

    J'ai essayé d'allouer un tableau de 64 petits objets puis de les désallouer dans les deux sens, la différence avec les opérateurs new et delete standards diminue un peu mais le temps requis reste environ 5X supérieur. Le sens de désallocation n'a rien changé car je n'ai que 64 éléments dans mon tableau ce qui veut dire que je pense rester dans le même chunk. Pour le delete standard par contre il a été moins rapide à l'envers.
    Pour la désallocation alléatoire, d'après ce que j'ai lu, ce n'est pas optimisé pour.

    Bon, si quelqu'un a une expérience avec la bibliothèque, qu'il vienne la partager !

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

Discussions similaires

  1. Première expérience décevante
    Par magicschou dans le forum Emploi
    Réponses: 5
    Dernier message: 29/12/2006, 14h53
  2. Loki && Tutorial ??
    Par Lofwyr^ dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 24/05/2006, 21h22

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