Folge 128: Bottleneck Datentransport

Shownotes

Warum die Performance von Video-Verarbeitungssystemen manchmal hinter den Erwartungen zurückbleibt, liegt nicht immer in den einzelnen Komponenten, sondern oft in ihrem Zusammenspiel. Stefan Schütz und Manuel Ott zeigen, wie ineffiziente Datenpfade und eine hohe Zahl an Speicherzugriffen die Gesamtperformance beeinflussen – und warum der Blick auf das System als Ganzes entscheidend ist.

Transkript anzeigen

00:00:13: Herzlich willkommen im wohl innovativsten Schuppen zu unserem Podcast Embedded Vision aus der Gartenhütte.

00:00:18: Heute wollen wir uns mal dem Thema annehmen, was ja der eigentliche Flaschenhalz in so Video Verarbeitungssystem sein kann nämlich da eigentliche Datentransport.

00:00:29: aber zunächst möchte ich natürlich meinen Koos begrüßen.

00:00:31: Hallo Manuel!

00:00:32: Hallo

00:00:32: Stefan schön auch die Woche wieder mit dabei zu sein.

00:00:35: Ja

00:00:35: wir haben ja letzte Woche über Video SoC gesprochen die ein bisschen auseinander genommen haben aber hier und da auch schon ein bisschen angeteasert oder wo vielleicht bottlenecks sein können, nämlich teilweise gar nicht in den einzelnen Einheiten sondern dazwischen.

00:00:54: Und da war es tatsächlich auch wieder so dass da eine Zuhörerin die Frage gestellt hat was denn das Problem ist welche Themen es da gibt.

00:01:04: Und genau, dann haben wir uns gedacht, quatschen wir mal darüber?

00:01:06: Genau!

00:01:07: Also als wir das so auseinandergenommen haben, haben wir auch immer gesagt, ah, da gibts dann eine DMA-Engine die dann Daten einfach transferiert.

00:01:15: und wenn wir jetzt ja von Video SoCs reden, dann reden wir in Summe von riesigen Datenmengen weil halt einfach die Bilder Keine Ahnung, sechzig FPS zum Beispiel.

00:01:25: Dann transferiert werden müssen.

00:01:27: Gleichzeitig ist es natürlich so, es gibt Einheiten innerhalb dieses SOCs die Dinge parallelisieren oder quasi die ISP auch quasi als Pipeline aufbauen aber am Ende von solchen Blöcken gibt's immer einen Speichertransfer.

00:01:44: also sprich ich nehme die Daten entgegen, transferiere sie in den Speicher.

00:01:49: Und wenn es sich da an das Thema erinnert mit dem SOC ist, wir haben ja ganz viele Blöcke besprochen.

00:01:54: Haben da auch eine relativ lange Folge dann daraus gemacht und am Ende der Folge habe ich gesagt und übrigens über das und dass und das haben wir noch gar nicht gesprochen.

00:02:02: Wenn man sich jetzt überlegt jedes Mal hab' ich irgendwann einen Speichertransfer Dann läppert sich das mir in der Zeit wie man so schön im Franken sagt also es wird einfach viel!

00:02:12: Genau, weil ich sage mal wenn man jetzt Videodaten anschaut.

00:02:15: Klar die kommen dann in irgendwelchen Pins von SOC rein.

00:02:18: Dann haben wir da sein Eingangsinterface, dann hat man seine ISP und das schaut alles so aus als wenn die Daten einfach irgendwie durch System durchlaufen.

00:02:26: aber letztendlich es werden ja Programme entwickeln Es wird Software entwickelt Aktiv irgendwo hin schiebt in Anführungszeichen, also inne ISP rein.

00:02:37: Dann werden die dort prozessiert.

00:02:38: aber der Prozessor weiß ja nicht was soll er denn mit den Daten machen wenn die von der ISP dann rauskommen aus den Rohdaten RGB-Daten oder andere Daten gemacht wurden.

