Forum: Mikrocontroller und Digitale Elektronik Benötigte CPU-Leistung ermittel


von Patrick G. (stubb0rn)


Lesenswert?

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

von Ulrich H. (lurchi)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Bildverarbeitung im HD Format und ATmega >>>> Troll.

: Bearbeitet durch User
von Patrick G. (stubb0rn)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

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
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Kai S. (kai1986)


Lesenswert?

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

von Jan B. (berge)


Lesenswert?

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

von Michael H. (dowjones)


Lesenswert?

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/

von c-hater (Gast)


Lesenswert?

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.

von Thomas E. (thomase)


Lesenswert?

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
Noch kein Account? Hier anmelden.