Hallo, wie kann ich ablesen, wie viel Zeit der MC für die Multiplikation, Addition und ziehen einer Wurzel benötigt? Benötige diese info´s da ich zeitkritisches Problem habe. danke im vorraus...
Meine Glaskugel sagt, es dauert 47,11 Quadratkiesel. Im Ernst: Was hat das mit PC-Programmierung zu tun? Welcher µC? Welche Bitbreite der Operanden?
Beispielsweise in dem du die Zeit misst. Zum Messen der Zeit kannst du ein Oszilloskop benutzen. Zum Triggern des Oszilloskops schaltest du vor der Berechnung einen Ausgangspin und nach der Berechnung wieder. Den Signalverlauf in der Zeitdomäne kannst du auf dem Oszilloskop ausmessen. Wenn du kein Speicheroszilloskop sondern nur ein normales Oszi hast, dann musst du diesen Vorgang zyklisch wiederholen. Eine weitere Möglichkeit z.B. bei AVRs ist das "Messen" im AVR Simulator. Breakpoint vor und nach die Berechnung. Beim Vor-BP die Stopwatch resetten und beim Nach-BP ablesen.
Hallo, wie schon gesagt, messen - aber du musst dir drüber klar sein, dass man die Frage so nicht stellen kann, weil die Rechenzeit allgemein stark von den tatsächlichen Zahlenwerten abhängig ist. 2 x 2 geht eben schneller als 2 6 stellige Zahlen multiplizieren. Die Frage kann also nur heissen, was ist der worst case bei den aktuell vorkommenden Zahlenwerten. Da die Antwort also bei jedem Einsatz eine andere ist, ist es folgerichtig, dass darüber keine allgemeinen Werte verfügbar sind. Ein worst case Wert für den gesamten möglichen Zahlenbereich wäre viel zu pessimistisch und daher in der Praxis wertlos. Selber messen macht kluch. Gruss Reinhard
Reinhard Kern schrieb: > weil die Rechenzeit allgemein stark von > den tatsächlichen Zahlenwerten abhängig ist. 2 x 2 geht eben schneller > als 2 6 stellige Zahlen multiplizieren. Auf den meisten Architekturen mit Hardwaremultiplikation ist heute die Dauer der Multiplikation nicht vom Wert der Operanden abhängig, solange die Operanden noch in die Wortbreite der CPU passen. Ausnahme: Multiplikation mit Konstanten, wenn der Compiler/Optimizer diese dann durch andere Operationen (z.B. Shift bei Zweierpotenzen) ersetzt. Selbst bis zur doppelten Wortbreite dürfte es häufig noch schneller (und vor allem einfacher) sein, pauschal immer die volle Multiplikation durchzuführen (damit Dauer auch wieder unabhängig von den konkreten Werten), als vorher durch Vergleiche festzustellen, ob man vielleicht bei den gegebenen Operanden gerade nur die untere Hälfte berechnen muss. Andreas
Die extremste Form dieser Strategie findet man bei Microchip-Compiler für PIC30 und Nachfahren und deren single cycle multiplier. Der setzt ein "long" im Registerpaar auf 0, indem er es mit 0 multipliziert. Ist der schnellste Weg. Stromsparstrategen besonders der nachfolgenden Chipgenerationen (PIC24/33) dürften ihre Kollegen von der Compiler-Fraktion dafür allerdings verfluchen.
A. K. schrieb: > Die extremste Form dieser Strategie findet man bei Microchip-Compiler > für PIC30 und Nachfahren und deren single cycle multiplier. Der setzt > ein "long" im Registerpaar auf 0, indem er es mit 0 multipliziert. Ist > der schnellste Weg. Mh, ich dachte ein xor mit sich selbst wäre schneller
Nicht wenn du zwei Register gleichzeitig löschen willst. Die Multiplikation tut das in einem Befehl (16x16=>32), XOR oder MOV braucht dazu zwei.
D. I. schrieb: > Mh, ich dachte ein xor mit sich selbst wäre schneller Müßte ich dafür nicht auch den Wert erst in ein zweites Register kopieren? (kenne mich mit PICs nicht aus)
A. K. schrieb: > Nicht wenn du zwei Register gleichzeitig löschen willst. Die > Multiplikation tut das in einem Befehl (16x16=>32), XOR oder MOV braucht > dazu zwei. ok
Andreas Ferber schrieb: > Auf den meisten Architekturen mit Hardwaremultiplikation ist heute die > Dauer der Multiplikation nicht vom Wert der Operanden abhängig, > solange die Operanden noch in die Wortbreite der CPU passen. Hallo Andreas, sicher, er hat aber auch nach Wurzelziehen gefragt. Ich meinte das ganz allgemein für Gleitkommaberechnungen. Gruss Reinhard
Reinhard Kern schrieb: > Ich meinte das ganz allgemein für Gleitkommaberechnungen. die haben auf µCs nix zu suchen :-P
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.