Multi-Core / Mehrkern-Prozessoren

Parallelrechnen und Multi-Core-Prozessoren sind Prinzipien, die seit Anfang der 90er Jahren in Superrechnern Einzug gehalten haben. Diese Systeme sind bis heute Multi-Prozessor-Systeme. Die dort verwendeten Verfahren finden ihren Weg auch in Personal Computer. Statt mehrere Prozessoren wird die Parallelisierung direkt im Prozessor vorgenommen. Das bedeutet, dass in einen Prozessor mehrere Prozessor-Kerne eingebaut werden. Man bezeichnet diese Prozessoren als Multi-Core- oder Mehrkern-Prozessoren. Rein äußerlich unterscheiden sich Multi-Core-CPUs nicht von Single-Core-CPUs. Innerhalb des Betriebssystems wird der Multi-Core-Prozessor wie mehrere Einheiten behandelt. Je nach Anzahl der Kerne gibt es abgewandelte Bezeichnungen, die darauf hindeuten, wie viele Kerne im Prozessor integriert sind.

Seit der Einführung von Doppelkern-Prozessoren hat sich die Computer-Infrastruktur entscheidend weiterentwickelt, wodurch Multi-Core-Prozessoren immer sinnvoller werden. So sind SATA-II-Festplatten in der Lage per Native Command Queuing (NCQ) Zugriffe in ihrer Reihenfolge zu verändern und dadurch Datenanforderungen von mehreren Prozessorkernen zu bearbeiten. Ebenso PCI Express (PCIe), auf dem mehrere Datentransfers parallel ablaufen können.

Vom Takt-orientierten Prozessor zum Mehr-Kern-Prozessor

Das immer schnellere Taktraten bei Prozessoren auch Nachteile bringen, das haben die Prozessor-Hersteller schnell erkannt. Probleme macht vor allem die Wärmeentwicklung, die durch die Leckströme in den kleinen Transistor-Strukturen und durch hohe Taktraten verursacht werden. Herkömmliche Kühlmaßnahmen mit dicken Kühlkörpern und schnell drehenden Lüftern bleiben wirkungslos. Die Computer werden dadurch nur noch lauter.
Multi-Core / Mehrkern-Prozessoren
Anstatt die Taktrate weiter zu steigern, ist man auf die Mehrkern-Technik ausgewichen, die in einem Prozessor mehrere Kerne zusammenschaltet. Das bedeutet, moderne Prozessoren haben nicht nur eine Recheneinheit, sondern mehrere. Es könnte sein, dass irgendwann für jede laufende Anwendung oder Prozess ein eigener Prozessorkern, also eine Recheneinheit zur Verfügung steht. Allerdings bringt dieses Potential nur etwas, wenn mehrere laufende Anwendungen mehrere Prozessorkerne gleichzeitig beschäftigen können. Es braucht also Software, die das ganze koordiniert und eine Hardware, die das unterstützt. Dazu gehört das Verteilen der Berechnungen auf mehrere Prozessorkerne. Man nennt das auch die "Automatische Parallelisierung". In 3D-Software wird die Parallelrechentechnik schon länger verwendet.

Doch typische Anwendungen, durch die parallele Rechenleistung gefordert wird, gibt es für den Desktop-Computer nicht. Die meisten Desktop-Anwendungen brauchen in der Regel keine parallelisierte Rechenleistung über einen längeren Zeitraum. Nur manchmal hat man das Gefühl, dass ein Mehrkern-Prozessor eine Geschwindigkeitssteigerung hervorruft. Die ist darauf zurück zu führen, dass mehrere Programme tatsächlich parallel laufen können. Im Optimalfall nutzen mehrere leistungshungrige Anwendungen unterschiedliche Prozessorkerne. Zum Beispiel im Hintergrund (Dienste) oder Vordergrund laufende Programme. Durch mehrere Prozessorkerne entsteht eine Art Leistungsreserve, durch die Anwendungen Eingaben immer bereitwillig entgegennehmen, auch wenn im Hintergrund irgendwelche Prozesse Rechenleistung verbrauchen.
Prozessoren mit mehr als zwei Kernen haben es jedoch schwer sich bei der normalen Nutzung zu beweisen. Denn mehr als zwei Kerne bedarf Anwendungen, die ihre Berechnungen selber auf mehrere Prozessorkerne verteilen können. Während ein Dualcore-Prozessor noch durch das Betriebssystem bedient wird, bedarf es bei mehr als zwei Kernen die Unterstützung durch die Anwendungen.
Die Vorteile der ersten Dualcore-Prozessoren waren ein geringerer Takt und weniger Energieverbrauch pro Kern und somit weniger Aufwand beim Kühlen. Das heißt, weniger Stromverbrauch bei gleichzeitiger Leistungssteigerung.

