Forum: Compiler & IDEs ATMega2560 - Performance bestimmter Operationen


von Daniel F. (Firma: For Personal Use) (dgrat)


Lesenswert?

Ich arbeite mit einem ATMega2560 basierten Board und benutze relativ 
viele floating point Operationen. Ich überlege einige der Rechenschritte 
zu ersetzen und wollte fragen, ob sich hier jemand schon einmal näher 
mit ein paar Benchmarks beschäftigt hat. Die meisten einfachen 
Optimierungsansätze lassen sich auf grundlegende Konzepte runterbrechen:

    int iPartialRes = (int)fArg1 * (int)fArg2;
    iPartialRes */ iFoo;
schneller als?:
    float fPartialRes = fArg1 * fArg2;
    fPartialRes */ iFoo;

    iSign = fVal < 0 ? -1 : 1;
schneller als?:
    iSign = fVal / fabs(fVal);

D.h. wie langsam sind Vergleiche gegenüber Divisionen/Multiplikationen 
bzw. wie langsam sind type conversions mit anschließender 
Division/Multiplikation gegenüber floating point Division und 
Multiplikation? Außerdem würde mich interessieren, wie floating point 
Multiplikation mit ints implementiert ist.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Frenzel schrieb:

>     int iPartialRes = (int)fArg1 * (int)fArg2;
>     iPartialRes */ iFoo;

> schneller als?:
>     float fPartialRes = fArg1 * fArg2;
>     fPartialRes */ iFoo;

Davon würde ich nicht ausgehen.
Die Umwandlung der beiden Floating Point Zahlen in Integer kostet ja 
auch Zeit. Ob du diese Zeit durch die einfachere Integer Multiplikation 
wieder reinkriegst, wage ich zu bezweifeln

Im Zweifel wirst du das austimen müssen. Vor der Berechnung einen Pin 
auf High setzen, danach wieder auf Low und mit dem Oszi nachsehen, wie 
lang die Dinge gedauert haben.

>     iSign = fVal < 0 ? -1 : 1;
> schneller als?:
>     iSign = fVal / fabs(fVal);

Davon würde ich mal ausgehen.
Auch in Floating Point ist ein Vergleich, basierend auf der Abfrage 
eines  Vorzeichenbits, wesentlich einfacher als eine Division. Zumal ja 
im fabs selbst wieder ein Test auf positiv/negativ enthalten ist. In 
einem gewissen Sinne ist also die Divisionslösung sowas wie 'doppelt 
gemoppelt - von hinten durch die Brust ins Auge'

: Bearbeitet durch User
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Die Divisionslösung ist sogar fundamental anders, da sie aufgrung von 
Rundungsfehlern z.B auch 0 liefern kann.

von Daniel F. (Firma: For Personal Use) (dgrat)


Lesenswert?

Stimmt, war auch eher als Beispiel gedacht.

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.