Forum: PC-Programmierung Zeitdauer einer Muliplikation


von Clemens (Gast)


Lesenswert?

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...

von Lord Z. (lordziu)


Lesenswert?

Meine Glaskugel sagt, es dauert 47,11 Quadratkiesel.

Im Ernst:
Was hat das mit PC-Programmierung zu tun? Welcher µC? Welche Bitbreite 
der Operanden?

von test (Gast)


Lesenswert?

Disassembly anschauen, Befehlssatz ansehen und rechnen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Andreas F. (aferber)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von D. I. (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Nicht wenn du zwei Register gleichzeitig löschen willst. Die 
Multiplikation tut das in einem Befehl (16x16=>32), XOR oder MOV braucht 
dazu zwei.

von Walter T. (nicolas)


Lesenswert?

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)

von D. I. (Gast)


Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Vlad T. (vlad_tepesch)


Lesenswert?

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
Noch kein Account? Hier anmelden.