Seite 3 von 4
Verfasst: 23.08.2006 16:48
von armada
öhm für was ist denn EMMS gut wenn ich fragen dürfte?
Verfasst: 23.08.2006 16:56
von remi_meier
Dieser Befehl ist nötig, damit man danach wieder FPU-Befehle benutzen
kann und diese auch ein Resultat liefern. Wenn du diesen Befehl also
nicht vor der nächsten z. B. Float-Multiplikation ausführst, wird die Multi-
plikation nur Mist sein. Wäre hier wohl nicht nötig, da ich nirgends Floats
benutze.
Verfasst: 23.08.2006 17:02
von MVXA
wenn ich das auf meinem PC, der im Profil beschrieben wird, bekomme
ich nur die Fehlermeldung "Illegal instruction"
Edit:
!PADDQ mm0, qword[v_b]
scheint er nicht zu mögen.
Verfasst: 23.08.2006 17:31
von armada
@remi_meier: aha danke
@MVXA: hmm also bei mir funktioniert das ganze einwandfrei...von daher liegts schonmal nich an dem code...eher an deinem rechner
edit: ich hab das mal getestet:
für 100 millionen additionen:
mit debug:
mit pb: 6133ms
mit asm (also über mmx): 3363ms
ohne debug:
mit pb: 629ms
mit asm: 244ms
und dann das ganze nochmal ohne EMMS
mit debug:
mit pb: 6237ms
mit asm (also über mmx): 3400ms
ohne debug:
mit pb: 628ms
mit asm: 257ms
also die ergebnisse weichen immer en bissl ab...messungenauigkeiten...is ja klar...aber man kann sagen dass die methode über mmx etwa doppelt so schnell is wie die pb-methode

Verfasst: 23.08.2006 18:20
von remi_meier
Man... wieso finde ich nirgends ne gute MMX, SSEX-Referenz... Die wider-
sprechen sich z. T. fast. Scheint so, als wäre PADDQ erst mit SSE2 ver-
fügbar. Eine Methode mit reinem MMX habe ich nicht gefunden.
@armada: Ok, sieht gut aus

Verfasst: 23.08.2006 18:31
von armada
sse2...das könnte natürlich MVXAs (oder neuerdings darf man auch MVXA's schreiben^^) problem lösen...hab nen athlon 64 und somit auch sse, sse2, sse3
aber mich würde mal interessieren wie pb das umsetzt, dass das so viel langsamer is?
Verfasst: 23.08.2006 19:01
von remi_meier
Das willst du nicht wissen

Verfasst: 23.08.2006 19:07
von armada
doch das will ich...
also kannste mir bitte sagen wie pb das umsetzt oder mir zumindest sagen wie ich herausfinde wie pb das macht? mit 2 32bit registern oder wie funktioniert das denn?
Verfasst: 23.08.2006 19:32
von remi_meier
hm...
Das hier ist noch fast schön
Code: Alles auswählen
; pbres.q = a + b
MOV ebx,dword [v_a]
MOV edi,dword [v_a+4]
LEA eax,qword [v_b]
ADD ebx,[eax]
ADC edi,[eax+4]
PUSH edi
PUSH ebx
POP dword [v_pbres]
POP dword [v_pbres+4]
Aber wenn man das als Grundlage nimmt, kann man sich vorstellen, wie
komplexere Ausdrücke aussehen. Jeder kann selbst schauen, mit dem
CLI Compiler-Parameter /COMMENTED.
Für die Addition und die Subtraktion also mit zwei 32-Bit-Registern und
halb-manuellem Übertragsrechnen.
Verfasst: 23.08.2006 19:49
von armada
remi_meier hat geschrieben:hm...
Das hier ist noch fast schön
Code: Alles auswählen
; pbres.q = a + b
MOV ebx,dword [v_a]
MOV edi,dword [v_a+4]
LEA eax,qword [v_b]
ADD ebx,[eax]
ADC edi,[eax+4]
PUSH edi
PUSH ebx
POP dword [v_pbres]
POP dword [v_pbres+4]
Aber wenn man das als Grundlage nimmt, kann man sich vorstellen, wie
komplexere Ausdrücke aussehen. Jeder kann selbst schauen, mit dem
CLI Compiler-Parameter /COMMENTED.
Für die Addition und die Subtraktion also mit zwei 32-Bit-Registern und
halb-manuellem Übertragsrechnen.
ohje...kein wunder, dass das länger dauert...naja aber das is auch nich gerade besonders optimiert (ich gehe mal davon aus, dass das so is, weil der compiler ja auch mit weitaus komplexeren rechenoperationen zurecht kommen muss)
und danke für den tipp mit /COMMENTED
