Multiplikation/Division VS Shiften

Gast #2184626
Lesenswert?

Hallo zusammen,

ich weiß, dass das shiften um z.B. 2 stellen (>>2), gleich der Division 
um 4 ist.
Auch weiß ich, dass das Shiften schneller ist (shiften um 2 stellen --> 
2 Taktzyklen).
Wie kann ich ausrechnen/abschätzen wie lange der Microcontroller 
benötigt um z.B. eine unsigned short Zahl/ BYTE -Rechenoperation 
durchzuführen.
(16-Bit-Microcontroller)..

Vielen Dank im voraus!
Grüße
Mary
#2184643
Lesenswert?

Code anschauen und Ausführungszeiten addieren, oder messen

Abgesehen davon sind Compiler bei eingeschalteter Optimierung
meistens auch nicht so blöd, die langsamste mögliche Variante
zu verwenden.
Insofern hat man meistens andere Baustellen, wo man selbst eher
Aufwand investieren sollte.
Gast #2184646
Lesenswert?

>Wie kann ich ausrechnen/abschätzen wie lange der Microcontroller
>benötigt um z.B. eine unsigned short Zahl/ BYTE -Rechenoperation
>durchzuführen.

Die genaueste Methode, ist es, sich den Algorithmus in Maschinensprache 
anzuschauen und zu den verwendeten Befehlen die Anzahl Zyklen 
nachzuschlagen. Ausserdem ist zu beachten, dass evtl. bei einigen 
Operationen der Kontrollfluss von den Werten der Operanden selbst 
abhängt. Es mag z.B. ganz simpel so sein, das eine Multiplikation prüft 
ob einer der Faktoren 0 ist. Dann ist die Zeit natürlich im wesentlichen 
durch die Prüfung und das setzen des Ergebnisses auf 0 bestimmt.

Das ganze ist, denke ich ziemlich aufwendig.

Die nächst simplere Methode ist, die Operation mit einer Reihe von 
verschiedenen, zufällig gewählten Operanden etwas 100 oder 1000 Mal 
durchzuführen und dann den Durchschnittswert zu nehmen.

Das ist einfacher, berücksichtigt aber eventuelle Sonderfälle nur 
graduell ausreichend. Es kommt vor allem darauf an, möglichst viele 
verschiedene Operanden zu wählen. Dann stimmt die Statistik um so 
besser.

Wozu brauchst Du das denn, wenn ich fragen darf?
Gast #2184648
Lesenswert?

Maria schrieb:

> Wie kann ich ausrechnen/abschätzen wie lange der Microcontroller
> benötigt um z.B. eine unsigned short Zahl/ BYTE -Rechenoperation
> durchzuführen.

Was du auf jeden Fall machen kannst, ist, eine Berechnung einfach 
auszuprobieren. Indem du bei Eintritt in die Funktion einen Timer 
startest, und am Ende den Timer stoppst und den Timerwert ausliest.

Oder einen Pin umschaltest, und mit einem externen Frequenzzähler die 
Zeitdauer messen.

Die Rechenalgorithmen haben ja oft auch die Eigenschaft, daß die 
Berechnungszeit von den Operanden abhängig ist. Wenn man das genau 
wissen will, das ist dann natürlich etwas Aufwand.
#2184652
Lesenswert?

> ich weiß, dass das shiften um z.B. 2 stellen (>>2), gleich der Division
> um 4 ist.

Nein! Wenn man zB mittelt zur Erhöhung der Auflösung (zB ADC 
Oversampling), dann gibt dir shiften nicht die Nachkommastellen, die die 
erhöhte Auflösung darstellen. Außer du shiftest zuerst die Summe nach 
links.
Gast #2184657
Lesenswert?

