Zeitdauer einer Muliplikation

Persönliche Seite #1773179
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.
Gast #1773617
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
#1773661
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
#1773886
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.
Gast #1773965
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
Gast #1774998
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren