2012-04-06 2 views
0

Unsere Top-3-Funktionen werden alle als Thread-Sync-Objekte angezeigt; Meistens WaitForSingleObject().Einige helfen, ein GlowCode-Profil meines Spiels zu interpretieren

Ist diese Funktion extrem anstrengend, selbst wenn sie mit einer 0 aufgerufen wird, um nur den Status eines Threads zu prüfen? Sich sehr um die Werte dieser Funktionen zu kümmern, die um 2 Größenordnungen mehr in der Selbstzeit angezeigt werden als jeder andere Wert, den sie profiliert. Oder vielleicht glüht Glowcode gerade auf diese Funktion aus, weil der Code-Zeiger zufällig da ist, wenn er einen ganzen Haufen lang aussieht.

Antwort

0

Zunächst einmal Don't Look At Self-Time.

Der einzige Grund dafür ist, dass jemand Code schreiben könnte, der zu viel Zeit in engen CPU-Schleifen in seinem eigenen Code verbringt. Verwendet Ihr Programm all seine Zeit damit, Matrizen zu invertieren oder FFT zu machen?

der ganze Grund gprof erfunden wurde, und die ganze Lawine von Profilern, die folgten, ist, dass das reale Software viele Subroutinen enthält, die einander in einem großen Rattennest nennen, und bei weitem der einfachste Weg, zu viel zu nehmen Zeit ist es, Unterprogrammaufrufe zu machen, die vermieden werden könnten. Selbst Zeit setzt diese nicht aus.

Als nächstes, ob Sie Wandzeit oder CPU-Zeit betrachten, wenn WaitForSingleObject() einen großen Teil der Zeit aktiv ist, bedeutet das, dass Ihr Thread meistens auf etwas wartet. Sie müssen herausfinden, was.

Es gibt einen sehr einfachen Weg, um herauszufinden. Drücken Sie einfach Pause, Strg-C, Esc oder eine andere Taste, um die Spur anzuhalten, und schauen Sie sich den Stapel an. Jede Codezeile auf dem Aufrufstapel stellt eine unerfüllte Anforderung dar, die das Programm nicht erwarten würde, wenn diese Anforderung nicht gestellt worden wäre. So wissen Sie, worauf es wartet.

Wenn Sie es fangen, wenn es nicht in WaitForSingleObject() ist, tun Sie es erneut, vielleicht ein paar Mal. Dies scheint mehr Aufwand als Profiling zu sein, aber Sie können wählen, ob Sie das Problem finden oder etwas Einfaches tun.

+0

Vielen Dank für die Antwort und die Links. Ich würde gerne über die Nützlichkeit der Profilerstellung des armen Mannes diskutieren, aber nicht heute. In meinem Beispiel wurde der Profiler auf einen Modus eingestellt, in dem die Thread-Zeit im Gegensatz zur allgemeinen Verwendung eingeschläfert wurde, sodass alle unsere Jobs für ruhende Jobs als von der App verwendete Zeit angezeigt werden. Das Umschalten dieser Option gab mir den Überblick über den Code, nach dem ich gesucht hatte. Ich werde sagen, dass der Thread, den Sie verlinkt haben, eine negative Sicht auf Profiler im Allgemeinen hat. Ich habe festgestellt, dass sie selbst erstaunliche Werkzeuge sind (wenn sie richtig benutzt und eingerichtet werden). –

+0

Und selbst Zeit hat einige wirklich dumme Funktionsaufrufe in unserer Top-10-Gesamtnutzungsliste landen. Schön, wenn diese repariert werden, gibt es einen enormen Schub für die Leistung fast kostenlos. –

+0

@Michael: Ich wurde der "Anti-Profiling-Evangelist" genannt :) Es gibt Probleme, die Profiler finden. Es gibt Probleme, die sie nicht finden. Was das bedeutet, ist die Gesamtbeschleunigung, die Sie mit Profilern künstlich erreichen können. Geschwindigkeit ist begrenzt durch die Probleme, die nicht gefunden werden. In * [this link] (http://sourceforge.net/projects/randompausedemo/files/) * gibt es eine Beschleunigung von 730x. Natürlich kann man skeptisch sein, aber alle Versionen des C++ - Codes sind da, und ich würde gerne sehen, ob das mit diesem Code mit irgendeinem Profiler erreicht werden könnte. –

Verwandte Themen