Reconfigurable Computing
# Reconfigurable Computing

Der Begriff Reconfigurable Computing (engl.) bezeichnet das Gebiet der rekonfigurierbaren Rechensysteme und ihrer Anwendungen. Hierbei handelt es sich um Rechensysteme, die in ihrer Struktur programmierbar sind, wie beispielsweise auf der Basis von FPGAs – im Gegensatz zu herkömmlichen Von-Neumann-Rechnern, deren Befehlsströme in einer festen Struktur ablaufen und die via Zeitplanung programmiert werden (instruction scheduling).

## Paradigmen-Klassifikation für Rechnerarchitekturen

Die folgende Tabelle zeigt ein von Nick Tredennick um 1995 publiziertes Klassifikations-Schema für Rechner-Paradigmen von drei grundlegenden Rechnerarchitekturen.
Nick Tredennicks Rechner-Klassifikationsschema :
| Rechnerklasse | Ressourcen / Programmierungsquelle | Algorithmen / Programmierungsquelle |
| frühe historische Rechner | fest / keine | fest / keine |
| Von-Neumann-Rechner | fest / keine | variabel / Software (Befehlsströme) |
| Reconfigurable Computing | variabel / Configware (Konfiguration) | variabel / Flowware (Datenströme) |

## Varianten von rekonfigurierbaren Rechensystemen

Beim Reconfigurable Computing, also den rekonfigurierbaren Rechensystemen wird unterschieden zwischen
* feingranular rekonfigurierbar wie bei FPGAs mit nur 1 Bit breiten programmierbaren Logik-Blöcken (CLBs) und
* grobgranular rekonfigurierbar mit Wort-breiten (beispielsweise 32 Bit) rekonfigurierbaren Datenpfaden (rDPU: reconfigurable data path unit), die fast mit dem Hauptprozessor eines Computers vergleichbar sind, aber keinen Programmzähler enthalten.

## Abgrenzung zu anderen Rekonfigurierbarkeitsformen

Diese Abgrenzung erfolgt vor allem über die Ebene der Rekonfigurierbarkeit.
* Beim Reconfigurable Computing handelt es sich um die Rekonfigurierbarkeit auf der Ebene der Rechnerarchitektur im Sinne der Prozessorarchitektur, also die variable Leitung der Daten zu den Funktionalitäten. Logisch betrachtet ist es also eine Änderung der Schaltung zur Laufzeit. Realisiert wird dieses vorwiegend durch dynamisch logisch änderbare Schaltungen, wie dieses beispielsweise via den FPGAs möglich ist.
* Im Gegensatz dazu handelt es sich beim Adaptive Computing um die Rekonfigurierbarkeit auf der Ebene der Betriebssysteme oder der Serversysteme bzw. deren zentralen Hardware- und Software-Komponenten im Sinne der Sicht der Systemanwendungen und auch der Systemanwender. Realisiert wird dieses letztlich vorwiegend durch verschiedene Abstraktionslayer und verschiedene Kommunikationsprotokolle sowie speziell dafür entwickelte Software.