frage zu x86 code optimizations
-
mngbd schrieb:
Offenbar eine einfache Schaltung mit 4 Addierern, die den jeweiligen Überstand überträgt. Wie sieht ein 4-Bit-Dividierer aus?
Das ist Quatsch, so darfste das nicht vergleichen. Integer- Schaltwerke sind nicht FPU- Zeugs.
Wobei schon bei Integer oft hart verdrahteter Microcode läuft, was dazu führt, daß sich bei vielen MCUs Mul und Div nicht signifikant unterscheiden. Ausnahmen gibt es aber auch, wo es zwar einen HW- Multiplizierer gibt, aber der Dividierer voll in Software läuft (12/64 Zyklen).
Ich vermute mal, um Transistoren zu sparen, wird hier der Trick angewendet, eine Division auf die Multiplikation mit dem Kehrwert abzubilden. Das ist aber nur eine Vermutung und nicht zwingend für alle Architekturen gültig.
Wer lustig ist, sollte sich mal die Rechenwerke der OpenCores angucken. Es läuft immer auf Speed vs. Gateverbrauch raus.Wenn man durch Codeumstellungen helfen kann, daß der Code schneller rennt, heißt das aber noch lange nicht, daß das Zeug auf einer anderen CPU nicht unerwartet lahmt.
-
pointercrash() schrieb:
Wobei schon bei Integer oft hart verdrahteter Microcode läuft, was dazu führt, daß sich bei vielen MCUs Mul und Div nicht signifikant unterscheiden.
Wenn Mul und Div beide hart verdrahtet sind, wie viel schneller ist dann üblicherweise eine Multiplikation? Ohne Logarithmentabelle erwarte ich auch dann merklich mehr Laufzeit, wenn es eine HW-Div gibt. Ist das so?
pointercrash() schrieb:
Ausnahmen gibt es aber auch, wo es zwar einen HW- Multiplizierer gibt, aber der Dividierer voll in Software läuft (12/64 Zyklen).
Ich vermute mal, um Transistoren zu sparen, wird hier der Trick angewendet, eine Division auf die Multiplikation mit dem Kehrwert abzubilden.
Gibt es für den Kehrwert(x) eigentlich ein schnelleres Verfahren?
pointercrash() schrieb:
Wenn man durch Codeumstellungen helfen kann, daß der Code schneller rennt, heißt das aber noch lange nicht, daß das Zeug auf einer anderen CPU nicht unerwartet lahmt.
Schwierig. Wenn ich die Wahl habe, eine oder gar keine Division zu schreiben, schreibe ich lieber gar keine. In solchen Fällen wie oben in Example 2 wäre ich schon bereit, vom Compiler zu verlangen, dass er das selbst optimal kodiert.
-
Gibt es für den Kehrwert(x) eigentlich ein schnelleres Verfahren?
Einfach den Exponenten manipulieren!
-
knivil schrieb:
Gibt es für den Kehrwert(x) eigentlich ein schnelleres Verfahren?
Einfach den Exponenten manipulieren!
Eh?
-
... irgendwie will des LaTeX nicht.
1/x = x^(-1)
-
Und wie übertrage ich diese atemberaubende Erkenntnis nun auf "einfach den Exponenten manipulieren" im Kontext dieses Threads?
-
mngbd schrieb:
Wenn Mul und Div beide hart verdrahtet sind, wie viel schneller ist dann üblicherweise eine Multiplikation? Ohne Logarithmentabelle ... Ist das so?
Muß man unterscheiden. Hart verdrahteter Microcode ist was anderes als Hardware- Multiplizierer/Dividierer. Bei DSPs macht's oft keinen Unterschied. Ist aber auch nur Dokulesedingsbums. Macht aber keiner, wenn man nicht knapp an einer Grenze dran ist. Üblicherweise wird dann halt die CPU zwei Dimensionen fetter eingekauft, für genaue Analysen gibt's kein Geld, also mach' ich's auch nicht.
mngbd schrieb:
Schwierig. Wenn ich die Wahl habe, eine oder gar keine Division zu schreiben, schreibe ich lieber gar keine. In solchen Fällen wie oben in Example 2 wäre ich schon bereit, vom Compiler zu verlangen, dass er das selbst optimal kodiert.
Tun sie üblicherweise nicht, zumindest mein embedded- Zeugs. Dazu müßte der Compiler ja Brüche auflösen und erkennen, daß er das vorher schon mal berechnen lassen wollte. Vielleicht in ein paar Jahren ...
Prinzipiell ist es natürlich eine gute Idee, Divisionen zu vermeiden, ohne Zweifel!
-
Tim schrieb:
Und wie übertrage ich diese atemberaubende Erkenntnis nun auf "einfach den Exponenten manipulieren" im Kontext dieses Threads?
Dir ist echt nicht mehr zu helfen.
Schlag' doch einfach Deinen Hamster tot, sowas kann auch befriedigend sein.
-
Oh, pointercrash() hat mal wieder was an mir auszusetzen
-
Tim schrieb:
Oh, pointercrash() hat mal wieder was an mir auszusetzen
Yep, Du hilfst nicht, Du verlegst Dich auf's Miesmachen.
Du kannst mir nicht weismachen, daß Du gar keine Ahnung davon hast, wo das Problem bei der simplen Exponentenmanipulation liegt.
Einen Beitrag ohne Ausführung einer verständlicheren Alternative niedermachen ist Schrott. Davon hast Du in der letzten Zeit überviel abgeliefert. Nur noch Schrott, keine Hilfe.
Also, Superhirn, kannst Du auch was Konstruktives zum Thread beitragen?
-