Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einfache Funktion in asm übersetzen... (https://www.delphipraxis.net/54501-einfache-funktion-asm-uebersetzen.html)

sniper_w 5. Okt 2005 15:34


Einfache Funktion in asm übersetzen...
 
Delphi-Quellcode:
function VectorLength( const v:array of single ):single;
begin
  Result := sqrt (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
end;
Ich bräuche asm Version dieser Funktion. Wer kann helfen ? Danke.

BenjaminH 5. Okt 2005 15:36

Re: Einfache Funktion in asm übersetzen...
 
Setze da doch einfach einen Haltepunkt hin und schau dir zur Laufzeit da die CPU ansicht an, da steht der asm Code, glaube ich..

tigerman33 5. Okt 2005 16:28

Re: Einfache Funktion in asm übersetzen...
 
Bist du sicher, dass du wirklich asm brauchst? Wenn's dir nur um die Geschwindigkeit geht, wirst du da gegenüber einem modernen Compiler wie Delphi nicht mehr viel rausholen können.

sniper_w 5. Okt 2005 16:36

Re: Einfache Funktion in asm übersetzen...
 
Bei diser Funktion ist die Geschwiendigkeitsgewinn gering, aber sonst gibt es immer ein Geschwindigkeitsgewinn.

tigerman33 5. Okt 2005 16:39

Re: Einfache Funktion in asm übersetzen...
 
Das wollte ich ja auch gar nicht anzweifeln. Bloß ist mittlerweile der von Compilern erzeugte Code schon so weit optimiert, dass im Allgemeinen (also nicht nur bei diesem Beispiel) nur noch geringe Geschwindigkeitsvorteile erzielt werden können. Da muss man dann halt wissen, ob einem das noch den Aufwand wert ist.

ripper8472 5. Okt 2005 16:45

Re: Einfache Funktion in asm übersetzen...
 
guck dir im debugger erstmal an, was der compiler aus der funktion macht.
das kannst du ja hier mal posten.
eventuell ist das auch schon die optimierteste variante.
(kein debug=build, auf release-build stellen!)

Dax 5. Okt 2005 17:20

Re: Einfache Funktion in asm übersetzen...
 
Ich versuch mal mein Glück, muss aber auf keinen Fall stimmen. Das letzte mal, das ich FP-Routinen in Assembler geschrieben hab ist schon ne Weile her ;)

Delphi-Quellcode:
function VectorLength(const v:array of single ):single;
asm
  fld dword ptr [eax]
  fmul st(0), st(0)
  fld dword ptr [eax+4]
  fmul st(0), st(0)
  fld dword ptr [eax+8]
  fmul st(0), st(0)
  fadd
  fadd
  fsqrt
end;

Flocke 5. Okt 2005 17:21

Re: Einfache Funktion in asm übersetzen...
 
... wird so nicht klappen, du hast die Additionen vergessen!

Dax 5. Okt 2005 17:22

Re: Einfache Funktion in asm übersetzen...
 
Habs grad gemerkt und korrigiert :)

dizzy 5. Okt 2005 22:46

Re: Einfache Funktion in asm übersetzen...
 
Ich würde "faddp" benutzen, dann bleibt aufm FPU-Stack nachher nix über. Ich weiss nicht ob das schlimm wäre, aber folgende Variante verrichtet bei mir oft und gut ihre Arbeit:
Delphi-Quellcode:
function VectorLength(const v:array of single ):single;
asm
  fld dword ptr [eax]
  fmul st(0), st(0)
  fld dword ptr [eax+4]
  fmul st(0), st(0)
  fld dword ptr [eax+8]
  fmul st(0), st(0)
  faddp
  faddp
  fsqrt
  fstp result;
end;
Und du hast die Zuweisung an Result vergessen ;).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz