2 Stimmen

Verständnis VTune Bericht

Dies ist eine Fortsetzung eines bestehenden Threads (http://stackoverflow.com/questions/12724887/caching-in-a-high-performance-financial-application) - Ich habe festgestellt, dass es nicht der Cache ist, der meine Anwendung behindert. Um es kurz zu machen, ich habe eine Anwendung, die 70 Prozent der Laufzeit in einer Funktion verbringt (15 Sekunden von 22). Daher möchte ich die Laufzeit dieser Funktion so weit wie möglich verkürzen, da die geplante Verwendung der Funktion für VIEL größere Daten erfolgt (dh 22 Sekunden sind nicht die geplante Laufzeit :)

Das Problem ist, dass mich die Ausgabe von VTune verwirrt, der Code scheint eine enorme Menge an Zeit an absolut unerwarteten Stellen zu verbringen. Ich bin ideenlos, also poste ich mein Projekt hier zusammen mit den Profilerergebnissen.

Beim Blick auf die inkriminierte evaluateExits() Funktion, verwirren mich diese Dinge:

1/ Die Funktion verbringt 2,2s damit, eine Inline-Funktion aufzurufen, die unabhängig von Parametern 1 zurückgibt (Zeile 425, this->contractManager->contractCount()). Hinweis: Die Version, in der die Funktion unabhängig von den Parametern 1 zurückgibt, ist einer der möglichen Fälle, daher kann ich nicht "contractCount=1" angeben und es dabei belassen. Kann die Umleitung von einem virtuellen Tabellenzeiger diese 2,2 Sekunden aufbrauchen (contractCount() ist eine virtuelle Methode)?

2/ Die Funktion verbringt 3,3s mit min(uint1, uint2) (Zeile 432), obwohl ich eine Version von wmin verwende, die so CPU-freundlich wie möglich sein sollte.

3/ Die Funktion verbringt 1,6s mit Zeile 512, was eine sehr triviale Operation ist und die aufgerufene Funktion keine virtuelle ist..

Also die Fragen lauten: Warum dauern diese drei Codezeilen so lange? Was übersehe ich? Und wie könnte ich meinen Code optimieren, um ihn schneller auszuführen? Sollte ich das wmin() durch eine SSE-Version von min für ganze Arrays ersetzen?

Jede Eingabe wird sehr geschätzt. Daniel

BEARBEITEN: Beim Betrachten des Assemblies fand ich heraus, dass in Fall 1/ tatsächlich der vfptr den Code "langsam" macht. Ich ersetzte den Aufruf einer virtuellen Funktion durch einen FastDelegate von Don Clugston, aber es trat keine Leistungsänderung auf (Ich habe keine Ahnung warum). Aufgrund des Kommentars von Nightingale sollten die Anhänge nun alle erforderlichen Dateien enthalten. Allerdings kann die Binärdatei nicht erfolgreich ausgeführt werden, da sie sich mit gemeinsamem Speicher verbindet, in dem Hunderte von MB an Daten vorhanden sind.

Also, ich hänge das gesamte Projekt zusammen mit den Ergebnissen von VTune hier und hier

0voto

Alexey Alexandrov Punkte 2601

Daniel,

Ich wollte mir die VTune-Ergebnisse ansehen, aber leider hast du das Binärmodul nicht mitgeliefert, für das das Ergebnis gesammelt wurde, daher konnte ich den Assembly-Code nicht betrachten, der hier am wichtigsten wäre. Kannst du dein Projektarchiv bitte erneut mit der Binärdatei und der Debug-Informationdatei hochladen?

Ich habe auch versucht, deine Quellen neu zu erstellen, aber einige Headerdateien konnten nicht gefunden werden:

  • Einige Qt-Header (ich habe Qt nicht installiert und bin darin auch kein Experte)
  • parameterHolder.h-Datei
  • externFloatConsts.h-Datei

Um unterstützen zu können, wäre es gut, diese Dateien oder das Binärmodul, das für die Datensammlung verwendet wurde, zur Verfügung zu haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X