Servus, kann mir jemand sagen was bei ca. 30 berechnungen (jeweils einmal dividieren und addieren, also insgesamt 60 berechnungen, nacheinander) schneller geht (ausgehend von float zahlen mit 3 nachkommastellen): 1. berechnung komplett in float durchführen und evtl daran beteiligte integer werte auf float zwangskonvertieren oder 2. mit "normierungs-trick" die float werte mit 1000 multiplizieren, berechnungen durchführen und das ergebnis wieder in float wandeln ich hoffe ihr könnt so ungefähr verstehen wie/was ich meine :-/ mfg, Marcus PS: programmierung in C für nen Renesas M32C mit HEW
http://www.mikrocontroller.net/forum/read-1-315021.html#new Noch einmal, wenn Du 'float' brauchst, dann nimm 'float'. Die ganzen 'int' oder 'long' Optimierungen bringen eventuell ein bißchen mehr Geschwindigkeit, was aber nicht zwingend sein muß. Bei 'long' wir mit 32 Bit gerechnet, bei 'float' jedoch nur mit 24 (für die Mantisse), was durchaus schneller sein kann !!! Der Vorteil von 'float': man braucht sich nicht um Rundung und Nachkommastellen zu kümmern. Programmier Deine Routine doch einfach einmal und messe die Laufzeit; meines Erachtens wird sie unter 1 ms liegen. Wenn das reicht, belasse es so. Wenn nicht, versuche die Divison mit einer 1/x Multiplikation zu lösen; das geht u.U. schneller.
Divisionen sind extrem aufwendig und zeitraubend. Braucht man eigentlich auch nie (ich zumindest), außer Division mit ner Konstanten, und das machts Du mit Multiplikation/Shiften. Wenn Du Zeit hast, nimm float, wenn nicht überleg mal, ob Du nicht um die Division rumkommst!? Cheers Detlef
ok, danke... ich seh schon, dass muss/sollte man dann testen...
@Marcus: Ja, wenn Du genau für einen Prozessor schreibst, heisst die Devise bei solchen Entscheidungen: Nicht raten, sondern messen. Also, zwei Benchmarkprogramme schreiben. Dann nachschauen welcher Algorhitmus schneller läuft, und diesen dann verwenden. Wenn Du es ganz genau machen willst, kannst Du auch noch mit verschiedenen Compiler-Optimierungs-Einstellungen testen. Entweder systematisch alle Kombinationen einiger weniger Optimierungen ausprobieren, oder mit einem genetischen Algorithmus die beste Kombination aus einer vielzahl (alle) Optimierungsoptionen suchen lassen. Für die genetische Variante gibt es auch schon einige fertige Pakete für den GCC (unter Linux/Unix). Die müsstest Du allerdings noch anpassen dass die Zeiten auf dem Controller direkt gemessen werden können. Machbar ist das alles. Die Frage ist aber, lohnt sich der Aufwand?
danke... glaube das lohnt wirklich nicht... denke mal ich werde es evtl einfach einmal mit float und einmal mit integer versuchen und schauen, ob ich was messen kann... danke!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.