Die Digitaltechnik ist die Grundlage der Elektronischen Datenverarbeitung (EDV). Die Applikationen der EDV sind vielfältig:
Die Informationsverarbeitung erfordert eine Mensch-Maschine Schnittstelle, d.h. die Kodierung von Informationen zu Daten, die eigentliche Datenverarbeitung, und die anschließende Rückgewinnung der Informationen aus Daten, wie in Abb. 1 gezeigt ist.
Die Repräsentation und Kodierung von Informationen erfolgt durch Bitfolgen im Binärzahlensystem. Ein Bit enthält die Informationsmenge bestehend aus zwei Elementen:
{wahr,falsch}, {hell,dunkel}, {x0,x1} usw.
{1,0} → {H,L} → {3.3V,0V}
Generisches Datenverarbeitungssystem ⇔ Programmsteuerung
Generische EDV und Programmsteuerung bedeuten Einschränkung bei Optimierungsmöglichkeiten → Die Maschine ist universell!
Dazu soll das Schichtenmodell einer konventionellen Datenverarbeitungsanlage näher betrachtet werden.
Abstraktion
ISA: Instruction Set Architecture
Die Instruktionsebene eines Mikroprozessors kann mit zwei unterschiedlichen Architekturen implementiert werden:
Direkt mit digitaler Logik realisiert;
Mikroarchitektur: Transformation von komplexen Maschinenbefehlen in eine Untermenge einfacher Maschinenbefehle (sequenzielle Komposition) → Microcode
Man unterscheidet:
Reduced Instruction Set Computer Architektur
Kleine Instruktionsmenge besteht aus einfachen Operationen meist mit konstanter Instruktionslänge. Können auf ISA Mikroarchitektur verzichten (z.B. SUN Sparc, Motorola/IBM PowerPC, ARM)
Complex Instruction Set Computer Architektur
Große Instruktionsmenge mit komplexen Operationen und meist variabler Instruktionslänge → ISA Mikroarchitektur bei vielen CISC-Prozessoren (z.B. Intel X86/X64 Pentium usw.);
Die Betriebssystemebene ermöglicht die Abstraktion der Rechnerarchitektur, die ISA-Ebene ermöglicht die Abstraktion von der Digitallogikebene.
Ein klassisches Mikroprozessorsystem arbeitet ein Maschinenprogramm ( → Ablaufvorschrift) sequenziell ab → Limitierung!
Die einzelnen Instruktionen eines Maschinenprogramms werden in unterschiedlichen Werken im Mikroprozessor verarbeitet.
Zum näheren Verständnis der Programmsteuerung muss der Aufbau und die Architektur einer generischen von-Neumann-Anlage näher betrachtet werden.
Die Rechnerarchitektur ist unterteilt in
Das Leitwerk enthält folgende spezielle Register:
Zeigt auf Speicheradresse des nächsten auszuführenden Maschinenbefehls.
Enthält Kodierung des aktuell ausgeführten Befehls.
Enthält Informationen über aktuelle oder bereits ausgeführte Operationen, wie Zero-oder Carry-Bits, und beeinflusst die Programmausführung (z.B. bedingte Verzweigung).
Das Rechenwerk, das Leitwerk und der Registersatz sind über einen Daten- und Adressbus mit einem (einzigen) Hauptspeicher verbunden, dessen Speicherzellen über die Adresse ausgewählt werden.
Der Hauptspeicher enthält:
Ein Bussystem ist eine Gruppe von elektrischen Signalleitungen zur Datenübertragung, und verbindet mehrere Kommunikationsteilnehmer. Bei einem Datenaustausch auf einem Bus ist immer ein Teilnehmer schreibend und ein anderer lesend aktiv. → Limitierung
main() { printf("hello, world\n"); }
CALL SPRINT
DEFM HELLO WORLD.
DEFB FF
RET
SPRINT POP HL
LD A,(HL)
INC HL
PUSH HL
CP FF
RET Z
CALL PRINT
JR SPRINT
|
Speicherhierarchie eines SoC Designs [ECSOC,Rowen,2004] |
Ein verteiltes System ist eine Sammlung von lose gekoppelten Prozessoren oder Computern, die über ein Kommunikationsnetzwerk miteinander verbunden sind (Multicomputer).
Ein paralleles System ist eine Sammlung von stark gekoppelten Prozessoren (Multiprozessoren)
Verteilter Speicher
| Unified Memory Architecture
| Non Unified Memory Architecture
[computing.llnl.gov] |
Der von Daten- und Instruktionen gemeinsam geteilte Hauptspeicher ist der Flaschenhals bei der Programmausführung.
Aufteilung von Daten und Programmcode in getrennten Speicher beschleunigt die Ausführung von Maschinenanweisungen.
Das Leitwerk des Prozessors kann direkt mit dem Codespeicher verbunden werden!
Zerlegung (Partitionierung) eines sequenziellen Algorithmus oder eines Programms in parallele Tasks (Prozesse) → Parallele Komposition
Ausführung der Prozesse parallel (nebenläufig und ggfs. konkurrierend) auf mehreren Verarbeitungseinheiten (u. A. generische programmgesteuerte Prozessoren)
Def. Latenz: Gesamte oder Teilbearbeitungszeit eines Datensatzes
Def. Datendurchsatz: Anzahl der verarbeiteten Datensätze pro Zeiteinheit
Latenz und Bandbreite sind zunächst unabhängig!
Pipelining kann die Bandbreite erhöhen (nur Sinnvoll bei Datenströmen)
Parallele Tasks können die Latenz verringern
Man unterscheidet: Parallele Rechnerarchitektur und parallele Datenverarbeitung
Steigerung der Energieeffizienz von mikroelektronischen Systemen:
Skalierung von parallelen Rechnern auf reine Digitallogiksysteme für anwendungsspezifische Lösungen kann deutliche Reduktion der Hardware-Komplexität und der elektrischen Leistungsaufnahme bedeuten!
Digitale Bildverarbeitung und automatische Bildinterpretation (Vision)
Datenkompression (Video, mpeg)
Komplexe Steuerungssysteme mit großer Anzahl von Freiheitsgraden, wie z.B. Positionierungssteuerung von Robotergelenken und Maschinen
Kommunikation, z. B. nachrichten-basiertes Routing
Kryptoverfahren
Parallele numerische Verfahren, wie z. B. Lösung von Differentialgleichungen (Strömungsmechanik, Elektromagnetische Wellenausbreitung, Wetter- und Klimamodelle)
Wenn schon nicht alles Tasks gleichzeitig verarbeitet werden können, dann wenigstens die wichtigsten vorrangig ausführen
Das erfordert aber:
Datendurchsatz ist durch geteilten Speicherbus begrenzt - schlechte Skalierung von Multiprozessor- und Multikernsystemen
Programm (Befehle) und Daten (Operanden) müssen sequenziell aus dem gemeinsam geteilten Hauptspeicher geladen werden
Nur geringe Möglichkeiten der Parallelisierung (Pipeline-Architektur)
Befehlsausführung in sechs Phasen erhöht Bearbeitungslatenz
Generizität der Programmierbarkeit geht zu Lasten der Performanz (Latenz, Datendurchsatz, Energiebedarf) - keine algorithmische Optimierung möglich