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 :

GoingNative 2013 - Andrei Alexandrescu - Ecrire du code rapide en C++, rapidement


Sujet :

C++

  1. #1
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut GoingNative 2013 - Andrei Alexandrescu - Ecrire du code rapide en C++, rapidement
    Andrei Alexandrescu - Ecrire du code rapide en C++, rapidement
    GoingNative 2013

    La conférence de Andrei Alexandrescu lors des GoingNative 2013 est disponible :


    Peaufiner son code est important, cela permet d'avoir mieux qu'un simple proof-of-concept, mais quelque chose de performant.

    A. Alexandrescu rappelle en insistant fortement que la seule intuition qui ne soit pas fausse au sujet de la performance du code, c'est "je devrais mesurer ça".

    Mais la mesure du temps est un problème car elle est gourmande et est assez flou et imprécise. Il recommande d'utiliser des façons détournées de mesurer des performances :
    • vitesse du flux (en byte par seconde par exemple)
    • saturation du CPU
    • consommation d'énergie
    • nombre d'instructions exécutées entre chaque résultat
    • nombre d'écritures


    Organisation des données

    Il s'agit selon lui actuellement du problème n°1 pour les performances.

    Les premiers 64 bits sont les plus importants car ils sont facilement accessibles par le CPU.

    Si vous compressez trop vos données, vous épuiserez vos performances à transformer vos données pour travailler avec.

    Les bitfields ne sont pas fait pour être performants mais réduire la taille des données.

    Dans les valeurs -1, 0, 1 que l'on vous conseille d'utiliser, votre constante préférée devrait être zéro, car le hardware dispose d'opérations spéciales pour interagir avec lui.

    Dévirtualisation

    La virtualité en C++ est très efficace pour les grandes hiérarchies, sont flexibles, et les appels virtuels sont optimisés par du load balancing au niveau du cache d'instructions.
    Cependant, on paye pour la flexibilité potentielle, non celle réalisé en réalité. De plus, on perd en mémoire car le vptr est toujours au début des structures (donc il occupe les 64 premiers bits qui sont si importants), et on ne peut pas changer le type d'un objet in-situ il faut passer par les constructeurs/destructeurs qui sont relativement couteux. La virtualité est beaucoup moins efficace sur des hiérarchies fermées/petites.

    Le switch de type est une possibilité, mais n'est bonne que pour 7 branches maximum, et a l'inconvénient de mélanger le code froid (exécuté rarement) avec le code chaud (exécuté souvent), et le code pour des types différent est obligé d'être concentré en un même point. On échange également la modularité pour des performances.

    Implémenter une vtable à la main, bien que donnant un meilleur contrôle des constructeurs/destructeurs et permettant de changer le type in-situ, est bien plus couteux que la vraie.

    La solution est une vtable verticale. Bien qu'impliquant beaucoup de casts et ne supportant qu'un nombre statique de classes et de fonctions virtuelles, elles sont bien plus performantes puisqu'elles permettent d'accéder à la bonne fonction en une seule opération.

    Pour terminer, après le connaissez vos algorithmes de Sean Parent dans sa conférence qui précède celle-ci, voici le connaissez votre architecture d'Andrei Alexandrescu, cela vous permettra d'écrire un meilleur code.

    Élider ou Déplacer, telle est la question.

    Par rapport à la construction par copie, la construction par déplacement demande peu de travail. L'élision n'en demande aucun. Or, pas de travail est toujours moins de travail que peu de travail.

    Ne faites pas de retour par valeur même si le déplacement est élidé quand cela vous obligera à faire des allocations supplémentaires par ailleurs.

    En tous les cas, mesurez .


    Conférence précédente : Sean Parent - C++ Seasoning
    Évènement : GoingNative 2013

    Et vous,
    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Un point m'a marqué dans la présentation : Sur l'application où ils travaillaient, 1% de gain de perf se traduisait par un gain en énergie consommée pour faire tourner les datacenters de facebook équivalent à plusieurs années de salaire d'ingénieur.

    Dit autrement, on est de nouveau dans une environnement où optimiser son code peut être rentable, et où le coût humain n'est plus le coût le plus important pour une société informatique.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Il y avait eu pas mal de commentaires sur la partie des elisions de copies qui allaient de le sens qu'il ne fallait pas trop aider le compilateurs à faire des micro-optims si mes souvenirs sont bons et que les choses évoluent justement côté compilos.
    Du coup, je ne sais pas trop sur quel pied danser sur ce sujet précis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Qu'est-ce qu'une vtable verticale?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Un point m'a marqué dans la présentation : Sur l'application où ils travaillaient, 1% de gain de perf se traduisait par un gain en énergie consommée pour faire tourner les datacenters de facebook équivalent à plusieurs années de salaire d'ingénieur.

    Dit autrement, on est de nouveau dans une environnement où optimiser son code peut être rentable, et où le coût humain n'est plus le coût le plus important pour une société informatique.
    C'est un peu malhonnête de comparer un coût relatif à un coût absolu.

    Combien y a-t-il d'ingénieur chez Facebook ?
    Quelle est l'économie réalisée par rapport au chiffre d'affaire ?

  6. #6
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    @Luc: je dirais que si tu veux les performances maintenant, tu mesures et tu fait les micros optis. Si tu les veux plus tard ou que tu mises sur la longévité, fait un code simple puisque c'est ce que les compilo seront le plus amenés à optimiser en toute logique.

    @Médinoc: je te conseille de regarder la conférence pour ça, ça prendrait le double de ce qui est écrit ici pour l'expliquer.

    @tous: si quelqu'un se sent de faire un article pour expliquer les vtables, ou même un simple post de forum, je serai ravi de le mettre en valeur dans la rubrique .

    @oodini: on peut ramener ça en relatif : coût en énergie économisée sur le système > salaire équipe nécessaire à optimiser et maintenir le système. Leurs systèmes consomment beaucoup, mais comme ils sont gros (et optimisé au détriment de la propreté/simplicité du code !) ils demandent une équipe d'experts (qui coûtent donc -très- chers !).

  7. #7
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    J'ai eu un peu peur de cette présentation.

    A mon sens, elle présente de techniques avancées (réécriture du polymorphisme), ou autres (les valeurs en retour) dans un contexte très particulier (optimisation du code pour Facebook, ingénieurs hyper qualifié) où chaque microseconde compte, qui pourrait être utilisées hors contexte.

    La quantité de bug généré par le code qui pourrait écrit dans cette optique m'effraie (sans parler du coût de maintenance d'un tel projet)

    Ensuite quand on voit la présentation suivante "Don't help the compiler", qui dit à peu près le contraire. Elle en devient encore plus effrayant.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par germinolegrand Voir le message
    Les appels virtuels sont optimisés par du load balancing au niveau du cache d'instructions.
    Je suis en train de mater la vidéo, et je ne saisis pas bien l'explication.
    Si quelqu'un pouvait m'éclairer...

Discussions similaires

  1. Ecrire le code C de la commande ls -i
    Par twiste dans le forum Linux
    Réponses: 5
    Dernier message: 30/09/2007, 19h20
  2. [VBA-E] Ecrire un fichier texte le plus rapidement possible
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/09/2007, 21h51
  3. Ecrire un code VHDL à partir de Perl
    Par blaise4714 dans le forum VHDL
    Réponses: 1
    Dernier message: 19/06/2007, 15h32
  4. Comment ecrire du code sur plusieurs lignes?
    Par tooneygirl dans le forum Access
    Réponses: 5
    Dernier message: 15/06/2005, 17h03
  5. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 17h58

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