00:02:48: und letztendlich ist es so dass so ein System dann immer die Daten Irgendwo reinschieben muss, wie du gesagt hast.

00:02:55: Dann irgendwo abholen muss dann wieder in den KI Beschleuniger schieben muss in die GPU einzelne Daten hin und herschieben muss.

00:03:03: Und letztendlich zum einen kann es schon sein wenn man eine ISP an sich anschaut das ist da vielleicht teilweise auch schon Bei manchen ISPs zu viel Speicherhändling gibt weil vielleicht ne ISP gar nicht so aufgebaut ist dass dir die Daten direkt von der Kameraschnittstelle verarbeiten kann, sondern dass die das eigentlich erwartet.

00:03:23: Dass sie von irgendeinem Speicher kommen und dass die Daten erstmal von der Kamera in einem Speicher laufen dann vom Speicher wieder raus um natürlich eine hohe Flexibilität gewährleisten zu können.

00:03:36: Die ISP vielleicht aber hier und da auch gar nicht robust genug ist mit Fehlern, mit Falschkonfigurationen so weit umzugehen, sondern ein stabiles Bild braucht Krux an, weil am Ende vom Tag – klar ich habe den Video SoC als Chip aber natürlich an dem SoC zum Beispiel auch ein DDR-Speicher angeschlossen mit einer gewissen Tiefe und eine gewisse Speicherbandbreite.

00:04:00: Wir haben ja bei der letzten Folge schon erklärt dass es eben eine unheimliche Anzahl von Pixeln, von Datenmengen gibt was so einen HD Bild oder höherer Auflösung haben kann.

00:04:10: und wenn man anfängt jedes Mal für jeden Verarbeitungsschritt die Daten aktiv, zum Beispiel von der CPU oder wie auch immer über dann meinetwegen auch über DMA-Engines automatisiert laufen zu lassen sorgt aber bei unoptimierten Systemen schnell dazu dass ich bis sich die Daten vielleicht an der KI habe fünf mal in Speicher rein und raus kopiert hab.

00:04:35: Und wenn man dann sagt Ich habe aber nur eine gewisse Speicherbahnbreite nur zwei Speicherchips extern angeschlossen, dann kann man sich die Speicherbandbreite ausrechnen.

00:04:45: Dann kann es schon auch hier und da mal sein dass man feststellt für fünfmal hin und her kopieren habe ich gar nicht die Bandbreite.

00:04:52: oder wenn ich in super optimierten SOCs reingehe, die vielleicht versuchen mit internen Speicher zu lösen, dann stellt man auf einmal fest ein Herr Moment Mal Wenn ich jetzt die Einheit und diese Einheit aber gerade gleichzeitig brauche, dann klappt doch das gar

00:05:08: Genau, also da hatten wir ja auch schon Fälle in unserer Vergangenheit erlebt wo es genauso war.

00:05:13: die eine Einheit funktioniert super.

00:05:16: Die andere Einhalt funktioniert super und sobald man sie zusammenschalten will funktionieren sie einfach nicht mehr weil... ...die Speicherbahnbreite das Problem ist.

00:05:23: Und ein Punkt den du gerade angesprochen hast dann finde ich total wichtig und wertvoll ist einfach man kann sich das ja alles mal... ...durchrechnen und sagen ok wo... ...liege ich denn mit den Speicher die ich da irgendwie vielleicht extern verbaut habe.

00:05:37: Wo ist denn mein erwarteter Durchsatz?

00:05:40: Und dann stelle ich fest, ah easy!

00:05:43: Achtzig Prozent hab' ich doch bloß davon.

00:05:46: Ja und da muss man natürlich aufpassen, denn der Punkt den du jetzt auch angesprochen hast ist die zeitliche Verteilung.

00:05:51: Das eine ist ja nicht nur über die Gesamtzeit.

00:05:55: von einer Sekunde komme ich locker zurecht.

