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 :

Temps cpu pour une instruction


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut Temps cpu pour une instruction
    Bonjour,

    Je commence à faire en peu d'OpenGL et donc tu temps réel et j'aimerais par exemple savoir si faire 3 multiplications de int est plus rapide que de calculer un cosinus ou si faire 2 divisions de float est plus rapide que de faire un sqrt, etc...

    Existe t-il des tableaux qui indique le temps CPU pour les opérateurs/fonctions du C++ ? (* / - + cos, sin, sqrt, etc) ?

    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si tu commences à bidouiller avec OpenGL, tu devrais déjà te pencher sur ce que coûtent les différentes structures / fonctions graphique que tu vas utiliser. C'est beaucoup plus important en termes de performances que des cos ou des multiplications.

    Et puis je ne vois pas pourquoi tu veux comparer des sin à des multiplications, ou des divisions à des racines carrées ; à moins que tu n'implémentes des algorithmes subsidiaires pour les remplacer (ce que tu ne devrais pas faire, du moins pas avant longtemps).

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Sinon, il est souvent trés intéressant de faire des tests de performance soi-même. Si on a le temps, c'est extrêmement formateur. Je viens de découvrir l'analyseur de performance VTune de Intel, dont une version d'évaluation 30jours est disponible en téléchargement sur leur site. Il est vraiment bien.

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    bah, c'est bien simple en fait : a l'heure actuelle, on en sait a peut près rien
    tout ca à cause de l'ensemble des optimisation interne au processeur (cache, préfetch et autre branchement prédictif). En plus, en interne, les instruction processeurs ne sont plus des instruction CISC X86, mais une sorte de RISC.

    les tableau de nombre de cycle par instruction, ca existait il y a 10/15 ans, mais depuis les pentium/pentium2, ca n'a plus trop cours, ca le temps d'execution d'une instruction depend de plus en plus de context d'execution qu'autre chose.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut
    merci

    Citation Envoyé par Laurent Gomila
    Si tu commences à bidouiller avec OpenGL, tu devrais déjà te pencher sur ce que coûtent les différentes structures / fonctions graphique que tu vas utiliser. C'est beaucoup plus important en termes de performances que des cos ou des multiplications.
    J'ai déjà regardé la FAQ pour ça ( http://jeux.developpez.com/faq/openg...meliorer_perfs )

    Citation Envoyé par Laurent Gomila
    Et puis je ne vois pas pourquoi tu veux comparer des sin à des multiplications, ou des divisions à des racines carrées ; à moins que tu n'implémentes des algorithmes subsidiaires pour les remplacer (ce que tu ne devrais pas faire, du moins pas avant longtemps).
    S'était des exemples comme ça que j'ai donné sans trop réfléchir.
    Exemple plus concret : sachant que pour faire une rotation d'un objet, j'ai à ma disposition des matrices et des quaternions : que vaut-il mieux utiliser ?
    - Soit une matrice où le processeur devra calculer X multiplications et Y cos/sin
    - Soit un quaternion où le processeur devra calculer Z multiplications et W cos/sin

    Si j'ai 10 000 cubes dans ma scène avec chacun une matrice de transformation différente, je risque de faire chauffer le processeur si je ne fait pas attention au nombre de cos/sin effectué par le processeur, non ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 13
    Par défaut
    Citation Envoyé par bafman
    bah, c'est bien simple en fait : a l'heure actuelle, on en sait a peut près rien
    tout ca à cause de l'ensemble des optimisation interne au processeur (cache, préfetch et autre branchement prédictif). En plus, en interne, les instruction processeurs ne sont plus des instruction CISC X86, mais une sorte de RISC.

    les tableau de nombre de cycle par instruction, ca existait il y a 10/15 ans, mais depuis les pentium/pentium2, ca n'a plus trop cours, ca le temps d'execution d'une instruction depend de plus en plus de context d'execution qu'autre chose.
    Hum, a vrai dire, je m'attendait en peu à ce genre de réponse : ça dépend trop du processeur

    Merci quand même à tous, je vais voir ce que c'est le testeur de performance d'Intel

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Avant de regarder les cos et les multiplcations qui se cachent derrière les fonctions, cherche ce qui est le plus efficace selon le contexte. En général les quaternions sont plus appropriés pour représenter les rotations, mais une matrice peut parfois être plus appropriée ; ça dépend du contexte.

  8. #8
    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
    Citation Envoyé par Laurent Gomila
    Avant de regarder les cos et les multiplcations qui se cachent derrière les fonctions, cherche ce qui est le plus efficace selon le contexte. En général les quaternions sont plus appropriés pour représenter les rotations, mais une matrice peut parfois être plus appropriée ; ça dépend du contexte.
    Dans quel contexte doit-on préférer les matrices (resp. les quaternions) ?

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il faut préférer les quaternions si on a beaucoup de manipulations à faire dessus (que 4 composantes à manipuler, et les algos sont généralement plus simples).

    Par contre si on doit stocker une rotation qui ne bougera jamais, mieux vaut utiliser une matrice puisque de toute façon ça doit être sous cette forme pour être passé à l'API 3D.

  10. #10
    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
    Ok, je comprends mieux alors.


  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Tout dépend de ce que tu comptes faire de toute maniere....

    Pour l'utilisation de l'OpenGL (ou de Direct3D, c'est pareil), le plus important est de comprendre comment fonctionnent les cartes graphiques aujourd'hui. les APIs existantes ne sont que des front-end à la state-machine du GPU. On place un certain nombre d'états, et on fait le rendu avec cet état là.

    Du coup, il vaut parfois mieux faire un millier de multiplications en plus plutôt que de changer le pipeline pixel (c'est à dire le 'pixel program' ou 'pixel shader'). Un changement de pixel-shader peut aussi couter plus cher qu'un changement de texture.

    Maintenant, si ton programme se charge aussi de la physique il devra faire une somme conséquente de calcul en amont, et il peut valoir le coup d'optimiser cette partie.

    Pour exemple, le moteur sur lequel je travaille, passe les deux matrices de position à T et T+dt au geometry-shader, avec la position dans le temps entre ces deux "frames" physiques. Coté affichage, c'est donc le geometry shader qui s'occupe du blending entre les deux calculs.

Discussions similaires

  1. Formater une chaine pour une instruction SQL
    Par Coicatak dans le forum C#
    Réponses: 5
    Dernier message: 20/12/2011, 23h43
  2. indication pour une instruction
    Par marooh dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 30/11/2010, 17h06
  3. Mesurer le temps CPU sur une machine multicoeurs
    Par Aleph69 dans le forum Langage
    Réponses: 9
    Dernier message: 02/08/2010, 21h46
  4. Réponses: 4
    Dernier message: 07/01/2010, 13h14
  5. limiter cpu pour une application
    Par sboffin dans le forum Administration
    Réponses: 11
    Dernier message: 27/07/2009, 21h19

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