Seite 3 von 3

Re: Optimierung für Sqr(a²+b²) ?

Verfasst: 01.08.2011 23:23
von STARGÅTE
Hm, ist natürlich schade, dass es nicht "überall" verwendbar ist.

Zumindest ich bekomme die Fehlermeldung:
"[ERROR] Illegale Anweisung. (Ausführungs von binären Daten?)"

Klar muss man bei Optimierungsgeschichten CPU-Spezifisch programmieren, allerdings ist es mir das (noch) nicht wert.

Re: Optimierung für Sqr(a²+b²) ?

Verfasst: 02.08.2011 10:57
von Helle
@STARGÅTE:
Extra für Dich :) :

Code: Alles auswählen

Global PX.f
Global PY.f
Global PF.f
Global X.f      = 100  
Global Y.f      = 75 
Global PX1.f
Global PY1.f
Global PF1.f
Global X1.f     = 100  
Global Y1.f     = 75 
Global Radius.f = 50         ;150

TA = ElapsedMilliseconds()
For i = 1 To 100000000
  PX = X - Radius : PY = Y - Radius
  PF = Sqr(PX * PX + PY * PY) / Radius
Next
TE = ElapsedMilliseconds() - TA

TA1 = ElapsedMilliseconds()
For i = 1 To 100000000
  ;PX1 = X1 - Radius : PY1 = Y1 - Radius
  ;PF = Sqr(PX * PX + PY * PY) / Radius
  !MOVSS xmm3,[v_Radius]
  !MOVAPS xmm2,xmm3  
  !PSLLQ xmm2,32
  !MOVSS xmm2,xmm3
  !MOVSS xmm3,[v_X1]
  !MOVSS xmm0,[v_Y1] 
  !PSLLQ xmm0,32
  !MOVSS xmm0,xmm3  
  !SUBPS xmm0,xmm2
  !MOVAPS xmm1,xmm0
  !MULPS xmm0,xmm1
  !MOVAPS xmm1,xmm0
  !PSRLQ xmm1,32
  !ADDSS xmm0,xmm1
  !RSQRTSS xmm1,xmm0         ;für Grafik ausreichende Genauigkeit
  !MULSS xmm1,xmm2
  !RCPSS xmm0,xmm1
  !MOVSS [v_PF1],xmm0
Next
TE1 = ElapsedMilliseconds() - TA1

MessageRequester("Vergleich", StrF(PF) + #LFCR$ + Str(TE) + #LFCR$ + StrF(PF1) + #LFCR$ + Str(TE1))
Ist ca. 4-mal schneller.
@c4s:
Entschuldigung, ist hier aber wirklich mein letzter ASM-Code!

Gruß
Helle

P.S.: Ich vergaß: Es kann gleichzeitig noch ein weiterer Punkt berechnet werden!