Servus Ich programmiere z.Z. ein Programm, dass in einem Bild(-ausschnitt) Linien erkennen soll. Während der Algorythmus langsam Formen annimmt, stehe ich vor einem Problem mit der Hardware. Der (ferne) Plan ist es, ein HD Videostream zu analysieren, indem das Gesamtbild in mehrere kleinere Teilausschnitte zerlegt wird und dann seperat bearbeitet. Zum Schluss werden dann die Teilergebnisse zusammengeführt. Jetzt weiß ich aber nicht welchen Prozessor ich verwenden muss bzw. wie viele Ausschnitte da ich zwar die Prozessorzeit auf meinem Desktop-PC ermitteln kann, aber ein i3 kaum die Verhältnisse auf einem IC wiederspiegelt. Jetzt ist also meine Frage, gibt es einen Weg mein bestehendes Programm zu evaluieren und zu schauen, wie lange eine z.B. ATmega o.ä. dafür brauchen würde? VG Patrick
Wie lange so eine Prozessor in etwa brauchen wird kann man erst einmal grob abschätzen, über die angegebenen Geschwindigkeiten. Die werte sind allerdings nur begrenzt realistisch und vergleichbar, aber beim "Schönrechnen" der Leistung nehmen sich die Hersteller nicht so viel. Der nächste Schritt wäre dann den Code, oder ggf. eine vereinfachte Form für die in Frage kommenden CPUs einfach zu Übersetzen und dann einen Simulator nutzen, um die Laufzeiten zu bestimmen. Das kann bereits brauchbare Ergebnisse liefern, sofern so etwas die Chaches berücksichtigt werden, sonst muss man da schätzen oder hoffen. Dass der ATmega da eher nicht die richtige wahl ist, sieht man auch so - das scheitert in den meisten Fällen schon einfach am Speicher (RAM), egal wie viele Tage man ihm für ein Bild gibt. Schon um den Video Stream auszupacken braucht man signifikante Rechenleistung oder spezielle HW Unterstützung. Wenn die CPU das gut schafft könnte es auch mit den linien klappen.
Patrick G. schrieb: > Jetzt ist also meine Frage, gibt es einen Weg mein bestehendes Programm > zu evaluieren und zu schauen, wie lange eine z.B. ATmega o.ä. dafür > brauchen würde? Zur Bildverarbeitung brauchst du Rechenleistung und Speicher. Beides hat ein Atmega nicht. Jedenfalls nicht in dieser Dimension. Über den und andere 8-Bit Controller brauchst du gar nicht weiter nachzudenken. Ermittele die Zeit, die dein PC braucht, um ein Bild durchzurechnen. Am Verhältnis zur Taktfrequenz kannst du abschätzen in welcher Liga der Controller spielen muss. Das läuft dann auf aktuelle ARM-basierte Controller oder DSPs hinaus. Genauer kannst du das erst bestimmen, wenn die Algorithmen fertig sind. Dann kannst du evaluieren, wie gut sich diese auf dem Zielsystem implementieren lassen. mfg.
:
Bearbeitet durch User
Bildverarbeitung im HD Format und ATmega >>>> Troll.
:
Bearbeitet durch User
Vorab: Ich habe nicht vor mit 1Mio ATMega's irgendwas derartiges zu rechnen! Ich will lediglich mit möglichst kleinen, dafür aber mehreren Prozessoren das Bild parallel verarbeiten. Das nur vorab. Danke für die Antworten. Kann man tatsächlich einfach über einen CPU-Frequenz Vergleich die Leistungen vergleichen? Spielen da nicht Herstellerspezifische Algorythemoptimierungen auf Hardwareebene eine Rolle? Kennt ihr gute Simulatoren/Emulatoren mit denen man, möglichst beliebige, Prozessortypen simulieren kann? VG Patrick
Patrick G. schrieb: > Kann man tatsächlich einfach über einen CPU-Frequenz Vergleich die > Leistungen vergleichen? Spielen da nicht Herstellerspezifische > Algorythemoptimierungen auf Hardwareebene eine Rolle? Natürlich ist das nur grob über den Daumen gepeilt. Entscheidendes Bauteil innerhalb der CPU ist eine MAC-Unit. Aber auch Pipelining, Cache-Grösse... mfg.
:
Bearbeitet durch User
Patrick G. schrieb: > Kann man tatsächlich einfach über einen CPU-Frequenz Vergleich die > Leistungen vergleichen? Naja, wenn die Prozessorarchitekturen sich ähneln, dann vielleicht. Aber eigentlich auch dann schon nicht. Man vergleiche die Single-Thread-Performance eines 3-GHz-Pentium 4 mit der eines 3-GHz-Core i7. Wenn aber 32-Bit- (oder gar 64-Bit-) mit 8-Bit-CPUs verglichen werden, wenn CPUs mit hardwareseitiger Floatingpoint-Unterstützung mit CPUs verglichen werden, die noch nicht mal über einen Divisionsbefehl für Ganzzahlen verfügen, dann wird das ganze ... immer unbrauchbarer.
Hallo, zum Abschätzen der Rechenleistung ist ohne näheres Wissen nicht möglich. Zuerst nochmal zum Verständnis: Sollen alle Bilder des Videostreams analysiert werden (sprich bei 30FPS auch 30 Bilder in einer Sekunde) oder soll z.B. nur alle 2 Sekunden ein Bild analysiert werden? Oder anders gefragt, wie viel Zeit soll die Analyse eines Bildes am Ende maximal in Anspruch nehmen? Dann kommt die Datenquelle. Muss die CPU erst eine HD Videostream decodieren um an die Einzelbilder zur Analyse zu kommen, oder werden die dem System in irgendeiner Form bereits geliefert (z.B. als BMP oder JPEG Bild)? Fall selbst decodiert werden muss ist dafür einiges an Rechenleistung erforderlich, sofern keine spezielle Hardware dafür vorhanden ist. Aus eigener Erfahrung weiß ich, das ein AMD Athlon 64 3500+ in Software ein HD Video nicht abspielen schafft. (Ein Anhaltspunkt für CPU Leistung von x86er Prozessoren ist auf der Seite http://www.cpubenchmark.net ganz gut zu vergleichen) Für die eigentliche Auswertung kannst du deinen Quellcode durchgehen und überschlagen, wieviele Berechnungen ungefähr nötig sind. Wenn als beispiel die Summe über alle Pixel und Farben gebildet werden soll, dann hast du 1920*1080*3 = 6,22 Millionen Additionen plus die Datenzugriffe auf die Pixel plus Schleifen und Abfragen. Dazu kommt dann die Hardwareausstattung des Chips. Mal nur die Additionen genommen (als 32 Bit Integer) wäre hier ein ATMega bei 20 MHz Takt theoretisch auch in 1,3(Addieren) Sekunden + 0,6 (aus dem RAM laden) Sekunden durch, allerdings muss er die Daten erstmal von extern holen, da der RAM nicht groß genug ist, was wieder extra Zeit kostet. So müsstest du alles durchgehen, um eine brauchbare Abschätzung zu bekommen. Alternativ ausprobieren, bzw. Simulieren. Wenn das jetzt aber kein Großserienprodukt werden soll (und so klingt es) würde ich mir da nicht so viel Arbeit machen das genau abzuschätzen und lieber mit gut Rechenleistungsreserve enden. Auch entscheident ist, was es für das System schon gibt. Auf einem ATMega müsste sicher erstmal das decodieren des Videostreams oder der Bilder implementiert werden. Wenn du hingen ein fertiges Betriebsystem hast, das einiges mitbringt ist es deutlich einfacher. Aus dem Bauch heraus würde ich schätzen, das du unter der Leistungsklasse der Einplatinencomputer wie z.B. dem Raspberry Pi überhaupt nicht schauen brauchst (der kann HD auch nur abspielen, weil er die Aufgabe an seinen Hardwarechip deligiert). Tendenziell würde ich es eher auf einem "normalen" PC System laufen lassen, da die sehr billig im Vergleich zu der Rechenleistung sind, die sie liefern. Bei einem Wechsel von PC auf ein anderes System solltest du auch bedenken, das du den Code portieren musst, was teils auch noch mal gut arbeit ist. Auch die Programmiersprache kann durchaus entscheidend sein, da Hochsprachen teils viel Rechenleistung "verschenken" um den Kompfort zu liefern, den sie mit sich bringen. Ich hatte vor Jahren mal VisualBasic gegen C verglichen und kam bei einfachen Befehlen wie Abfragen, Schleifen und Additionen auf eine Faktor von über 1000. Sprich, C läuft 1 Sekunde, VB für das gleiche fast 17 Minuten. Aber auch die Art, wie der Code geschrieben ist macht teils viel aus, oftmals sogar mehr als die gewählte Sprache. Gruß Kai
Es kommt sehr auf die Architektur und deren Möglichkeiten an. Teilweise kann z.B. der DMA Controller auch Aufgaben in Richtung Bildverarbeitung übernehmen, z.B. einzelne Bitmanipulationen. Könnte als möglich sein, aber für die Aufgabe wirst du einen sehr schnellen uC brauchen, wenn nicht sogar einen FPGA. Wenn du bei den STM32 ARM Controllen gucken willst, würde ich dir schon zu einem 429 oder 439 raten. Viel Erfolg in jedem Fall! LG Jan
Patrick G. schrieb: > Kennt ihr gute Simulatoren/Emulatoren mit denen man, möglichst > beliebige, Prozessortypen simulieren kann? Ich will's jetzt nicht gerade für Deinen Zweck empfehlen, aber OVP* könnte sowas (dafür gibt's auch AVR-Cores). Allerdings dient das Teil eher dazu komplette Systeme zu simulieren, von daher ist es schon recht komplex und verlangt ein gutes Maß an Einarbeitung. Zweckmäßiger wäre es vielleicht ersteinmal zu schauen wieviele "Operationen" Dein Verfahren im worst case für die Auswertung eines Bildausschnitts der Größe x*y benötigt. Wenn man das mit der Taktfrequenz/Framerate/Übertragungsgeschwindigkeit etc. verrechnet kann man daraus ja möglicherweise schon ganz gut schließen, welche/wieviele CPUs/MCUs in Frage kommen. Oder gibt's noch andere Kriterien? (möglicht wenige Controller, möglicht billig zu produzieren, möglichst energiesparend, möglichst wenig Entwicklungsaufwand, ...) * OVP (Open Virtual Platforms): http://www.ovpworld.org/
Patrick G. schrieb: > Vorab: Ich habe nicht vor mit 1Mio ATMega's irgendwas derartiges zu > rechnen! Ich will lediglich mit möglichst kleinen, dafür aber mehreren > Prozessoren das Bild parallel verarbeiten. Das nur vorab. Dann sage ich dir vorab, daß das kompletter Blödsinn ist. Der Aufwand zur Parallelisierung der Aufgabe, zur Verteilung der Teilaufgaben und zum Abholen der Ergebnisse ist größer als der zur Lösung der Aufgabe selber nötige. Jedenfalls, wenn du die Verarbeitung auf viele kleine µC verteilen willst. In einem Controller mit mehreren Rechenkernen sieht das natürlich ganz anders aus. Da ist eine Parallelisierung dieser Aufgabe sehr wohl sinnvoll. > Kann man tatsächlich einfach über einen CPU-Frequenz Vergleich die > Leistungen vergleichen? Nein. Takt alleine ist nicht alles. Mindestens noch die Verabeitungsbreite der Daten ist für sehr viele Algorithmen der Bildverarbeitung auch überaus relevant. > Spielen da nicht Herstellerspezifische > Algorythemoptimierungen auf Hardwareebene eine Rolle? Ja, das kann gut sein. Z.B. die Verfügbarkeit von schneller saturierender Arithmetik kann sehr nützlich sein für Bildverarbeitung und diese massiv beschleunigen.
Rufus Τ. Firefly schrieb: > Man vergleiche die Single-Thread-Performance eines 3-GHz-Pentium 4 mit > der eines 3-GHz-Core i7. > > Wenn aber 32-Bit- (oder gar 64-Bit-) mit 8-Bit-CPUs verglichen werden, Wenn die Referenz ein Ferrari ist, sucht man Vergleichbares bei Porsche, aber nicht bei Dacia oder auf dem Hinterhof eines Mopedhändlers. mfg.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.