JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=3733ca77e7c4842771f66a09a1d95acfMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Profiler
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> News
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.09.2002, 13:41    Titel: Profiler Antworten mit Zitat

Hier, hab ich zufällig gefunden:
http://www.2dgame-tutorial.com/sdl/profile.htm
Eine Macro-Sammlung, mit der man seine Spiele profilen kann... simpel aber hilfreich Smile
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 14:13    Titel: Antworten mit Zitat

Nette Idee. Aber das hat leider globale Variablen...und der Code ist nicht sauber/schön/klar geschrieben. Werd mir wohl da selber ne Klasse proggen. Ist ja nciht so schwer jetzt mit STD map & Co. Aber sowas ist schon sehr nützlich um den "störenden Faktor" zu ermitteln, der einem viele schöne Frames kostet...
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 15:21    Titel: Antworten mit Zitat

Man kann sich das Ganze ein wenig erleichtern indem man eine Profile-Klasse erstellt und PROFILE_START bzw END in ihrem Con bzw Destructor aufruft.
Dann legt man in einer Funktion, die man Profilen will einfach eine lokale Instanz der Profile-Klasse an und übergibt dem Constructor den String.
Am Ende der Funktion wird die lokale Instanz automatisch durch aufruf des Destructors zerstört (und es wird automatisch PROFILE_END aufgerufen). Zudem umgeht man damit das Problem bei PROFILE_STOP einen falschen String zu übergeben.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.08.2004, 15:24    Titel: Antworten mit Zitat

Misst du dann nicht einfach nur die Lebensdauer der Familienmitglieder der Klasse ? Soviel bringt das nun auch wieder nicht.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 15:34    Titel: Antworten mit Zitat

Die Instanz der Klasse "lebt" solange bis die Funktion beendet ist.
Du erstellst die Instanz am Anfang der funktion, dann wird die zu Profilende funktion durchlaufen und an ihrem Ende wird die Instanz zerstört.
Der Constructor loggt die Start- und der Destructor die Endzeit.

Man macht im prinzip das gleiche wie mit den Makros, nur benötigt man weniger code und PROFILE_END braucht man garnicht mehr zu schreiben.

EDIT:
Bsp.:
Code:

void ZuProfilendeFunktion()
{
   ProfileSample LokalesSample("bla"); // Constructor wird aufgerufen und startzeit der funktion geloggt

  (LokalesSample.~ProfileSample()) // Am Ende der funktion wird der Destructor aufgerufen welcher die Endzeit loggt
}

_________________
Kochen ist ein NP-schweres Optimierungsproblem.


Zuletzt bearbeitet von Kampfhund am 03.08.2004, 15:36, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 03.08.2004, 15:36    Titel: Antworten mit Zitat

Ach du meinst du erstellst eine ProfilerKlasse:

void FunktionFoo()
{
CProfiler profiler("FunktionFoo");
...
}
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 15:37    Titel: Antworten mit Zitat

Exakt Smile

EDIT: Nennt sich übrigens RAII.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 19:01    Titel: Antworten mit Zitat

Aber wie du das machen willst, ist es nicht möglich alle Ergebnisse am Ende des Programm anzuzeigen oder erst beim Beenden des Programm in eine Datei abzuspeichern, oder doch?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 19:42    Titel: Antworten mit Zitat

Doch, wenn ProfileSample zB als Member einen statischen Pointer auf eine Profiler Klasse hat an die die Ergebnisse geschickt werden (geht sicher auch anders). Die Profiler-Klasse kann dann die Ergebnisse in eine Statistik einbauen.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 20:06    Titel: Antworten mit Zitat

Verstehe ich das richtig, dass das einfach die Zeitspanne misst, die ein Codeschnipsel braucht, um ausgeführt zu werden?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 20:18    Titel: Antworten mit Zitat

Ja, damit kann man zB Zeitverschwendende Stellen schnell aufspüren und gezielt optimieren.
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 21:03    Titel: Antworten mit Zitat

Das ist aber etwas unpraktisch, dass dann wieder an eine übergeordnete Klasse weiterzuleiten oder meinst du dass jede Instanz dieser Klasse die Statistik gemeinsam teilt? Was ist dann bei Multithreading?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 21:09    Titel: Antworten mit Zitat

Zitat:

...oder meinst du dass jede Instanz dieser Klasse die Statistik gemeinsam teilt?


Ja, deswegen der statische Pointer.

Mit Multithreading habe ich mich noch nicht wirklich beschäftigt.
Ich denke aber, dass dies leicht einzubauen ist.
Dazu müsste man wohl die Profiler-Klasse synchronisieren bzw die funktion, die die Ergebnisse in der Profiler-Klasse speichert.... oder so ähnlich Razz
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 21:12    Titel: Antworten mit Zitat

Cool wäre sowas:

Profile(Funktion(param1,param2);

Dass sich die Funktion den Funktionspointer schnappt aufruft und profiled, irgendwie auch den Namen der Funktion ermitteln kann und in die Statistik einträgt...Ich bezweifle aber, dass man den Variablennamen in ein String umwandeln kann, oder geht das?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 03.08.2004, 21:23    Titel: Antworten mit Zitat

Zitat:

Profile(Funktion(param1,param2);


Da gibt es denke ich einige Probleme:
Was ist, wenn der Rückgabewert der Funktion gebraucht wird?
Man könnte es aber so lösen, wenn man den Quellcode der Funktion nicht verändern kann:
Code:

...
{ // neuen "scope" (so hieß das IIRC ) anlegen
ProfileSample("FunktionBla");
return_val = FunktionBla();
}
...


Zitat:

Dass sich die Funktion den Funktionspointer schnappt aufruft und profiled, irgendwie auch den Namen der Funktion ermitteln kann und in die Statistik einträgt...Ich bezweifle aber, dass man den Variablennamen in ein String umwandeln kann, oder geht das?


Willst du, dass der Funktionsname mit Parameter automatisch eingetragen wird?
hm, beim compilieren gehen eigentlich alle Symbole verloren (Funktionsnamen, Variablennamen, ... ), nur bei Dlls bleiben reste in der export-Tabelle. Man könnte höchstens den Funktions-Namen irgendwie per Makro automatisch dem Constructor übergeben. Aber ich glaube so ein Makro gibt es nicht (ich kenne nur __FILE__ und __LINE__).
_________________
Kochen ist ein NP-schweres Optimierungsproblem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> News Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum