AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Parameter in FPU laden (Assembler)
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter in FPU laden (Assembler)

Ein Thema von mwilms · begonnen am 24. Nov 2022 · letzter Beitrag vom 29. Nov 2022
Antwort Antwort
Seite 2 von 2     12   
HintByError

Registriert seit: 13. Dez 2018
Ort: Marburg
21 Beiträge
 
Delphi XE2 Professional
 
#11

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 16:44
Die FPU-Instruktionen sollen im 64-Bitmodus nicht mehr verwendet werden. Die im 64-Bit-Modus vorhandene FPU ist nur für die Umstellung von FPU-Code, der in 32-Bit-Assembler geschrieben wurde, in den 64-Bit-Modus vorhanden.
Zitat:
FPU instructions
The x87* ‬FPU instructions are executed by the so-called "math coprocessor"‬.* ‬These instructions operate on floating-point,* integer,* ‬and binary-coded decimal (BCD) ‬operands.* The main purpose of these instructions are to perform floating-point arithmetic.* ‬But nowadays we have SIMD instructions that are much faster than FPU.* ‬So,* please,* don't use the FPU in newly written code,* because it usage is marked as outdated in Linux ‬64* ‬ABI.* ‬Use SIMD instead.
Quelle: https://linasm.sourceforge.net/docs/...ions/index.php

Soweit ich das vor Jahren ausgetestet habe, ist die Umsetzung der FPU-Instruktionen im 64-Bit-Modus im Detail nicht identisch mit der Umsetzung im 32-Bit-Modus. Da liegen dann die Tücken bei der Verwendung der FPU-Instruktionen im 64-Bit-Modus verborgen.
Wolfgang Sauer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 17:35
Nicht direkt "simulation" ... die FPU ist aktuell einfach nur direkt in der CPU eingebaut. (sie ist aber nur mit dem 32 Bit-System verdrahtet, bzw. es könnte auch sein, dass es sie oftmals garnicht mehr gibt und ihre Register/ControlCodes z.B. ans SSE umgeleitet werden, aber egal)

(so wie heute oftmals auch gleich die Nouthbridge, Southbridge, IO-Controller, GPU/GrafikKarte, SoundKarte, SATA-Controller, LAN-Controller, USB-Controller, Caches uvm. direkt im CPU-Chip integriert sind)



Beim Design der 64 Bit Architektur hat man aber so Einiges verändert und Fließkommazahlen werden nicht mehr über die FPU (floating point processing unit) berechnet.
Schon für 32 Bit gab es mit der Zeit immer mehrer Erweiterungen, z.B. MMX/SSE.
In 64 Bit wird nur noch mit den SSE-Registern gerechnet und die alten ST-Register der FPU gibt es nicht mehr und entsprechend haben sich auch die Befehlssätze verändert.
$2B or not $2B

Geändert von himitsu (24. Nov 2022 um 17:39 Uhr)
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#13

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 17:47
Soweit ich das vor Jahren ausgetestet habe, ist die Umsetzung der FPU-Instruktionen im 64-Bit-Modus im Detail nicht identisch mit der Umsetzung im 32-Bit-Modus.
Hallo Wolfgang,
grundsätzlich habe ich mich mit der FPU nicht im Detail beschäftigt.
Aber meines Wissens kann man das Verhalten der FPU steuern.
Hast du dich da diesbezüglich mal vertieft?

Bei Berechnungen hast du mit der FPU jedenfalls eine massiven Vorteil was die Genauigkeit betrifft.

Interessant finde ich die Aussage mit der Geschwindigkeit.
Mal sehen was die Tests sagen.

Ich werde das aus gegebenem Anlass testen.
Mir gehts grade um die Performance bei compare für Gleitkommazahlen und da spielt die Genauigkeit nun mal keine Rolle.
Da die Befehle ja auch alle in der 32 Bit Simulation unterstützt werden, kann man die ja immer einsetzen.



