Geschwindigkeit von Pow

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Geschwindigkeit von Pow

Beitrag von Mijikai »

Mit SSE wäre SdP ohne Pow() vermutlich sogar doppelt so schnell :)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Geschwindigkeit von Pow

Beitrag von STARGÅTE »

Bei solchen Geschwindigkeitstests sollte man auch unbedingt auf den Zeitverbrauch der Schleife selbst achten, sowie die CPU Temperatur.

Zumindest bei mir ist das erste Beispiel "distance = Abs(x0-x1)+Abs(y0-y1)" fast genauso schnell, wie wenn ich diese Zeile auskommentiere und nur die Schleife läuft.

PS: mit SSE ist es nicht schneller:

Code: Alles auswählen

EnableExplicit

Define.d x0,y0,x1,y1
Define distance.d
Define i
Define timer

x0 = 2
y0 = 2
x1 = 7
y1 = 8

OpenConsole("")

timer = ElapsedMilliseconds()
For i = 1 To 100000000
   ! MOVLPD xmm0, [v_x0]
   ! MOVHPD xmm0, [v_y0]
   ! MOVLPD xmm1, [v_x1]
   ! MOVHPD xmm1, [v_y1]
   ! SUBPD  xmm0, xmm1
   ! MULPD  xmm0, xmm0
   ! HADDPD xmm0, xmm1
   ! SQRTSD xmm0, xmm0
   ! MOVSD  [v_distance], xmm0
Next
PrintN("Schätzung: "+distance)
PrintN("Millisecs: "+Str(ElapsedMilliseconds()-timer))


PrintN("")

timer = ElapsedMilliseconds()
For i = 1 To 100000000
   distance = Sqr(((x0-x1)*(x0-x1))+((y0-y1)*(y0-y1)))
Next
PrintN("ohne Pow(): "+distance)
PrintN("Millisecs: "+Str(ElapsedMilliseconds()-timer))



PrintN("")
PrintN("Press ENTER") : Input()
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
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Geschwindigkeit von Pow

Beitrag von Mijikai »

STARGÅTE hat geschrieben:Bei solchen Geschwindigkeitstests sollte man auch unbedingt auf den Zeitverbrauch der Schleife selbst achten, sowie die CPU Temperatur.

Zumindest bei mir ist das erste Beispiel "distance = Abs(x0-x1)+Abs(y0-y1)" fast genauso schnell, wie wenn ich diese Zeile auskommentiere und nur die Schleife läuft.

PS: mit SSE ist es nicht schneller:
...
Vielleicht ist es langsamer wegen den Doubles ?
Wenn ich Floats verwende ist SSE eindeutig schneller.

Code: Alles auswählen

PB1_mit_Pow(): 568.9664306641
Millisecs: 14305

PB2_ohne_Pow(): 568.9664306641
Millisecs: 600

PB3_Abs(): 624.0239868164
Millisecs: 287

SSE (Float): 568.9664306641
Millisecs: 272

SSE_Stargate (Double): 568.9664177928
Millisecs: 1101

Press ENTER
Antworten