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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

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

Beitrag 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.
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
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

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

Beitrag 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!
Antworten