Bug bei Float Variablen?

Fragen und Bugreports zur PureBasic 4.0-Beta.
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag von armada »

öhm für was ist denn EMMS gut wenn ich fragen dürfte?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag 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 ;)
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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 :)
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag 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?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Das willst du nicht wissen :)
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag 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?
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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.
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag 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 ;)
Gesperrt