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.
Optimierung für Sqr(a²+b²) ?
Re: Optimierung für Sqr(a²+b²) ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Optimierung für Sqr(a²+b²) ?
@STARGÅTE:
Extra für Dich
:
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!
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))
@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!