00:05:58: das Problem sind dann aber wenn Dinge gleichzeitig passieren und ich quasi innerhalb dieses oder einen Frames mehrere Speicherzugriffe laufen vorhandene Bandbreite auch teilen und dann kann es natürlich wieder zu Verzögerungen kommen.

00:06:18: Und da kann's eben sein, dass man dann auch da an Grenzen stößt.

00:06:22: Genau ich meine mittlerweile gibt schon unterschiedliche Techniken wie ein Zero Copy zum Beispiel, wo man dann vermeidet unnützerweise quasi Daten einfach nur hin- und herzukopieren, nur weil sie vielleicht an der falschen Stelle irgendwo im Speicher sind oder brauchen kann, weil ich sie vielleicht auch nochmal in einen anderen Farbraum konvertieren muss.

00:06:43: und da ist es aber mittlerweile so dass man da schon in den modernen Video SoCs viel reingepackt hat.

00:06:50: Teilweise muss man auch in die Betriebssysteme gewisse Sachen mit vorhalten das man eben wirklich vermeidet solche unnötigen Unkopieraktionen zu machen, dass sich aber vielleicht auch zwischen den Einheiten intern Speicher habe, sodass ich halt nicht nur diese großen Blöcke optimal hab, so wie wir es in der letzten Folge besprochen haben.

00:07:12: Sondern dass auch meine komplette Infrastruktur dazu passt.

00:07:16: also Wie können die Bilder optimal ins einen externen Speichern kommen?

00:07:20: Wo gibt's aber auch rund um vielleicht eine NPU irgendwelche internen Speicher?

00:07:25: Wo gibts Mechanismen wo die Daten irgendwie intern ohne dass sie vielleicht zum externen Speicher gehen von einer Einheit zu anderen kopiert werden können.

00:07:34: Wobei man dann auch aufpassen muss, es geht manchmal gar nicht nur um Speicherbahnbreite, manchmal geht's auch um die Bus-Systeme selber wo man einfach auch mal abtauchen muss wenn man FPGR basierten SOC hat... Dann hat man das meisten selber unter Kontrolle.

00:07:50: aber da muss man sich selber auch so dimensionieren, dass man den entsprechenden neuralgeschen Punkten Bandbreite hat über die internen Busse, wie man es braucht.

00:08:00: Und so ist es halt ganz wichtig manchmal dass man nicht nur die Rechenleistung sich anschaut und sich davon den Tops von den Flops von diesen unterschiedlichen Kennzahlen blenden lässt.

00:08:12: weil wenn man dann reinschaut und dann einfach sieht okay das ist jetzt irgendein Standard SOC.

00:08:16: ich will jetzt da meine Applikation schreiben.

00:08:19: Ich kopiere hier sechs, sieben, acht Mal die Daten aus meinem Linux User Space hin und her.

00:08:25: Weil es nicht anders geht, dann merkt man aber auch Boah jetzt kommt eine Riesenlatenz ich kriege mehr wie ein HD Bild vielleicht gar nicht durch.

00:08:33: Ich krieg vielleicht ne Farbraumkonvertierung gar nicht so hin wie's braucht an der Stelle weil ist eigentlich nur über gewisse Einheiten schieben muss die dann wieder erfordern das is Übern, Speicher hin und her kopieren.

00:08:47: Und das sind aber Aspekte die man einfach zusätzlich im Blick haben muss.

00:08:51: und was eben wir gesehen haben oder bei SOC's wo es dann irgendwo wirklich herausfordernd war waren dann gar nicht so die eigentlichen Einheiten also

00:09:02: ein

00:09:02: Codec einen HD-Bild mit sechzig FPS verarbeiten kann oder eine NPU die Daten verarbeiten können sondern Rückzug hat man gesehen Vielleicht auch, weil der Kunde Constrains hatte welche Speicherchips er einsetzen wollte oder wie schnell die laufen konnte.

00:09:18: Oder wie auch immer dass diese Zahlen gar nicht das Problem waren sondern Wie dimensionier oder welches Software Architektur setze ich auf um wirklich diese Einheiten dann auch so nutzen zu können wie sie gedacht waren.