Schreibe momentan meine Diplomarbeit und da haben sie mir den "Tip" 
gegeben, wenn möglich statt Division/Multiplikation eine shift-Operation 
durchzuführen.
Aber das mit den Asembler-Befehlen ist eine gute Idee. Das werd ich mir 
mal anschauen. Danke!
Ich hatte gedacht, dass wir irgendetwas schon einmal in einer Vorlesung 
gehabt haben, wie man die Zyklenzahl bestimmt...
Persönliche Seite #2184664
Lesenswert?

Maria schrieb:
> Hallo zusammen,
>
> ich weiß, dass das shiften um z.B. 2 stellen (>>2), gleich der Division
> um 4 ist.

Nein, für signed-Werte ist das schon falsch.

> Wie kann ich ausrechnen/abschätzen wie lange der Microcontroller
> benötigt um z.B. eine unsigned short Zahl/ BYTE -Rechenoperation
> durchzuführen.

Das ist von zig Sachen abhängig, z.B:

- welche Operanden sind es (z.B. zur Compilezeit bekannt)
- welche Instruktionen er verwendet
- deren Reihenfolge (wegen Pipeline)
- deren Ablage (Instruktions-Cache)
- Ablage der Daten (Daten-Cache)
- Art der Speicher (Zugriffszeiten, Wait-States)
#2184673
Lesenswert?

Klaus Wachtler schrieb:

> Abgesehen davon sind Compiler bei eingeschalteter Optimierung
> meistens auch nicht so blöd, die langsamste mögliche Variante
> zu verwenden.

Bei Optimierung auf Platz kann das durchaus passieren. Das Drumherum 
beim Schieben von Typen mit Vorzeichen wird oft umständlicher sein als 
eine Division bzw. der Aufruf der entsprechenden Laufzeitfunktion.
Gast #2184747
Lesenswert?

Maria schrieb:

> Schreibe momentan meine Diplomarbeit und da haben sie mir den "Tip"
> gegeben, wenn möglich statt Division/Multiplikation eine shift-Operation
> durchzuführen.

Schau dir doch mal Divisionsroutinen in Assembler an. Es gibt da 
massenhaft Material im Internet. Lade dir irgendwo einen 
Freeware-C-Compiler herunter, und analysiere die Rechenroutinen. 
Meistens wird tatsächlich entweder geshiftet oder subtrahiert. Eine 
Division ist ja auch eine fortgesetzte Subtraktion.

Und mit den verschachtelten Schleifen ist es ja so, daß es irgendwie 
eine Funktion n-ten Grades wird, in der einfachsten Form z.B. y=ax+b.

Beim reellen µC ist die Taktzeit von vielen verschiedenen Faktoren 
abhängig, z.B. Flash-Zugriffszeiten, Wait-States, Betriebsmode des 
Flashs, programmierbarer Takt, da wird man mit Ermitteln der Zeiten 
wirklich nicht mehr fertig, wenn man alles genau wissen möchte. Ich 
hatte mal mit LPC2000 (ARM7) zu tun. Da wird man wahnsinnig, wenn man 
Befehlszeiten errechnen will. Das Zusammenzählen der Takte ist da das 
geringste Problem, aber wenigstens das geht. Vielleicht ist ja auch nur 
dieses erst mal wichtig, nicht die reelle Laufzeit.
Gast #2184755
Lesenswert?

Ich denke, Du solltest auch berücksichtigen, das je nach Prozessor evtl. 
eine Multiplikations-/Divisionseinheit eingebaut ist. Prozessoren, die 
das nicht haben, multiplizieren bzw. dividieren mittel schieben und/oder 
Addition/Subtraktion. Die Laufzeit kann da, abhängig von den Operanden, 
schon um Grössenordnungen unterschiedlich sein.

Wenn es wirklich darum geht, noch das letzte Quentchen Laufzeit 
herauszuhölen musst Du schon genauer die hier genannten Faktoren 
berücksichtigen. Fuer eine allgemeine Aussage in einer Untersuchung über 
Prozessoren vielleicht nicht ganz so tief.

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