Hallo miteinander!
Meine Frage(n):
Da ein DSP ja super schnell rechnen kann... warum verwendet man ihn
nicht gleich für alles?
Was kann ein DSP also schlecht bzw garnicht?
Wie sieht es aus mir Speicherverwaltung?
Welche Topologien sind für mehrere DSPs geeignet bzw ungeeignet?
(Warum?)
Würd mich freuen wenn ihr helfen könnt!!!
Allgemeingültige Antworten sind schwierig, weil der Terminus DSP keine
bestimmte Architektur beschreibt, sondern nur ein bestimmtes
Anwendungsgebiet, bzw die Eignung dafür. Damit wird eine konkrete
DSP-Implementierung nicht automatisch für andere Anwendungen ungeeignet.
Ein Extremfall in dieser Hinsicht sind beispielsweise Microchips dsPICs.
Denn das sind ganz normale 16bit Microcontroller mit zusätzlicher
DSP-Funktionalität. Konsequenterweise gibt es sie deshalb mittlerweise
auch doppelt, als dsPIC33 mit und als PIC24 ohne DSP-Funktionalität,
ohne weitere Unterschiede. Eingeschränkt ist man da durch DSP folglich
nicht.
Das anderere Extrem sind DSP der ersten Generationen, die so sehr auf
DSP-spezifische Datenbreiten und Programmiertechniken optimiert waren,
dass 8/16/32bit Datentypen nur sehr begrenzt unterstützt wurden und
Speicheradressierung in nicht DSP-typischer Weise schon mal zum Erlebnis
werden konnte.
DSPs sind schnell bei Aufgaben mit einer einfachen, linearen Struktur,
bei der immer die selben Schleifen durchlaufen und Daten in
gleichmaessigen Haeppchen verarbeitet werden. Wenn das Programm dagegen
hauptsaechlich aus Zustandsautomaten und weniger aus Berechnungen
besteht, auf externe Ereignisse reagieren soll, wahlfreier Zugriff auf
grosse Speichermengen gewuenscht ist, dann ist ein DSP ungeeignet.
Wie ist es den mit Synchronisation in einem Mehr-Prozessor(DSP)-System?
Sind DSPs in der Synchronisation bzw Speicherzugriffen langsamer?
Lohnt es sich viele DSPs zu verknüpfen? Oder würden diese zu lange mit
Synchronisation beschäftigt sein? Das ist ja ein allgemeines Problem,
aber ist das bei DSPs noch schlimmer?
Und vielen Dank soweit! :)
Hi,
zu Synchronisation kann ich nicht viel sagen, da fehlt mir das
Fachwissen...
Aber generell glaube ich, dass Du "in die falsche Richtung fragst".
Es gibt einfach nicht den "reinen DSP", welcher Features A und B gut
kann und bei C und D schlecht ist.
Ein DSP ist zunächst einmal ein Prozessor, dessen zentrale Einheiten
(also ALU, Daten- und Adressbusse) etc. dafür optimiert sind, sehr
effektiv und schnell numerische Berechnungen durchzuführen. Das kann ein
DSP um Längen besser als ein "normaler" Prozessor.
Da es aber viele Einsatzbereiche gibt, wo der DSP neben reiner
Signalverarbeitung auch Steuerungsaufgaben übernehmen soll (damit man
eben nicht einen DSP und einen Mikrocontroller braucht), haben viele
DSPs auch jede Menge Peripherie mit auf dem Chip, um eben auch noch "uC
zu spielen".
Umgekehrt sei aber auch nicht verschwiegen, dass "normale" Prozessoren
zum Teil mit zusätzlichen Recheneinheiten ausgestattet werden, welche
auch effektivere Signalverarbeitung ermöglichen.
Eine generelle Aussage ist also wohl unmöglich. Man muss sich wohl den
genauen Einsatzzweck angucken und dann einen dazu möglichst optimal
passenden Prozessor finden.
Gruß
FL
Was ist den z.B. mit Betriebssystemstrukturen (Scheduling,
Speicherverwaltung)? Oder sogar einem Betriebssystem. Geht dadurch viel
Leistung eines DSPs verloren? Macht das bei DSPs überhaupt Sinn?
(Angenommen wir betrachten echte DSPs und nicht Prozessoren die um
DSP-Recheneinheiten erweitert sind)
Name wrote:
> Was ist den z.B. mit Betriebssystemstrukturen (Scheduling,> Speicherverwaltung)? Oder sogar einem Betriebssystem. Geht dadurch viel> Leistung eines DSPs verloren? Macht das bei DSPs überhaupt Sinn?
Wenn du unter einem Betriebssystem Windows oder Linux verstehst - das
ergibt wenig Sinn. Ein einfacher Scheduler hingegen vernichtet kaum
Leistung, eher im Gegenteil. Speicherverwaltung ist weitgehend
performanceneutral solange damit nicht virtueller Speicher gemeint ist.
DSP Anwendungen haben allerdings oft recht harte Echtzeitbedingungen,
immerhin kann Audioverarbeitung nicht einfach mal Pause machen ohne das
man das hört. Inwieweit sich das mit einem Scheduler verträgt weiss nur
der Einzelfall.
Blackfin. Das ist aber schon ein ziemlicher
Allround-Multimedia-Prozessor, auch wenn er viele DSP-Funktionen
beinhaltet. Bei kleineren, "klassischen" DSPs kann ich mir Probleme mit
dem Speichermanagement vorstellen; man hat oft keinen zusammenhaengenden
Speicherbereich in dem man nach Belieben herumwerkeln kann, sondern muss
zwischen internem/externem Speicher und verschiedenen Speicherbaenken
unterscheiden um die maximale Performance zu erreichen, internen
Speicher an verschiedenen Stellen wiederverwenden, usw. Das schraenkt
die Einsetzbarkeit von Betriebssystemen etwas ein.
> Weiß jemand in wiefern so ein DSP-Betriebssystem multiprozessorfähig> ist?
Linux ist es bekanntlich.
Und manche DSPs wurden schon vor vielen Jahren als Multicores
implementiert.
Andreas Schwarz wrote:
> Allround-Multimedia-Prozessor, auch wenn er viele DSP-Funktionen> beinhaltet.
Wobei man auch alle PC-Prozessoren der letzten ~10 Jahre so bezeichnen
kann. Was diese ganze Fragerei schlussendlich ins Absurde führt. Denn
DSP ist eben nicht DSP und diese ganzen allgemeinen gehaltenen Fragen
führen deshalb ins Nichts.
Da kann man kaum eine global gültige Aussage machen, was DSPs nicht
können. Aber zum Beispiel Strom sparen und I/O-Pins schnell schalten
(Bit-Banging) zählen meist nicht zu den Stärken.
Die meisten DSPs dürften heutzutage in mobilen Geräten stecken, und da
ist ein geringer Stromverbrauch eine der wichtigsten Anforderungen.
Extrembeispiele wären Bluetooth-Headsets oder Hörgeräte.
Naja, die haben meist einen dicken Li-Io der sowieso schon ein paar
Motoren und ein Display versorgen muss. Da macht der DSP das Kraut auch
nicht mehr fett.
> Weiß jemand in wiefern so ein DSP-Betriebssystem multiprozessorfähig ist?
Es gab vor Jahren richtige Multiprozessor-Betriebssysteme, z.B. von der
Fa. Eonic. Manche SHARCs und TigerSHARCs haben Hardware-Links, die sich
an Transputer-Topologien orientieren und für solche Betriebssysteme
gedacht waren. Es hat sich aber nicht als vorteilhaft erwiesen, den
Compiler die Zuweisung von Tasks machen zu lassen.
VisualDSP unterstützt aber die Entwicklung von Software auf mehreren
Cores parallel, allerdings nur rudimentär, ohne Verwendung eines
Betriebssystems.
Sinnvoller und effizienter ist es, jedem Core seine Aufgaben explizit
zuzuweisen, denn anders als bei PCs wechseln die Aufgaben eines
DSP-Systems nicht im Sekundentakt. Meist sind die Anwendung sehr
deterministisch und verlaufen in geordneten Bahnen.
Im Vergleich zu X86-Architekturen sollte man auch immer das
MIPS/Watts-Verhältnis im Blick behalten. Ein Dualcore-Blackfin (BF561)
braucht gerade mal gut 1 Watt bei 1200 MIPS Rechenleistung. Diese
Rechenleistung reicht für ca. 50 Kanäle von Sprach-Codecs wie sie in
Handys verwendet werden (G.723.1). Ein PC-Prozessor braucht ein
Vielfaches an Leistung, kostet dazu viel mehr und ist erheblich viel
größer.
µCLinux funktioniert ganz ordentlich auf Blackfins, allerdings geht -
wie bei PCs - die für Anwendungen verfügbare Rechenleistung in die Knie.
Gruß,
Andreas
www.dsp-bayer.de
Es gibt auch effiziente x86er. Transmeta hat bis vor ein paar Jahren den
Efficeon vertrieben, der hatte schon alles mögliche integriert und lag
glaub bei 5W@2GHz. Intern ein VLIW mit sicher genug Rechenleistung, per
Codemorphing wurde x86 in VLIW übersetzt, sogar recht performant.
VIAs C3 ist auch recht sparsam, oder AMDs Geode. Liegen auch im
einstelligen Bereich.
Die DSPs in Digitalkameras müssen schon ganz gut rechnen, bei meiner
glaub 6 Jahre alten kann ich problemlos 5 Bilder in serie mit je 4MPix
machen. Das muss auch erstmal komprimiert werden.