Seite 3 von 4

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 14:56
von bobobo
Für ein Profiling mit F5 reicht es, wenn man noch ein pb-tool konfiguriert
und dort als Argumente "%TEMPFILE" "%COMPILEFILE" übergibt.
und dann "Vor dem Kompilieren/Starten" auswählt.

dann steht natürlich letztlich als Name in dem Profiler immer tempfile .. drin
Dafür hat man dann adhoc Ergebnisse.

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 15:22
von c4s
Danke Kiffi, da hatte ich mich wohl im englischen Forum verlesen. Man muss also eine Executable erstellen und diese dann ausführen um Logs zu erhalten (sofern bei der Frage "Ja" ausgewählt wurde).

Ich konnte nun sogar mein Großprojekt damit starten, wobei das kompilieren ganze 2 Minuten gedauert hat (anstatt < 1sec) und die Dateigröße sich verfünffachte. :shock: Ich dachte schon Purefiler.exe hätte sich aufgehängt, da der Taskmanager über diese 2 Minuten 100% Auslastung und einen um 200mb gestiegenen Speicherverbrauch anzeigte.
Naja hat dann doch funktioniert, wobei wohl die Utf8-Codierung des Quelltextes nicht funktioniert. So wurden alle "Ä" zu "ç" (oder ähnliches). Im Analyse-Modus wurde mir (deswegen?) nur eine leere Zeile zum auswählen angezeigt und mit einem Klick darauf bekam ich leider keinen Inhalt...

Mit einem anderen Quellcode hat es aber natürlich hervorragend funktioniert! :allright:


Gut wären noch Optionen zum Löschen bestimmter Timestamps.
Was ich außerdem etwas problematisch für den Unwissenden finde ist, dass die Exe in den Purfiler-Ordner kopiert wird (?). Mit meinen Test-Exe's haben sich da schnell ein paar MB zusammengesammelt.

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 15:51
von Didelphodon
cxAlex hat geschrieben:Von mir auch mal ein Fettes Lob, kann ich gut brauchen dein Tool :allright:

Leider scheint es mit ASM nicht so zurechtzukommen, folgender Code wirft einen ASM - Error mit deinem Profiler:

Code: Alles auswählen

Procedure _CreateHash(*pKey.CHARACTER, Mapsize.i)
  CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
    !MOV EAX,5381            ;Startwert hash
    !MOV EBX,EAX             ;für erste Addition in Schleife
    !MOV ESI,dword[p.p_pKey] ;oder LEA ESI,[v_pKey], aber wenn p_pKey eh schon da ist...
    !XOR EDX,EDX             ;EDX auf Null setzen
    !MOV CL,5                ;sollte so schneller sein
    !@@:
    !MOV DL,[ESI]            ;also kein Unicode!
    !OR DL,DL                ;Test auf Null
    !JZ @f                   ;ist Null, Sprung vorwärts
    !SHL EAX,CL              
    !ADD EAX,EBX
    !ADD EAX,EDX
    !MOV EBX,EAX             ;"alten" hash sichern
    !INC ESI
    !JMP @b                  ;Sprung rückwärts, nächsten Wert einlesen
    !@@:
    !MOV dword[p.p_pKey],esi ;wirklich Pointer erhöhen? Sonst weg
    !XOR EDX,EDX             ;schneller und richtiger (!) als CDQ ich gehe hier mal von vorzeichenlosen Werten aus
    !DIV dword[p.v_Mapsize]  ;EAX ist noch hash
    !MOV EAX,EDX             ;Divisions-Rest
  CompilerElse
    !MOV RAX,5381            ;Startwert hash
    !MOV RBX,RAX             ;für erste Addition in Schleife
    !MOV ESI,dword[p.p_pKey] ;oder LEA ESI,[v_pKey], aber wenn p_pKey eh schon da ist...
    !XOR RDX,RDX             ;EDX auf Null setzen
    !MOV CL,5                ;sollte so schneller sein
    !@@:
    !MOV DL,[ESI]            ;also kein Unicode!
    !OR DL,DL                ;Test auf Null
    !JZ @f                   ;ist Null, Sprung vorwärts
    !SHL RAX,CL              ;SHL = SAL; SAL wird selten angegeben
    !ADD RAX,RBX
    !ADD RAX,RDX
    !MOV RBX,RAX             ;"alten" hash sichern
    !INC ESI
    !JMP @b                  ;Sprung rückwärts, nächsten Wert einlesen
    !@@:
    !MOV dword[p.p_pKey],esi ;wirklich Pointer erhöhen? Sonst weg
    !XOR RDX,RDX             ;schneller und richtiger (!) als CDQ ich gehe hier mal von vorzeichenlosen Werten aus
    !DIV dword[p.v_Mapsize]  ;EAX ist noch hash
    !MOV RAX,RDX             ;Divisions-Rest
  CompilerEndIf
  ProcedureReturn        ;Gibt Hash in EAX zurück
EndProcedure

_CreateHash(@"test", 1000)
Gruß, Alex
Ansich kommt der Purefiler auch mit ASM zurecht. Worüber er bei Deinem Code stolpert, ist "!@@:", weil er's als zusammengehängte Zeilen interpretiert - muss ich noch überarbeiten. "!@@:" ... was macht das eigentlich?

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 15:58
von cxAlex
Das ist eine Einsprungpunkt für den ASM - Source. @f springt zum nächsten, @b zum vorherigen dieser Punkte. Das ganze ist eine Hashing Algo für eine Hashmap.

Gruß, Alex

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 16:04
von Didelphodon
cxAlex hat geschrieben:Das ist eine Einsprungpunkt für den ASM - Source. @f springt zum nächsten, @b zum vorherigen dieser Punkte. Das ganze ist eine Hashing Algo für eine Hashmap.

Gruß, Alex
Ok, Danke für die Info - ist behoben. Build 86 ist online.

LG Didel.

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 16:12
von cxAlex
Danke :)

Jetzt kompiliert der Source zwar durch, das entstandene Programm stürzt aber ab :P

Gruß, Alex

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 17:00
von Didelphodon
cxAlex hat geschrieben:Danke :)

Jetzt kompiliert der Source zwar durch, das entstandene Programm stürzt aber ab :P

Gruß, Alex
Hm, ich habs auch ausprobiert, bei mir läuft das entstandene Programm aber problemlos - allerdings weiß ich nicht Deine Compilereinstellungen, ich hab's bei mir einfach in ein Default-New reingekippt.

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 18:35
von cxAlex
Lad dir mal die neueste Version von Simple Container (in meiner Signatur oder direkt) herunter und versuche SC_Test.pb mit Purefiler zu kompilieren. Danke.

Gruß, Alex

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 21:07
von Didelphodon
cxAlex hat geschrieben:Lad dir mal die neueste Version von Simple Container (in meiner Signatur oder direkt) herunter und versuche SC_Test.pb mit Purefiler zu kompilieren. Danke.

Gruß, Alex
Werd ich ausprobieren. Btw., compilierst Du auf x86 oder x64?

Re: Purefiler - Ein alternativer Profiler

Verfasst: 27.09.2010 21:49
von Didelphodon
Habe jetzt den Purefiler x64-tauglich gemacht. Vielleicht löst das Probleme - außerdem ist Purefiler jetzt einbisserl schneller - habs geprofiled ;-)
Build 89 ist online.