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 :

Coûts du polymorphisme


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2014
    Messages : 10
    Points : 14
    Points
    14
    Par défaut Coûts du polymorphisme
    Bonjour,

    Je fait une application c++ avec du polymorphisme.
    Je suis sur une ancienne version de visual studio 2012 (j'ai un veux ordinateur).
    J'ai plusieurs millier d'objets qui utilisent des fonctions virtuelles plusieurs fois par secondes (petit moteur de jeux perso).

    J'ai trouver cette article qui expérimente 5 techniques pour le polymorphisme (compatible MSVC, gcc et Clang).
    - Fonction virtuelle mise en cache
    - Accès directe à la fonction mise en cache
    - Fonction virtuelle pas mise en cache
    - Accès directe à la fonction pas mise en cache
    - Accès directe à la fonction virtuelle pas mise en cache

    J'ai 2 questions:
    1) Les compilateurs d'aujourd'hui peuvent t'ils optimiser le polymorphisme par eux même, l'article qui date de 2019 est t'il encore d'actualité aujourd'hui?
    2) J'aimerais savoir ce que les utilisateurs expérimentés en c++ pense de cette article?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    7 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 7 060
    Points : 32 652
    Points
    32 652
    Billets dans le blog
    4
    Par défaut
    Quand j'ai débuté ma carrière y'a 10-15 ans, la règle était que virtual était cher et de l'éviter au maximum.
    Maintenant tu ouvres UE, tu peux voir que quasi tout est virtual et le focus se porte plutôt sur la mémoire, le cache et les cache miss.
    Le langag e a sans doute évolué, et surtout les outils.
    Je pense que ça reste une bonne pratique de ne pas mettre absolument tout en virtual, mais il ne faut pas non plus tenter de l'éviter coûte que coûte à moins d'avoir un profiler qui indique que oui il y aurait un gain. Mais d'après le graph de ton lien, le gain le plus important semble rester le cache de toutes façons, donc autant mettre ses efforts sur ça directement.
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2014
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Merci Bousk pour tes conseilles
    Oui pour les optimisations tous semble tourner autour du cache et lire la mémoire Ram le moins possible (avoir un code cache friendly).

  4. #4
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    décembre 2019
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 93
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : décembre 2019
    Messages : 540
    Points : 1 212
    Points
    1 212
    Par défaut
    Salut,

    Instinctivement je dirais qu'en dehors de la boucle de jeu (game loop) le coût est nul et non avenu, ce qui réduit la problématique à une question d'organisation en fait.

    De souvenir, pour aller plus loin dans la performance, on peut compléter (ou en alternative) avec de la programmation orientée données où l'on fera utilement la différence entre données froides et données chaudes pour justement aller encore plus loin dans les perfs.

    Enfin ne perdons pas de vue que lorsque les performances (intrinsèques) augmentent, les exigences matérielles baissent, et c'est là tout l'intérêt de la chose, améliorer l'expérience utilisateur et toucher le plus de monde possible.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2014
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Bonjour kaitlyn.

    Oui la boucle de jeu (game loop), c'est là que je veux le plus optimiser.

    Pour les données froides (statique) et données chaudes (dynamique) j'essaye de placer mes const au bon endroit.

    Pour mes optimisations:
    - Utiliser le parallélisme CPU (enkiTS)
    - Utiliser le parallélisme GPU (Compute Shader)
    - Utiliser les fonctions intrinsics.
    - Structure de donnée et algorithmes.
    - Code cache friendly pour limiter le plus possible la lecture dans la mémoire RAM.

    Mais, oui le plus important c'est le gameplay du jeu et l'expérience utilisateur.
    Le jeu peut être bien optimisé et être nulle comme le jeu peut être mal optimiser et être un succès.

  6. #6
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    décembre 2019
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 93
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : décembre 2019
    Messages : 540
    Points : 1 212
    Points
    1 212
    Par défaut
    Salut,

    Citation Envoyé par dem32 Voir le message
    Pour les données froides (statique) et données chaudes (dynamique) j'essaye de placer mes const au bon endroit.
    Non, données froides/chaudes dans le contexte de la programmation orientée données.
    En gros tu divises physiquement ta structure de données en deux, les données chaudes étant les données que tu utilises fréquemment et que tu auras donc tout intérêt à faire en sorte que ça reste en cache cpu (L2). Ça sera difficilement le cas si tu l'encombres de données non vitales.

Discussions similaires

  1. Coût polymorphisme
    Par RockwoodGuitar dans le forum C++
    Réponses: 17
    Dernier message: 02/02/2006, 22h17
  2. Icône a coté du texte dans une ListBox
    Par joce3000 dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/12/2003, 02h25
  3. [Concept] Curseur coté client et curseur coté serveur
    Par freud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/09/2002, 22h13
  4. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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