| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| Hazel JLI MVP
 
  
  
 Alter: 40
 Anmeldedatum: 19.07.2002
 Beiträge: 1761
 
 Medaillen: Keine
 
 
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 14:13    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 15:21    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 15:24    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 15:34    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 15:36    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 15:37    Titel: |   |  
				| 
 |  
				| Exakt   
 EDIT: Nennt sich übrigens RAII.
 _________________
 Kochen ist ein NP-schweres Optimierungsproblem.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 19:01    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 19:42    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| The Lord of Programming Living Legend
 
  
 Alter: 38
 Anmeldedatum: 14.03.2003
 Beiträge: 3122
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 20:06    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 20:18    Titel: |   |  
				| 
 |  
				| Ja, damit kann man zB Zeitverschwendende Stellen schnell aufspüren und gezielt optimieren. _________________
 Kochen ist ein NP-schweres Optimierungsproblem.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 21:03    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 21:09    Titel: |   |  
				| 
 |  
				|  	  | 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
  _________________
 Kochen ist ein NP-schweres Optimierungsproblem.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 21:12    Titel: |   |  
				| 
 |  
				| 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 |  | 
	
		|  | 
	
		| Kampfhund Super JLI'ler
 
 
 Alter: 43
 Anmeldedatum: 20.07.2002
 Beiträge: 408
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.08.2004, 21:23    Titel: |   |  
				| 
 |  
				|  	  | 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 |  | 
	
		|  | 
	
		|  |