Datum: 18.01.2008 17:54
Ich arbeite mit einem Tricore 1796 von Infineon. Als Kompiler benutze ich die Toolchain von Hightec. Die Datentypen meines Quellcodes sind in float32 deklariert. Die Wortbreite jedes einzelnen Rechenschrittes beträgt also 4 Byte beziehungsweiße 10 gültige Stellen in dezimal umgerechnet. Die einzelnen Werte haben teilweise sehr kleine Werte. Mein berechnetes Ergebnis wird erst bei der sechsten Berechneten Dezimalstelle ungenau. Mir würde ein Ergebnis im Genauigkeitsbereich der dritten Stelle ausreichen. Um Rechenzeit einzusparen wäre es schön wenn ich mit einem Datentypen float16 rechnen könnte. Jetzt meine Frage: Gib es Optionen die ich im makefile einstellen kann, die es mir ermöglichen mit solch einem Datentyp zu rechnen? Ich habe im Handbuch tricore-gcc leider nichts dazu gefunden. Wenn ich wichtige Dinge zum Verständnis der Frage vergessen habe einfach nocheinmal nachfragen.
Datum: 18.01.2008 18:26
@ Martin Vogel (lachned) >Die Datentypen meines Quellcodes sind in float32 deklariert. >Die Wortbreite jedes einzelnen Rechenschrittes beträgt also 4 Byte >beziehungsweiße 10 gültige Stellen in dezimal umgerechnet. ??? Das sind bestenfalls 5..6. Die Matritze ist nur 23 Bit breit. >Die einzelnen Werte haben teilweise sehr kleine Werte. >Mein berechnetes Ergebnis wird erst bei der sechsten Berechneten >Dezimalstelle ungenau. Deckt sich mit der Theorie ;-) >Mir würde ein Ergebnis im Genauigkeitsbereich der dritten Stelle >ausreichen. >Um Rechenzeit einzusparen wäre es schön wenn ich mit einem Datentypen >float16 rechnen könnte. Gibt es AFIAK nicht. Nimm Festkommaarithmetik. MfG Falk
Datum: 18.01.2008 18:39
>Um Rechenzeit einzusparen wäre es schön wenn ich mit einem Datentypen >float16 rechnen könnte. Wieviel Nanosekunden willst Du denn einsparen? Ich würde es bei 'float' belassen.
Datum: 18.01.2008 19:19
Es handelt sich um einen recht komplexen nichtlinearen modellprädiktiven Regler. Ein Zyklus braucht 80ms....mit float 32 Mit double waren es noch 150ms Wie gesagt, meine Werte sind recht klein. Ich denke mit umskalieren auf Festkomma habe ich keine Chance noch vernünftige Werte zu bekommen. Was ist AFIAK??
Datum: 18.01.2008 20:06
@ Martin Vogel (lachned)
>Was ist AFIAK??
As Far As I know, Soweit ich weiss
MfG, Mit freundlichen Grüssen
Falk ;-)
Datum: 29.04.2008 13:37
Von der Hardware wird lediglich float (32 Bit) unterstützt, 16-Bit floats werden weder vom Compiler (tricore-gcc) noch von der TriCore-Hardware unterstützt. > Ein Zyklus braucht 80ms....mit float 32 > Mit double waren es noch 150ms Zunächst wundert mich dieses Verhältnis (Faktor 2), ich würde da wesentlich mehr erwarten, denn double muss per Software emuliert werden, während es für floats die .f-Instruktionen gibt. Die Option -mhard-float wird standardmässig aktiviert für TC1796, so dass 1) diese Option deaktiviert wurde 2) der Algorithmus verbrauch die Zeit nicht mit der Arithmetik, sondern woanders Zudem ist es ein weit verbreiteter Irrglaube, 16-Bit-Arithmetik sei schneller als 32-Bit-Arithmetik, wenn man sich auf einer 32-Bit-Architektur befindet. Eine 16-Bit-Addition (int) auf TriCore geschieht z.B., indem die Werte auf 32 Bit expandiert werden, die Operation ausgeführt und das Ergebnis wieder abgeschnitten wird. Ursache dafür ist, daß TriCore als 32-Bit-Architektur 16- und 8-Bit Arithmetik kaum unterstützt. Um genaue Aussagen über Optimierungspotential zu machen, müsste man in die Quellen und ins Compilat sehen können. Und natürlich muss man bei Bibliotheks-Funktionen die float-Version verwenden, also z.B. sqrtf für die Quadratwurzel anstatt sqrt. Sonst wird intern nämlich mit double gerechent.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


