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!