Quel Est votre outil de profilage préféré (pour C++) [fermé]

jusqu'à présent, je N'ai utilisé que la quantification rationnelle. J'ai entendu de grandes choses sur la VTune D'Intel, mais je n'ai jamais essayé!

Edit: je suis surtout à la recherche d'un logiciel qui va Instrumenter le code, car je suppose que c'est la seule façon d'obtenir de très bons résultats.


Voir aussi:

Quels sont les bons profileurs pour C++ natif sur Windows?

75
demandé sur Community 2008-08-25 23:09:08

21 réponses

pour le développement de linux (bien que certains de ces outils puissent fonctionner sur d'autres plateformes). Ce sont les deux grands noms que je connais, il y en a plein d'autres plus petits qui n'ont pas vu de développement actif depuis un moment.

31
répondu Al. 2008-08-25 19:32:57

Pour Linux: Google Perftools

  • plus rapide que valgrind (encore, pas si fin)
  • N'a pas besoin d'instrumentation de code
  • Belle sortie graphique (--> kcachegrind)
  • N'mémoire de profilage, cpu-profilage de fuite,-la vérification de la
24
répondu Weidenrinde 2015-12-06 01:47:15

ma seule expérience de profilage de code C++ est avec AQTime par AutomatedQA (maintenant logiciel SmartBear). Il a plusieurs types de profileurs intégrés (performance, Mémoire, poignées de fenêtres, traçage d'exception, analyse statique, etc.), et Instrumente le code pour obtenir les résultats.

j'ai aimé l'utiliser - il a toujours été amusant de trouver ces endroits où un petit changement de code pourrait faire une amélioration spectaculaire de la performance.

6
répondu Matt Dillard 2011-04-18 18:17:17

à mon humble avis, "151910920 de l'échantillonnage à l'aide d'un débogueur est la meilleure méthode. Tout ce dont vous avez besoin est un IDE ou un débogueur qui vous permet d'arrêter le programme. Il cloue vos problèmes de performance avant même que vous obteniez le profileur installé.

6
répondu Mike Dunlavey 2014-12-02 14:39:48

j'ai utilisé Glowcode largement dans le passé et n'ai eu que des expériences positives avec elle. Son intégration dans Visual Studio est vraiment agréable, et c'est le profileur le plus efficace/intuitif que j'ai jamais utilisé (même comparé aux profileurs pour le code géré).

évidemment, cela ne sert à rien si vous ne courez pas sur Windows, mais la question ne me dit pas exactement quelles sont vos exigences.

5
répondu jsight 2008-08-25 19:27:10

le profileur dans Visual Studio 2008 est très bon: rapide, convivial, clair et bien intégré dans L'IDE.

5
répondu Dimitri C. 2009-09-22 07:18:32

je n'ai jamais fait de profilage avant. Hier j'ai programmé une classe ProfilingTimer avec un horaire statique (une map) pour le stockage du temps.

le constructeur stocke la tique de départ, et le destructeur calcule le temps écoulé et l'ajoute à la carte:

ProfilingTimer::ProfilingTimer(std::string name)
 : mLocalName(name)
{
 sNestedName += mLocalName;
 sNestedName += " > ";

 if(sTimetable.find(sNestedName) == sTimetable.end())
  sTimetable[sNestedName] = 0;

 mStartTick = Platform::GetTimerTicks();
}

ProfilingTimer::~ProfilingTimer()
{
 long long totalTicks = Platform::GetTimerTicks() - mStartTick;

 sTimetable[sNestedName] += totalTicks;

 sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}

dans chaque fonction (ou {bloc}) que je veux profiler, je dois ajouter:

ProfilingTimer _ProfilingTimer("identifier");

cette ligne est un peu lourde à ajouter toutes les fonctions que je veux profiler car je dois deviner quelles fonctions prennent beaucoup de temps. Mais il fonctionne bien et la fonction d'impression indique le temps consommé en %.

(Quelqu'un d'autre travaille-t-il avec un"profilage maison" similaire? Ou est-ce tout simplement stupide? Mais c'est amusant! Quelqu'un aurait-il des suggestions d'amélioration?

Est-il une sorte d'auto-ajout d'une ligne à toutes les fonctions?)

5
répondu Moberg 2016-10-08 08:20:08

oprofile, sans doute; c'est simple, fiable, fait le travail, et peut donner à toutes sortes de nice-ventilation de données.

4
répondu Dark Shikari 2008-09-16 08:24:26

Pour Windows, découvrez Xperf . Il utilise le profil échantillonné, a quelques UI utiles, et ne nécessite pas d'instrumentation. Très utile pour repérer les problèmes de performance. Vous pouvez répondre à des questions comme:

  • qui utilise le plus de CPU? Forez jusqu'au nom de la fonction en utilisant des piles d'appels.
  • qui attribue le plus de mémoire?
  • qui fait le plus de requêtes de registre?
  • écrit Disk? etc.

vous serez très surpris lorsque vous trouverez les goulots d'étranglement, car ils ne sont probablement pas là où vous vous attendiez!

4
répondu user15071 2008-09-24 15:50:30

il existe différentes exigences pour le profilage. Le code instrumenté est-il ok, ou avez-vous besoin de profiler du code optimisé (ou même du code déjà compilé)? Avez-vous besoin de renseignements sur le profil ligne par ligne? Quel système d'exploitation utilisez-vous? Avez-vous besoin de profiler les bibliothèques partagées aussi? Qu'en est suivi dans les appels système?

personnellement, j'utilise oprofile pour tout ce que je fais, mais ce n'est peut-être pas le meilleur choix dans tous les cas. VTune et Shark sont également excellents.

3
répondu Louis Brandy 2008-08-25 19:12:02

puisque vous ne mentionnez pas la plate-forme sur laquelle vous travaillez, je dirais cachegrind sous Linux. Certainement. Ça fait partie des outils de Valgrind.

http://valgrind.org/info/tools.html

Je n'ai jamais utilisé sa Sous-fonction Callgrind, puisque la plupart de mon optimisation de code est pour à l'intérieur de fonctions.

notez qu'il y a un frontend KCachegrind disponible.

3
répondu rlerallut 2008-09-24 21:02:45

pour le développement de Windows, j'ai utilisé le logiciel de vérification "Performance Validator - c'est rapide, raisonnablement précis, et à un prix raisonnable. Encore mieux, il peut Instrumenter un processus en cours d'exécution, et vous permet d'activer et désactiver la collecte de données à l'exécution, à la fois manuellement et sur la base de la callstack - idéal pour profiler une petite section d'un programme plus grand.

3
répondu Shog9 2008-09-30 15:38:45

j'utilise devpartner pour la plate-forme pc.

3
répondu EvilTeach 2008-11-05 00:48:00

j'ai essayé de quantifier un AQTime, et de quantifier won en raison de son inestimable 'focus on sub tree' et 'delete sub tree' caractéristiques.

2
répondu eli 2008-09-16 20:41:15

La seule sensibilité réponse est PTU d'Intel. Bien sûr, il est préférable de l'utiliser sur un processeur Intel et d'obtenir des résultats encore plus précieux au moins sur une machine C2D car l'architecture elle-même est plus facile à rendre des profils significatifs.

2
répondu Fabien Hure 2008-09-21 13:47:40

J'ai utilisé VTune sous Windows et Linux pendant de nombreuses années avec de très bons résultats. Les versions plus tardives ont empiré, quand ils ont externalisé ce produit à leur qualité de l'équipe de développement russe et les performances ont tous les deux diminué (crash VTune accrue, souvent plus de 15 minutes pour ouvrir un fichier d'analyse).

en ce qui concerne l'instrumentation, vous découvrirez peut-être qu'elle est moins utile que vous ne le pensez. Dans le type d'applications que j'ai travaillé sur l'ajout d'instrumentation ralentit souvent la produit en baisse tellement qu'il ne fonctionne plus (histoire vraie: démarrer l'application, rentrer à la maison, revenir le lendemain, l'application encore initialisante). En outre, avec profilage non instrumenté, vous pouvez réagir à des problèmes réels. Par exemple, avec VTune remote date collector, je peux lancer une session d'échantillonnage contre un serveur en direct avec des centaines de connexions simultanées qui rencontrent des problèmes de performance et des problèmes de capture qui se produisent en production que je ne pourrais jamais répliquer dans un environnement de test.

2
répondu Don Neufeld 2008-09-30 16:37:32

Pour Windows, J'ai essayé AMD Codeanalyst, Intel VTune et le profileur dans Visual Studio Team Edition.

Codeanalyst est buggy (se plante fréquemment) et sur mon code, ses résultats sont souvent inexacts. Son INTERFACE n'est pas intuitive. Par exemple, pour atteindre l'affichage de pile d'appels dans les résultats de profil, vous devez cliquer sur l'onglet "Processus", puis cliquez sur le nom de fichier EXE de votre programme, puis cliquez sur un bouton de barre d'outils avec les minuscules lettres "CSS" dessus. Mais c'est du freeware, donc vous pouvez aussi bien l'essayer, et il fonctionne (avec moins de fonctionnalités) sans processeur AMD.

VTune (700$) a une interface utilisateur terrible IMO; dans un grand programme, il est difficile de trouver l'arbre d'appel particulier que vous voulez, et vous ne pouvez regarder qu'un "noeud" dans un programme à la fois (une fonction avec ses appelants immédiats et callees)--vous ne pouvez pas regarder un arbre d'appel complet. Il y a une vue de graphique d'appel, mais je n'ai pas pu trouver un moyen de faire l'exécution relative parfois apparaître sur le graphique. En d'autres termes, les fonctions du graphique sont les mêmes, peu importe combien de temps on y a passé--c'est comme si elles avaient complètement manqué le point de profilage.

le profileur de Visual Studio a la meilleure interface graphique des trois, mais pour une raison quelconque il est incapable de collecter des échantillons de la majorité de mon code (les échantillons ne sont collectés que pour quelques fonctions dans l'ensemble de mon programme C++). En outre, je n'ai pas pu trouver un prix ou un moyen de l'acheter directement; mais il vient avec l'abonnement MSDN de mon entreprise. Visual Studio prend en charge le code géré, natif et mixte; Je ne suis pas sûr des deux autres profileurs à cet égard.

en conclusion, je ne connais pas encore de bon profiler! Je ne manquerai pas de vérifier les autres suggestions ici.

2
répondu Qwertie 2008-09-30 22:44:46

ElectricFence fonctionne très bien pour le malloc de débogage

2
répondu Michael McCarty 2008-10-06 17:00:47

mon outil préféré est facile Profiler: http://code.google.com/p/easyprofiler/

c'est un profileur de temps de compilation : le code source doit être instrumenté manuellement en utilisant un ensemble de routines afin de décrire les régions cibles. Cependant, une fois que l'application est lancée, et que les mesures sont automatiquement écrites dans un fichier XML, il suffit d'ouvrir L'application Observer et de faire quelques clics sur les outils d'analyse/comparaison, avant que vous puissiez voir le résultat sur un plan qualitatif graphique.

1
répondu charfeddine.ahmed 2010-06-10 08:53:59

Visual studio 2010 profiler under Windows. VTune avait un outil de graphique d'appel grand, mais il a été cassé à partir de Windows Vista / 7. Je ne sais pas si ils en ont fixé.

1
répondu Coder 2010-11-20 14:38:14

laissez-moi vous donner une fiche pour EQATEC... juste ce que je cherchais... simple à apprendre et à utiliser et me donne les informations dont j'ai besoin pour trouver les points chauds rapidement. Je le préfère de loin à celui qui a été intégré à Visual Studio (même si je n'ai pas encore essayé le VS 2010, pour être honnête).

La capacité de prendre des photos est ÉNORME. Je fais souvent une analyse supplémentaire et une optimisation en attendant que l'analyse de la cible réelle tourne... adorer.

Oh, et sa base la version est gratuite!

http://www.eqatec.com/Profiler /

0
répondu Brian Kennedy 2011-10-01 10:04:56