AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gleitkommadivision im Inline-Assembler

Ein Thema von everdream · begonnen am 12. Dez 2007 · letzter Beitrag vom 13. Dez 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Gleitkommadivision im Inline-Assembler

  Alt 12. Dez 2007, 18:39
Was denkst du denn, was eine Variable ist und woher der Wert in die FPU kommt?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Gleitkommadivision im Inline-Assembler

  Alt 13. Dez 2007, 00:21
Zumal hier offenbar eine ganze Menge Grundlagen fehlen. Assembler von Hand zu basteln ist auch selten der erst beste Ansatz. In dem aller größten Teil aller Fälle, wo etwas scheinbar triviales auf ein mal langsam scheint, kann man am Algo an und für sich drehen. Da stecken gewöhnlich mehr als 60% des Optimierungspotentials bei komplexeren Operationen.
Eine Division ist aber auch eine elementare Operation die so direkt von der CPU bzw. FPU mit einer Anweisung durchgeführt wird, und so ziemlich jeder Compiler bekommt es noch auf die Kette diese ganz ganz grundlegenden Dinge optimal zu übersetzen.
Die einzige Chance ist wieder der Algo: Völlig abhängig von der Aufgabe eines Algos kann man hier und da grad Divisionen vermeiden oder durch geschickte Mathematik in schnellere Operationen aufdröseln, aber das ist dermaßen Problemspezifisch, dass dessen Erkennung und Durchführung automatisch eher nicht hinhaut. Ähnlich schaut es mit der Möglichkeit der parallelen Verarbeitung via MMX/SSE aus. Aber auch das sind beides zunächst einmal algorithmische Ansätze, bei denen - ausser bei MMX/SSE - kein einziges Handgeschriebenes Wort Assembler nötig ist.
Wenn irgendwann mal der Algo an und für sich ausgereizt ist, und zudem komplex genug dass ein Automat nicht eine beste Optimierung in Maschinencode schafft, dann kann man sich dran machen, und noch die letzten paar wenigen Prozente an Geschwindigkeit via Handmade-Assembler herauskitzeln. Das lohnt dann häufig mehr wenn man parallelisieren kann; als Beispiel hierfür kann man u.a. 2D-Vektoren anführen, deren elementaren Operationen man ganz hübsch mit SSE verarbeiten kann, da bei denen die 2 Koordinaten unabhängig voneinander sind, und die selben OPs mit ihnen durchgeführt werden.
Aber hier landet man ganz tief in den Details eines Algos, welcher an und für sich schon optimiert sein sollte.

Und eine einzelne Division ohne Kontext eines Algos bietet aufgrund dessen, dass sie elementar ist, genau 0 Optimierungspotential. Was Delphi da raus bringt, ist schon das best mögliche für diesen Fall.

Ich würde ausserdem etwas Lektüre zu Prozessorarchitektur/Registern und Compilern empfehlen. Dann wirst du auch schnell merken, dass dein Vorhaben hier prinzipbedingt zu nicht viel führen wird.

LG,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Gleitkommadivision im Inline-Assembler

  Alt 13. Dez 2007, 00:46
Hallo everdream,


schau Dir mal diesen relativ neuen ASM-Beitrag
an, es geht zwar nicht um eine Divisionsfunktion, aber er verdeutlicht dafür sehr gut das man mit dem Richtigen (Schnellen) – Algorithmus mehr Leistung erzielen kann.
Kurz gesagt: Guter Algorithmus + Pascal = Gute Leistung
Schlechter Algorithmus + ASM = Schlechte Leistung

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  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 10:17 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