Bisher habe ich nur Rational Quantify verwendet. Ich habe großartige Dinge über Intels VTune gehört, es aber noch nie ausprobiert!
Bearbeiten: Ich suche hauptsächlich nach Software, die den Code instrumentiert, da ich denke, dass dies der einzige Weg ist, um sehr gute Ergebnisse zu erzielen.
Siehe auch:
Was sind einige gute Profiler für natives C ++ unter Windows?
c++
performance
profiling
OysterD
quelle
quelle
Antworten:
Für die Linux-Entwicklung (obwohl einige dieser Tools möglicherweise auf anderen Plattformen funktionieren). Dies sind die beiden großen Namen, die ich kenne. Es gibt viele andere kleinere Namen, die seit einiger Zeit keine aktive Entwicklung mehr gesehen haben.
quelle
Für Linux: Google Perftools
quelle
IMHO ist das Sampling mit einem Debugger die beste Methode. Sie benötigen lediglich eine IDE oder einen Debugger, mit dem Sie das Programm anhalten können. Es nagelt Ihre Leistungsprobleme, bevor Sie den Profiler überhaupt installieren.
quelle
Meine einzige Erfahrung mit der Profilerstellung von C ++ - Code habe ich mit AQTime von AutomatedQA (jetzt SmartBear Software). Es sind verschiedene Arten von Profilern integriert (Leistung, Speicher, Windows-Handles, Ausnahmeverfolgung, statische Analyse usw.) und der Code wird instrumentiert, um die Ergebnisse zu erhalten.
Ich habe es genossen - es hat immer Spaß gemacht, die Stellen zu finden, an denen eine kleine Änderung des Codes die Leistung dramatisch verbessern kann.
quelle
Ich habe noch nie ein Profiling durchgeführt. Gestern habe ich eine ProfilingTimer-Klasse mit einem statischen Zeitplan (eine Map <std :: string, long long>) für die Zeitspeicherung programmiert.
Der Konstruktor speichert das Start-Tick, und der Destruktor berechnet die verstrichene Zeit und fügt sie der Karte hinzu:
In jeder Funktion (oder {Block}), die ich profilieren möchte, muss ich Folgendes hinzufügen:
Das Hinzufügen dieser Zeile in allen Funktionen, die ich profilieren möchte, ist etwas umständlich, da ich raten muss, welche Funktionen viel Zeit in Anspruch nehmen. Aber es funktioniert gut und die Druckfunktion zeigt den Zeitaufwand in% an.
(Arbeitet noch jemand mit einem ähnlichen "hausgemachten Profiling"? Oder ist es einfach nur dumm? Aber es macht Spaß! Hat jemand Verbesserungsvorschläge?
Gibt es eine Art automatisches Hinzufügen einer Zeile zu allen Funktionen?)
quelle
Ich habe Glowcode in der Vergangenheit ausgiebig verwendet und nur positive Erfahrungen damit gemacht. Die Visual Studio-Integration ist wirklich gut und der effizienteste / intuitivste Profiler, den ich je verwendet habe (sogar im Vergleich zu Profilern für verwalteten Code).
Das ist natürlich nutzlos, wenn Sie nicht unter Windows laufen, aber die Frage lässt mir unklar, was genau Ihre Anforderungen sind.
quelle
ohne Zweifel oprofile; Es ist einfach, zuverlässig, erledigt die Aufgabe und kann alle möglichen netten Aufschlüsselungen von Daten liefern.
quelle
Der Profiler in Visual Studio 2008 ist sehr gut: schnell, benutzerfreundlich, klar und gut in die IDE integriert.
quelle
Schauen Sie sich unter Windows Xperf an . Es verwendet ein abgetastetes Profil, verfügt über eine nützliche Benutzeroberfläche und erfordert keine Instrumentierung. Sehr nützlich, um Leistungsprobleme aufzuspüren. Sie können Fragen beantworten wie:
Sie werden ziemlich überrascht sein, wenn Sie die Engpässe finden, da sie wahrscheinlich nicht dort sind, wo Sie es erwartet haben!
quelle
Für die Profilerstellung gelten unterschiedliche Anforderungen. Ist instrumentierter Code in Ordnung oder müssen Sie optimierten Code (oder sogar bereits kompilierten Code) profilieren? Benötigen Sie zeilenweise Profilinformationen? Welches Betriebssystem verwenden Sie? Müssen Sie auch gemeinsam genutzte Bibliotheken profilieren? Was ist mit der Rückverfolgung von Systemaufrufen?
Persönlich verwende ich oprofile für alles, was ich tue, aber das ist möglicherweise nicht in jedem Fall die beste Wahl. Vtune und Shark sind beide ausgezeichnet.
quelle
Da Sie die Plattform, an der Sie arbeiten, nicht erwähnen, sage ich Cachegrind unter Linux. Bestimmt. Es ist Teil des Valgrind-Toolset.
http://valgrind.org/info/tools.html
Ich habe noch nie sein Untermerkmal Callgrind verwendet, da die meisten meiner Code - Optimierung für ist innerhalb Funktionen.
Beachten Sie, dass ein Frontend-KCachegrind verfügbar ist.
quelle
Für die Windows-Entwicklung habe ich den Performance Validator von Software Verification verwendet - er ist schnell, ziemlich genau und preiswert. Das Beste ist jedoch, dass es einen laufenden Prozess instrumentieren kann und Sie die Datenerfassung zur Laufzeit sowohl manuell als auch basierend auf dem Callstack ein- und ausschalten können - ideal für die Profilerstellung eines kleinen Abschnitts eines größeren Programms.
quelle
Für Windows habe ich AMD Codeanalyst, Intel VTune und den Profiler in Visual Studio Team Edition ausprobiert.
Codeanalyst ist fehlerhaft (stürzt häufig ab) und in meinem Code sind die Ergebnisse oft ungenau. Die Benutzeroberfläche ist nicht intuitiv. Um beispielsweise die Anzeige des Aufrufstapels in den Profilergebnissen zu erreichen, müssen Sie auf die Registerkarte "Prozesse" klicken, dann auf den EXE-Dateinamen Ihres Programms klicken und dann auf eine Symbolleistenschaltfläche mit den kleinen Buchstaben "CSS" klicken. Da es sich jedoch um Freeware handelt, können Sie es auch ausprobieren und es funktioniert (mit weniger Funktionen) ohne AMD-Prozessor.
VTune (700 US-Dollar) hat eine schreckliche Benutzeroberfläche IMO; In einem großen Programm ist es schwierig, den gewünschten Aufrufbaum zu finden, und Sie können jeweils nur einen "Knoten" in einem Programm anzeigen (eine Funktion mit ihren unmittelbaren Aufrufern und Anrufern) - Sie können keinen vollständigen anzeigen Baum anrufen. Es gibt eine Aufrufdiagrammansicht, aber ich konnte keine Möglichkeit finden, die relativen Ausführungszeiten im Diagramm anzuzeigen. Mit anderen Worten, die Funktionen in der Grafik sehen unabhängig davon, wie viel Zeit in ihnen verbracht wurde, gleich aus - es ist, als hätten sie den Punkt der Profilerstellung völlig verfehlt.
Der Profiler von Visual Studio verfügt über die beste der drei GUI, kann jedoch aus irgendeinem Grund keine Beispiele aus dem größten Teil meines Codes erfassen (Beispiele werden nur für einige Funktionen in meinem gesamten C ++ - Programm erfasst). Außerdem konnte ich keinen Preis oder eine Möglichkeit finden, es direkt zu kaufen. Aber es kommt mit dem MSDN-Abonnement meines Unternehmens. Visual Studio unterstützt verwalteten, nativen und gemischten Code. Bei den beiden anderen Profilern bin ich mir diesbezüglich nicht sicher.
Zusammenfassend kenne ich noch keinen guten Profiler! Ich werde sicher die anderen Vorschläge hier überprüfen.
quelle
Ich benutze devpartner für die PC-Plattform.
quelle
Ich habe versucht, eine AQTime zu quantifizieren, und Quantify hat aufgrund seiner unschätzbaren Funktionen "Fokus auf Unterbaum" und "Unterbaum löschen" gewonnen.
quelle
Die einzige sensible Antwort ist die PTU von Intel. Natürlich ist es am besten, es auf einem Intel-Prozessor zu verwenden und zumindest auf einem C2D-Computer noch wertvollere Ergebnisse zu erzielen, da die Architektur selbst einfacher ist, aussagekräftige Profile zurückzugeben.
quelle
Ich habe VTune unter Windows und Linux viele Jahre lang mit sehr guten Ergebnissen verwendet. Spätere Versionen haben sich verschlechtert, als sie dieses Produkt an die Qualität und Leistung ihrer russischen Entwicklungsmannschaft ausgelagert haben (erhöhte VTune-Abstürze, oft mehr als 15 Minuten, um eine Analysedatei zu öffnen).
In Bezug auf die Instrumentierung stellen Sie möglicherweise fest, dass dies weniger nützlich ist als Sie denken. Bei Anwendungen, an denen ich gearbeitet habe, verlangsamt das Hinzufügen von Instrumenten das Produkt häufig so sehr, dass es nicht mehr funktioniert (wahre Geschichte: App starten, nach Hause gehen, am nächsten Tag wiederkommen, App wird noch initialisiert). Mit nicht instrumentierten Profilen können Sie auch auf Live-Probleme reagieren. Mit VTune Remote Date Collector kann ich beispielsweise eine Sampling-Sitzung für einen Live-Server mit Hunderten von gleichzeitigen Verbindungen starten, bei denen Leistungsprobleme auftreten und Probleme in der Produktion auftreten, die ich in einer Testumgebung niemals replizieren könnte.
quelle
ElectricFence eignet sich gut zum Debuggen von Mallocs
quelle
Mein Lieblingswerkzeug ist Easy Profiler: http://code.google.com/p/easyprofiler/
Es ist ein Kompilierungszeit-Profiler: Der Quellcode muss manuell mithilfe einer Reihe von Routinen instrumentiert werden, um die Zielregionen zu beschreiben. Sobald die Anwendung ausgeführt und die Maßnahmen automatisch in eine XML-Datei geschrieben wurden, müssen Sie nur noch die Observer-Anwendung öffnen und mit wenigen Klicks auf die Analyse- / Vergleichstools klicken, bevor Sie das Ergebnis in einem qualitativen Diagramm sehen können.
quelle
Visual Studio 2010 Profiler unter Windows. VTune hatte ein großartiges Anrufdiagramm-Tool, das jedoch ab Windows Vista / 7 defekt war. Ich weiß nicht, ob sie es behoben haben.
quelle
Lassen Sie mich einen Stecker für EQATEC geben ... genau das, wonach ich gesucht habe ... einfach zu erlernen und zu verwenden und mir die Informationen zu geben, die ich brauche, um die Hotspots schnell zu finden. Ich ziehe es dem in Visual Studio integrierten vor (obwohl ich das VS 2010 noch nicht ausprobiert habe, um fair zu sein).
Die Fähigkeit, Schnappschüsse zu machen, ist RIESIG. Ich lasse oft eine zusätzliche Analyse und Optimierung durchführen, während ich darauf warte, dass die eigentliche Zielanalyse ausgeführt wird ... ich liebe es.
Oh, und seine Basisversion ist kostenlos!
http://www.eqatec.com/Profiler/
quelle