00:09:32: Genau und an dieser Stelle Was wir da ja immer machen ist, wir machen immer so System-Architekturanalysen.

00:09:38: Schauen uns genau die Dinge an um eben dann später nicht in solche Sackkassen reinzugehen.

00:09:44: Fährderweise muss man sagen, wir sind auch nicht fehlerfrei aber prinzipiell sind das Dinge die man sich anschauen kann und muss.

00:09:51: uns sollte unbedingt bevor man mit so einem Design beginnt und dann eben wirklich auf die Speicherband pleiten

00:09:59: Speicherbandbreiten, Busbreiten.

00:10:01: Genau.

00:10:02: Weil am Ende vom Tag will ja auch jeder so ein optimales System haben.

00:10:06: Man will nicht zu viel speichern und überdimensionieren.

00:10:10: Zum Schluss kann man sagen dann packe einfach maximum drauf was geht.

00:10:14: das wird schon irgendwie gehen.

00:10:15: Die

00:10:15: Entwickler freuen sich.

00:10:17: Es ist natürlich aber in Anführungszeichen ärgerlich wenn es eigentlich mit der Hälfte gehen würde wenn wir es gar nicht braucht.

00:10:22: Aber letztendlich muss man sich schon sehr genau alles Anschauen was man wirklich braucht, wo kann's bottlenecks?

00:10:31: geben, weil natürlich fairerweise die Hersteller von SOC ist auch nicht jede Applikation durchsteigen können.

00:10:39: Nicht jeder exotischen Knüff den vielleicht irgendein Entwickler jetzt gerade machen will oder wo eine Herausforderung hat, die Bilddaten zuerst in der GPU und dann woanders hinzuschieben und wie auch immer.

00:10:52: Dann gibt es da nicht die passende DMA-Engine.

00:10:55: Da muss man manuell kopieren.

00:10:56: Wir haben ja schon viel gesehen.

00:10:59: Wir kennen uns da Gott sei Dank aus oder und finden dann für die unterschiedlichen Themen schon auch immer Lösungen.

00:11:05: Aber ich sage mal bei unseren Projekten, es ist dann schon oftmals so dass wir unsere Zeit nicht damit verbringen in die Algorithmen abzutauchen sondern einfach solche Sachen wie du sagst entweder im Vorfeld zu dimensionieren dann später zu optimieren einfach daran Blick drauf zu haben Was kann ich da machen und wo gibt's irgendwie Limits, die dann einfach relativ schnell auch irgendwo zu Tage treten?

00:11:27: Genau.

00:11:28: Also ich glaub zum Abschluss kann man sagen... Liebe Kunden, kommt zu uns.

00:11:32: Wir können das mit euch erarbeiten, können uns das anschauen und werde selbst noch.

00:11:37: bitte habt ein Auge auf genau solche Themen denn wenn ich auf die Uhr schaue dann sehe ich dass wir jetzt am Ende unserer heutigen Folge angekommen sind.

00:11:45: der Hinweis an alle Zuhörerinnen und Zuhöhrer die E-Mail Podcast etsolectrics.de gibt's auch diese Woche!

00:11:51: Wir würden uns auf jeden Fall freuen wenn wir vom einen oder anderen hören wie eben Beim letzten Mal, weswegen wir ja die heutige Folge gemacht haben.

00:11:59: Und ansonsten wünsche mir wieder eine schöne Zeit, ne schöne Woche bis zum nächsten mal!

00:12:02: Tschüss und ciao!

Neuer Kommentar

Dein Name oder Pseudonym (wird öffentlich angezeigt)
Mindestens 10 Zeichen
Durch das Abschicken des Formulars stimmst du zu, dass der Wert unter "Name oder Pseudonym" gespeichert wird und öffentlich angezeigt werden kann. Wir speichern keine IP-Adressen oder andere personenbezogene Daten. Die Nutzung deines echten Namens ist freiwillig.