-
math-Coprozessor?
Hallo Leute,
ich brauche für mein Projekt sehr viele Berechnungen, die ich in kürzester Zeit rechnen muss. Ich verwende einen 8bit-AVR(die bekanntlich nicht die schnellsten sind). Auf einen ARM oder ähnliches umzusteigen ist schon zu spät.
Lohnt es sich, einen math-Coprocessor zu benutzen? Hat man dadurch große Ersparnisse?
Ich habe an sowas wie den hier gedacht: http://www.sparkfun.com/commerce/pro...oducts_id=8129
Hat jemand Erfahrungen mit sowas gemacht? Oder kennt jemand vielleicht ein besseres Modell?
Gruß, Yaro
-
die übertragung der zu rechnenden daten wird aufwändiger sein als
die eigentliche berechnung selbst denk ich
-
Die Frage ist, brauchst du Floats oder Doubles?
Es gibt bei AVRs so eine Regel: Verwende nie Floats solange du nicht einen driftigen Grund dazu hast. Die meisten Berechnungen klappen auch gut mit Festkommazahlen - und dann ist der AVR verdammt schnell. Nur beim Teilen musst du aufbassen - das muss man noch über Software machen... Schneller als jeder Math-Prozessor für 20 $...
-
Man müßte wirklich genau auseinanderpflücken, was berechnet werden soll und ob und wie man es optimieren kann. Manchmal kann man Zwischenergebnisse gezielt weiterverwenden, manchmal helfen lookup-tables oder einfach nur 4 Bier, nach denen einem einfällt das man bisher viel komplizierter als nötig gerechnet hat.
Trotzdem ist so ein Coprozessor eine Interessante Sache und es kann generell nicht schaden, wenn jemand sich sowas mal zulegt, anstöpselt und hier von seinen Erfahrungen berichtet.
Gruß MeckPommER
-
Diese matho Coprozessoren sind auch nur µCs wie AVR oder gar PIC mit einem entsprechende Programm. Das wird also kaum schneller als es gleich im AVR zu machen. Wegen der Datenübertragung lohnt sich das ohnehin nur für kompliziertere Rechnungen wie die Winkelfunktionen oder einen Logarithmus, der dann parallel zum normalen µC arbeiten kann.
-
Natürlich gibt es CoP, die wesentlich schneller rechnen als die AVRs, ob der genannte dazu gehört und wieviel das ist kann ich auf den ersten Blick ins Datenblatt nicht erkennen. Das macht ohnehin keinen guten Eindruck auf mich, weil ich entscheidende Dinge nicht finden konnte, wie zB die Taktmenge pro Befehl und die Registerbreite. Zwar reden die von einem 32Bit Prozessor, im Instructionsummary werden 32Bit Werte aber in 4x8Bit aufgeteilt.
Wenn Du ein Beispiel geben kannst, was berechnet werden soll, könnte man versuchen abzuschätzen, ob das mit einem AVR noch Sinn macht.
Gruß
-
Ich brauche öfters Winkelfunktionen (sin, cos usw.), und muss auch ab und zu floats teilen und multiplizieren.
Lookup-Tabellen habe ich schon einige erstellt, klappt aber leider nicht für alle anwendungen. Optimirt habe ich auch schonn einge Menge, nur scheints, als ob das alles nicht genug sein wird. Ich komme im Moment mit der Leistung zwar noch hin, aber das sollte nicht mehr lange der fall sein, denn ich brauche immer mehr Winkelfunktionen, die ich kaum ersetzen kann, und die Genaugkeit der floats ist auch z.T. notwendig.
Der co.Prozessor hat eine 32bit Architektur, deswegen habe ich gehofft, dass er viel schneller ist.
Der bus sollte nicht so ein großes problem sein, über SPI kann es angesteuert werden. Großzügig gerechnet macht das dann ca. 30Takte pro übertragenes Byte, also ca 120T für ein float. Wenn man bedenkt, dass sin() 1500T braucht, scheint das schon etwas Zeitersparniss zu bringen (vor allem, weil man ja parallel noch rechnen kann).
Aber wie Gock schon meint, ist das mit der 32bit Architektur sone Sache...
Ich hoffe immernoch, dass jemand erfahrungen mit soeinem Ding gemacht hat, und mir vielleicht ein besseres exemplar empfehlen kann.
Gruß, Yaro
-
Im daten blatt sind die Zeiten angegeben: ein Sin / Cos / Exp dauert etwa 100 µs, ist also etwa so schnell wie der AVR. Wobei mit das für EXP sogar eher langsam vorkommt, der geht normalerweise schneller als Sinus. Dafür kommen mir Funktionen wie ASIN usw relativ schnell vor.
Sicher wird es schnellere µCs geben.
-
Ich habe bisher leider nur langsamere gefunden.
Wie kann denn sowas eigentlich sein? das Ding arbeitet mit 30MHz mit
einer 32bit Architektur, und ist dabei genauso schnell, wie ein AVR mit
einer 8bit Architektur und 16MHz
-
Mein Tip wäre ganz stark, das das ein PIC ist. Ein PIC mit 30 MHz ist halt mit einem AVR bei 8 MHz vergelichbar.
Die 32 Bit beziehen sich wohl auf das Fleißkommaformat, nicht auf den eigentlichen Prozessor.
Edit:
Von der Pinbelegung könnte das ein
dsPIC30F3012 sein. Damit wäre der Controller wirklich etwas schneller als ein AVR, aber nicht gerade viel. Das könnte auch erklären warum Arcsin usw. relativ schnell sind. Einen exp besonders langsam zu programmieren ist einfacher als einen genial schnellen Arcsinus.