Danke jedenfalls für den Hinweis.
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#14

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 18:42
In 64 Bit wird nur noch mit den SSE-Registern gerechnet und die alten ST-Register der FPU gibt es nicht mehr und entsprechend haben sich auch die Befehlssätze verändert.
Also habs jetzt aufgrund deiner Aussage getestet.
64 Bit Anwendung, da funktioniert in der FPU alles ganz normal.
Und natürlich sind die ST Register alle vorhanden.
Vielleicht ist es ja CPU abhängig, aber mich wundern diese ganzen Aussagen schon.
Schau einfach mal bei deinem Rechner nach.

Hab Logarithmus und Multiplikation mit asm Anweisungen getestet.
Mach mal Logarithmus in Delphi und schau mal was die CPU da macht.
Das sind mehrere hundert Anweisungen mit Objekten mit x Speicherfreigaben erforderlich.
Da schaut mal blöd was da passiert.

Aber von der Hardwareentwicklung habe ich keine Ahnung.
Kann nur beurteilen was ich sehe.
LG Markus

Geändert von markus888 (24. Nov 2022 um 18:45 Uhr)
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#15

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 19:34
Mal sehen was die Tests sagen.
Also die SSE Anweisung ist bei meinem Testrechner beim Vergleich der Gleitkommazahl etwa 50% schneller wie die FPU.

Das passt natürlich perfekt.
  Mit Zitat antworten Zitat
mwilms

Registriert seit: 23. Nov 2022
Ort: Wolfratshausen
40 Beiträge
 
Delphi 12 Athens
 
#16

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 19:58
Vielen Dank für Eure Beiträge.
Scheinbar ist meine Programmierweise der FPU etwas antiquiert
Wäre aber mal interessant zu wissen, was die übliche FPU Programmierung in Delphi unter Windows64 verhindert.
Aus meiner Sicht wäre das doch möglich, oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#17

AW: Parameter in FPU laden (Assembler)

  Alt 24. Nov 2022, 21:51
Wäre aber mal interessant zu wissen, was die übliche FPU Programmierung in Delphi unter Windows64 verhindert.
Das var .

Nur für Win32 kann Delphi noch sehr viel, sogar Inline-Assembler. (alles, was vor Embarcadero mal gebaut wurde)
Ansonsten kann Delphi entweder kein Assembler, oder z.B. für Win64 ausschließlich "komplette" Assembler-Methoden. (Funktions-Header und sonst nichts außer asm ... end; , also lokale Variablen im Assembler -> Register bzw. manuell auf den Stack)

lokale Variablen würden zusätzlichen Code für Erstellung und Freigabe bedeuten.
$2B or not $2B

Geändert von himitsu (24. Nov 2022 um 21:55 Uhr)
  Mit Zitat antworten Zitat
mwilms

Registriert seit: 23. Nov 2022
Ort: Wolfratshausen
40 Beiträge
 
Delphi 12 Athens
 
#18

AW: Parameter in FPU laden (Assembler)

  Alt 26. Nov 2022, 11:57
Bin auch auf folgende Lösung gekommen:

Delphi-Quellcode:
procedure TestParm(A: double);
var
  B: double;
asm
  movsd B,XMM0
  FLD B
end;
Aber in der Registeransicht der FPU Register erscheint der Wert merkwürdigerweise nicht ?!
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#19

AW: Parameter in FPU laden (Assembler)

  Alt 26. Nov 2022, 14:52
Aber in der Registeransicht der FPU Register erscheint der Wert merkwürdigerweise nicht ?!
Hab dir schon bei meinem Post #8 einen funktionierenden Code gepostet.
Vielleicht mal ansehen.
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#20

AW: Parameter in FPU laden (Assembler)

  Alt 29. Nov 2022, 16:25
@mwilms,
hast du jetzt geprüft, ob der Code funktioniert?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz