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 de calcul] avantage du C ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Par défaut [Temps de calcul] avantage du C ?
    Salut tout le monde,

    Je code en C++ un programme dont une petite partie est très critique en temps de calcul.

    J'ai entendu dire qu'à cause du fait qu'en C++ les objets doivent être "liés" aux méthodes, le C peut être plus rapide que le C++.

    Je voudrais avoir une idée appxoximative de la perte de temps de calcul de l'un par rapport à l'autre. Est ce du genre 1%, 5%, 10% ?

    Aussi il me semblerait intuitif que la perte de temps se passe surtout à l'instanciation des objets. Lorsque tous les objets sont créés et qu'on appelle seulement les méthodes de calcul, est ce qu'on perd encore bcp de temps ?

    PS: merci de ne PAS me dire un truc du genre "c'est les algorithmes qu'il faut optimiser avant tout" , par ce que je le sais bien (j'y travaille) et ce n'est pas l'objet de ma question, j'ai déja lu 100 000 posts à ce sujet

    A+ et merci pour vos idées

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par L. Sierra
    Je voudrais avoir une idée appxoximative de la perte de temps de calcul de l'un par rapport à l'autre. Est ce du genre 1%, 5%, 10% ?
    Aucune réponse sérieuse sans faire des mesures dans des conditions définies et reproductibles.

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    C'est délicat de donner une réponse "professionnelle" à ta question. L'utilisation de méthodes virtuelles, par exemple, entraînent un surcoût, c'est certain, à cause de la manière dont est implanté le mécanisme de ligature dynamique (c'est comme ça qu'on dit en français "dynamique binding"?). J'ai quelques chiffres, mais rien de suffisamment sérieux pour me permettre de diffuser ce genre de tests sur un forum. En C++, tu a le choix de ne pas déclarer une fonction comme virtuelle si tu ne compte pas la surcharger dans une classe dérivée. Puis d'ailleurs, rien ne t'empêche de définir tes fonctions en dehors de toute classe.

    De manière générale, C++ occupe une place très importante dans le domaine de la simulation numérique. Il est possible de réaliser des optimisations très poussées avec ce langage, y compris de programmer dans un style C, si tu arrives à démontrer que tel ou tel idiome C++ entraîne un surcoût inacceptable.

    J'utilise C++ essentiellement pour de la simulation numérique. Si je dois choisir C pour certaines tâches, c'est plus au niveau de la portabilité que de la rapidité que cela se joue.

    Je connais des personnes sur ce forum qui auront certainement un avis plus expérimenté que le mien. Comme le dit Emmanuel, la seul manière sérieuse de répondre à cette question est de réaliser des mesures et de prendre une décision au cas par cas.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par L. Sierra
    J'ai entendu dire qu'à cause du fait qu'en C++ les objets doivent être "liés" aux méthodes, le C peut être plus rapide que le C++.

    Je voudrais avoir une idée appxoximative de la perte de temps de calcul de l'un par rapport à l'autre. Est ce du genre 1%, 5%, 10% ?
    il ya eu déjà des discussions là-dessus.
    Même si tu adresses des classes d'objet aussi complexes soient-elles je doute que cela entraine une perte de performances.
    Les compilateurs sont assez optimisés pour cela.
    Un pointeur que cela soit en C ou C++ restera un pointeur c.a.d une adresse mémoire "live".
    Ce genre de problème pouvait survenir lorsque la taille RAM était petite, les CPU moins performants.
    Maintenant avec des PC avec 512Mo de RAM....et des CPU cadencés à 1Ghz...
    A moins que ton programme soit destiné à de l'embarqué.
    Selon l'utilisation de la pile cela peut influencer sur les performances aussi :
    Forth par exemple utilisait intensivement la pile et était très performant.
    Dans l'optimisation du code c'est les sauts d'une adresse mémoire à une autre et les interruptions matérielles

  5. #5
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Bonjour,

    Entre ceux qui utilise du C++ et veulent optimiser en C, et ceux qui utilise du C et veulent optimiser en Assembleur

    Mais il est évident que si c'est un calcule critique qui demande une extreme rapidité (Calculs graphiques par exemple) il vaut mieux utiliser un langage de bas niveau comme l'assembleur. Mais je ne pense pas que dans ce genre de cas, la différence en C++ et C soit si importante.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Mat.M
    Ce genre de problème pouvait survenir lorsque la taille RAM était petite, les CPU moins performants.
    Maintenant avec des PC avec 512Mo de RAM....et des CPU cadencés à 1Ghz...
    A moins que ton programme soit destiné à de l'embarqué.
    Justement ca risque de dépendre de l'environnement dans lequel tu travailles sur de l'embarqué c'est différent;quand tu as des contraintes temps réelles de l'ordre de la micro ou nano seconde tu n'as pas le choix il faut optimiser(je ne connais pas toutes les techniques utilisées).Maintenant a savoir est-ce que écrire un module C ou C++ ou assembleur ou .. peut te faire gagner ce gain c'est difficile a dire car il faut de toute façon faire des mesures.
    Tu peux aussi,quand cela est possible,augmenter un peu les performances de la plateforme sur laquelle tourne ton programme m'enfin bon...

  7. #7
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Ce qui coûte très cher dans les langages objet, c'est les appels de méthode, à cause des indirections multiples et de la liaison dynamique.

    Si ton programme contient beaucoup d'appels de méthodes, alors il vaut mieux écrire du C avec des appels de fonctions. Par contre, si tu appelles peu de méthodes et que le corps de celles-ci est optimisé, il se peut que la différence ne soit pas très visible en fin de compte.

  8. #8
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    Si ton programme contient beaucoup d'appels de méthodes, alors il vaut mieux écrire du C avec des appels de fonctions.
    Pourquoi? Si le code en contient beaucoup, il est vraissemblable que le code C contiendra beaucoup d'indirection a travers des pointeurs de fonctions. Il faut comparer des choses semblables.

  9. #9
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je ne parlais pas des pointeurs de fonctions, mais des "vrais" appels de fonctions.

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

Discussions similaires

  1. temps de calcul RSA
    Par othland dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 13/03/2006, 11h16
  2. Temps de calcul d'un algo
    Par Rémiz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/12/2005, 13h52
  3. temps de calcul sius VC++ !!
    Par Axiome dans le forum MFC
    Réponses: 16
    Dernier message: 13/12/2005, 09h57
  4. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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