ATMega2560 - Performance bestimmter Operationen

(Firma: For Personal Use) #3603349
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.
#3603487
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'

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