Neuer Thread
Ansicht umschalten Baum an
Avatar von J.Reuther
  • J.Reuther

mehr als 1000 Beiträge seit 22.11.2005

Überholte Betrachtungen

Wenn die Programmiersprache intern native Datenformate der CPU für Integer und Float verwendet umgeht sie diese ganze Problematik, denn alle erwähnten Überlegungen und noch viel mehr (Pipelining, Parallelisierung, Caching von Zwischenergebnissen,...) sind in den Rechenwerken der CPU und den Compilern, die Rechenoperationen zerlegen, bereits berücksichtigt.
Eine Optimierung aus einer Hochsprache heraus kann die Effizienz der aktuellen Hardware- und Compiler-Optimierungen nicht erreichen.

Da ich selbst in einer Zeit mit Computern sozialisiert wurde, als das Zählen von Taktzyklen eine Rolle spielte, kommt hier meine Rechnung, warum Takte zählen nicht mehr lohnt:
Damals, ca. 1990, benötigte eine Ganzzahl-Multiplikation ca. 10 und eine Division ca 160 Taktzyklen. Floating-Point Operationen brachten ca das Doppelte.
Ganz ohne Pipelining und Parallelisierung braucht eine moderne CPU für eine Multiplikation 3 und für eine Division etwa 10 Taktzyklen. Für Floating-Point Operationen etwa 2 Taktzyklen mehr.
Alleine der Konstrukt um zu entscheiden ob man Bit-Shift verwenden soll oder nicht benötigt mindestens 2 Taktzyklen. Mit dem Overhead einer Hochsprache für Variablenzugriffe, Overflow-Catching usw. kommen nochmal 5-10 Taktzyklen dazu.

Es bringt also nichts, die Optimierung in der Hochsprache abzuwickeln.
Einzig die Information, ob der Hochsprachencompiler die nativen Datentypen der CPU verwendet, ist relevant.

Die einzigen Optimierungen, die sich auch heute noch lohnen sind solche, die die Anzahl der Divisionen in einem Algorithmus minimiert, z.B. bei der Lösung von Gleichungssystemen (Gauß-Algorithmus). Das minimiert in der Regel auch die Rundungsfehler ;)

Das Posting wurde vom Benutzer editiert (21.04.2017 10:09).

Bewerten - +
Anzeige