Superscalar ist ein Begriff, der sich auf die Architektur einer CPU oder eines einzelnen Kerns bezieht.
Um eine Anweisung auszuführen, muss eine CPU eine Anzahl von Schritten ausführen, und jeder Schritt wird von einem bestimmten dedizierten Teil oder einer "Ausführungseinheit" der CPU ausgeführt. Nicht-superskalare CPUs starten von Schritt 0 bis X (X kann je nach Anweisungstyp variieren) und führen alle Schritte vollständig aus, bevor die nächste Anweisung gestartet wird.
Superskalare CPUs versuchen beispielsweise, in Schritt 0 neue Anweisungen in der "Pipeline" zu erhalten, bevor der vorherige Befehl alle seine Schritte abgeschlossen hat. Daher ist die CPU vollständiger ausgelastet und schneller (und viel komplexer), da die Ausführungseinheiten immer funktionieren.
Parallel zu einer Workload wird Parallelität erreicht, wenn sie in Einheiten unterteilt werden kann, so dass mehrere Elemente effektiv daran arbeiten können. Superskalare Architekturen versuchen, die Ausführung eines einzelnen Befehlsstroms in einem einzelnen Kern / einer einzelnen CPU zu parallelisieren.
Die Parallelverarbeitung ist im Konzept ähnlich, aber es handelt sich nicht mehr um den Befehlsstrom einer CPU, sondern um einen (wahrscheinlich großen) Datensatz, der verarbeitet werden muss. Wie können Sie die Arbeitslast aufteilen, in der X-Anzahl von CPUs oder sogar separate Knoten, die über ein Netzwerk verbunden sind, dieselben oder verschiedene Programme ausführen, sodass die Arbeitslast am effizientesten verarbeitet wird? Was ist erforderlich, um sicherzustellen, dass die CPUs oder Systeme nicht aufeinander treten und Daten beschädigen? Das ist die Art von Fragen, die bei der parallelen Verarbeitung gestellt werden.