In Multi-Core-Systemen werden viele Aufgaben in Threads aufgeteilt. Diese Threads werden parallel von mehreren Prozessorkernen abgearbeitet. Dazu müssen das Betriebssystem und die Programme "threaded"- oder "multi-threaded"-fähig sein. Mit Hyper-Threading hat Intel die Software-Branche schon früh zur Realisierung von Multi-Threading-Anwendungen motiviert.
Auch wenn durch die wachsende Verbreitung von Computern mit Multi-Core-Prozessoren Multi-Threading-Anwendungen attraktiver werden, ändert sich die Software nur sehr langsam. Das Problem: Multi-Threading-Anwendungen sind sehr viel komplizierter in der Programmierung. Dazu kommen neue und ungewohnte Fehlerquellen hinzu.
Die Parallelisierung von Software stellt die Programmierer vor eine große Herausforderung. Erschwerend kommt hinzu, dass die meisten Anwendungen keiner Parallelisierung bedürfen. Vor allem dann, wenn sie die meiste Zeit sowieso auf Nutzereingaben warten. Typische Anwendungen, die durch Parallelisierung deutliche Vorteile haben, sind Texterkennung (OCR), Bildbearbeitung und Videoverarbeitung.
Wenn Multicore-Prozessoren für viele Anwendungen keinen wirklichen Vorteil bringen, werden die Programmierer eher auf die Nutzung von Multi-Threading verzichten. Billige Software nutzt in der Regel kein Multi-Threading. Und auch wenn ein Programm Multi-Threading verwendet, bedeutet das nicht, dass es das mit allen Funktionen tut.

Zwei oder mehr Prozessorkerne in einem Prozessor unterzubringen ist in etwa so, wie in ein Auto mehrere Motoren einzubauen. Ob das Sinn macht, hängt eben stark von der Nutzung und Anwendung ab. Wer nur in der Stadt herum fährt wird nie die Leistung von zwei Motoren brauchen.
Doch Intel und AMD propagieren unaufhörlich den Wechsel zur parallelisierbaren Programmierung. Denn beide sind nicht in der Lage die Taktrate ihrer Prozessoren auf über 4 GHz zu erhöhen. Und die Software-Entwickler werden diese Entwicklung mitgehen, wenn sie mit Ihren Programmen keine Geschwindigkeitsprobleme bekommen wollen.
Trotz Multi-Core-Prozessoren kommt es immer noch auf die Rechenleistung eines einzelnen Kerns an. Das haben auch Intel und AMD erkannt und deshalb in ihre Mehrkern-Prozessoren eine Übertaktungsautomatik eingebaut. Wenn mehrere Kerne nichts zu tun haben, dann werden sie abgeschaltet und ein Kern übertaktet. Und zwar so lange und so hoch, bis er zu heiß wird. Dann wird dieser Kern wieder heruntergetaktet.

Typische Anwendungen für Single-Core-Prozessoren

Bei typischen Desktop-Anwendungen, wie Office, Internet, E-Mail oder Spielen bringt ein schneller getakteter Single-Core-Prozessor mehr Leistung, als ein Multi-Core-Prozessor.

Typische Multi-Threading-Anwendungen für Multi-Core-Prozessoren

Auswirkungen auf die Prozessor- und Computer-Architektur

Die üblichen Multi-Core-Architekturen bauen darauf, dass sich die Prozessor-Kerne den Cache und Arbeitsspeicher teilen. Je mehr Kerne ein Prozessor hat, desto mehr Speicher bzw. mehr Bandbreite zum Speicher ist erforderlich.
Der Zugriff auf Speicher und Schnittstellen bleibt auf der Strecke, wenn sich mehrere Kerne den Bus zum Chipsatz teilen müssen. Aus diesem Grund hat es sich in Multi-Core-Prozessoren schnell durchgesetzt den Speicher-Controller aus dem Chipsatz in den Prozessor zu verlegen.
Es bleibt dann nur noch das Problem, dass sich die Kerne darüber abstimmen müssen, wer gerade welche Daten im Cache hält. Eine mögliche Lösung ist eine hierarchische Cache-Struktur. Dabei bekommt jeder Kern einen eigenen L1-Cache und L2-Cache. Den L3-Cache müssen sich die Kerne teilen. Ein Cache-Kohärenz-Protokoll sorgt dafür, dass sich die Prozessorkerne bei der Nutzung des L3-Caches nicht in die Quere kommen.

Multicore-Standards

Es ist denkbar, dass in einem Mehrkern-Prozessor-System verschiedene Aufgaben auf einzelnen Prozessoren verteilt werden. Eine Anwendung könnte darin bestehen, dass Ergebnisse anderer Programme aus dem gemeinsamen Speicher abgerufen werden. Der Vorteil besteht darin, dass die Abhängigkeit zwischen den Programmen reduziert wird. Erfordert eine Aufgabe sehr viel Rechenleistung und wird deshalb ein Prozessorkern sehr stark beansprucht, dann sind andere Aufgaben davon nicht betroffen. Sie haben ihren eigenen Prozessorkern.
Damit ein solches Szenario möglich ist, muss sie auf der Software-Seite unterstützt werden. Sowohl beim Betriebssystem, als auch bei den Anwendungsprogrammen. Dabei besteht die Frage, wie bekommt man die volle Leistung aus diesen Systemen heraus?
Dazu muss man sagen, dass wir noch am Anfang der Multicore-Software-Entwicklung stehen und es einfach noch an einer Multicore-Standardisierung mangelt. Das heißt, es fehlen Software-Standards, die Mehrkern-Prozessoren unterstützen.

Multi-Threading, also die prozessinterne Kommunikation, ist durch POSIX gut definiert. POSIX ist eine Sammlung offener APIs, die von der IEEE für Betriebssystemdienste spezifiziert wurden. Der Standard definiert Schnittstellen zur Thread- und Prozesssteuerung. POSIX befindet sich in Linux, Unix und in einer Reihe Embedded-Betriebssystemen.
Multi-Threading ist in Programmiersprachen, wie Java oder Ada integriert. Mit OpenMP können Entwickler parallele Anweisungen in C- und C++-Code integrieren. Doch leicer reicht keine dieser Spezifikationen an POSIX heran.

Grundlagen der Multi-Core-Technik