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 averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 12
    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 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
    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 langage 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 averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 12
    Par d�faut
    Merci Bousk pour tes conseils
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    679
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 679
    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 averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 12
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    679
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 679
    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.

  7. #7
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 12
    Par d�faut
    Merci pour ces infos kaitlyn!

    Il faut mettre les valeurs utiliser des objets dans un m�me tableau pour que le tout soit le plus possible dans la m�moire cache!

    J'ai aussi d�couvert que bient�t la nouvelle technologie va nous donn�e la m�moire r�sistive qui va remplacer la m�moire RAM.
    Cette m�moire va �tre int�gr� direstement dans le processeur ce qui va permettre d'avoir plusieurs Tera de m�moire cache!
    Avec �a on va pouvoir enfin programmer normalement sans faire du code cache friendly!
    La vid�o youtube de cette technologie:

  8. #8
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    A noter qu'Unity d�veloppe depuis quelques ann�es une stack data oriented : ECS / DOTS
    Et les r�sultats, en terme de perf, sont bluffants.
    D'apr�s ce que j'ai compris, les gains sont dus � la fa�on dont sont stock�es les donn�es. Plut�t que d'avoir des objets allou�s de fa�on random, on a des tableaux avec des �l�ments bien contigus en m�moire.
    Ce qui permet des optimisations de parcours (cache, pages processeurs, etc.) et un multithreading plus efficace.
    Ce n'est donc finalement pas tant une question de virtualit�/polymorphisme (vtable), que d'organisation de la m�moire.

  9. #9
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    679
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 679
    Par d�faut
    Salut,

    Oui, dans Unity depuis qu'ils appliquent la programmation orient�e donn�es.
    Et Unity c'est aussi du CSharp, mais ce n'est pas important, et je ne connais pas trop ce langage.

    Par contre en C++, le concept va tr�s loin, au point o� l'on se retrouve (si l'on y adh�re compl�tement, conf mon premier message) � faire du C++ fa�on C, c'est-�-dire pas d'exceptions, pas de STL, pas de Class (notamment � cause du pointeur qui tra�ne), etc, etc, c'est vraiment extr�me.
    � cet effet, on peut utilement se r�f�rer aux pr�sentations vid�os et billets de blog de Mike Acton, qui justement travaillait sur Unity jusqu'il y a peu (pendant au moins 5 ans si je me souviens bien, et il a quitt� la bo�te il y a un ou 2 mois, je ne sais plus).
    Il y a aussi la p�pite de Meyers, une vid�o o� il parle de l'invalidation du cache � cause du faux partage.

    Mike Acton - Data-Oriented Design and C++ [CppCon 2014 - 1:27:45] :
    https://www.youtube.com/watch?v=rX0ItVEVjHc
    Scott Meyers - Cpu Caches and Why You Care [code::dive conference 2014 - 1:16:57] :
    https://www.youtube.com/watch?v=WDIkqP4JbkE

    Pour ceux qui connaissent le concept passez directement � la deuxi�me vid�o.

    Edit:

    D�sol�e pour les fautes. Message �crit sur t�l�phone avec un clavier virtuel pr�dictif qui d�bloque. Faire sans c'est trop fastidieux. Je corrigerai plus tard.

  10. #10
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 12
    Par d�faut
    Merci beaucoup,
    je vais regarder �a la programmation orient�e donn�es!

+ R�pondre � la discussion
Cette discussion est r�solue.

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