MACNOTES

Veröffentlicht am  11.11.07, 18:22 Uhr von  ml

Techtalk: Schnellere Rechner trotz geringerer Taktfrequenzen

NotizenWer die großen Prozessorhersteller und ihre Produkte in den letzten Jahren aufmerksam verfolgt hat, der konnte dabei einen Wandel feststellen: während der Pentium 4 vor etwa 4 Jahren bereits mit Taktfrequenzen jenseits von 3GHz lief, arbeiten heute die meisten Standardprozessoren weit unter dieser Marke.

Das die Prozessoren trotzdem nicht langsamer geworden sind – sie würden sich so wohl nur sehr schwer verkaufen lassen – liegt an unterschiedlichen Dingen. Der folgende Artikel gibt einen Überblick über Technologien und Maßnahmen, mit denen die Geschwindigkeit von Rechnern auch ohne große Taktratensteigerungen gesteigert wird.

Parallelität
Auf einem heutigen System laufen viele Aufgaben scheinbar parallel ab. Ein Blick in die Aktivitätsanzeige von Mac OS X offenbart eine Vielzahl an Prozessen, die quasi alle zur selben Zeit laufen. Auf einem Single-Prozessorsystem wird diese Parallelität durch ein Zeitmultiplexverfahren realisiert. Die zur Verfügung stehende Rechenzeit wird in kurze Abschnitte aufgeteilt und jeweils ein Abschnitt wird einem Prozess zugewiesen. Mit Hilfe von Prioritäten kann ein Prozess mehr oder weniger Rechenzeit zugewiesen bekommen.

XY

SMP, SMT und Hyperthreading
Hinter der Abkürzung SMP versteckt sich der Begriff Symmetric Multiprocessing. Gemeint ist damit, dass mehrere gleichartige Prozessoren parallel in einem System verwendet werden. Multicore-Prozessoren sind eine Implementierung von SMP. In einem älteren Artikel hatten wir bereits einmal die Gründe für und die Vorteile von Multicore-Prozessoren erläutert.

Während bei SMP die Anzahl der Prozessoren dupliziert wird, werden bei SMT-fähigen Prozessoren (Simultaneous Multithreading) einzelne Komponenten (Pipeline, Register und Rechenwerke) des Prozessors dupliziert. Damit kann ein Prozessor mehrere Threads echt-parallel ausführen. SMT ist einfacher aber auch weniger leistungsfähig als SMP. Die Idee hinter SMT ist vereinfacht ausgedrückt die, dass Rechenwerke die mehrmals vorhanden sind parallel von unabhängigen Threads ausgelastet werden können.

Der bekannteste Prozessor mit SMT-Architektur dürfte Intels Pentium-4 mit Hyperthreading sein. Gegenüber einem Betriebssystem gibt sich ein SMT-fähiger Prozessor meist als zwei Prozessoren aus.

XY XYZ
Anzeige eines HT-Prozessors unter Linux und Windows. Bei den Prozessor-Flags unter Linux ist das Flag ht für Hyperthreading zu sehen.

Nachdem Hyperthreading bei Intel mit dem Ende des Pentium 4 erstmal wieder verschwand, wird es wahrscheinlich mit der übernächsten Prozessorgeneration Nehalem wieder Einzug halten. Neben Intel verwenden auch IBM und Sun SMT-Techniken in einigen ihrer Prozessoren.

Der Grund für solche Architekturen ist, dass man auf Prozessorebene die Parallelität von Aufgaben ausnutzen möchte. Bislang sequentiell ablaufende Aufgaben können damit parallel ausgeführt werden. Solche Architekturen stellen aber auch erhöhte Anforderungen an Softwareentwickler, denn diese müssen ihre Programme anpassen und z. B. Daten mit geeigneten Synchronisationsmechanismen vor wechselseitigem Zugriff zu schützen.

Architektur
Großes Potential bei der Verbesserung von Prozessoren ohne die Taktraten zu steigern liegt in der Prozessorarchitektur. Optimierte Rechenwerke sind z. B. in der Lage Berechnungen schneller auszuführen.

Ein großer Bremsklotz bei heutigen Architekturen ist die hohe Latenz zwischen Prozessor und Hauptspeicher. Im Vergleich zur Prozessorgeschwindigkeit ist die Geschwindigkeit des Hauptspeichers um ein Vielfaches geringer. Dieses Manko versucht man mit Caches zu umgehen. Im L2-Cache werden besonders häufig benötigte Daten zwischengespeichert. Eine Möglichkeit also die Verarbeitungsgeschwindigkeit zu steigern, ist es die Größe von Caches zu erhöhen. Je größer der Cache, desto mehr Daten können darin vorgehalten werden und müssen nicht aus dem Hauptspeicher geladen werden. Intels nächste Prozessorgeneration Penryn wird hier mit L2-Caches mit bis zu 6 MB Größe aufwarten.

Um die Anzahl der Zugriffe auf den Hauptspeicher zu reduzieren wird ebenfalls die Anzahl der auf dem Prozessor verfügbaren Register erhöht. Während die klassische x86-Architektur nur über 8 frei verfügbare Register verfügte, sind es für die 64-Bit-Erweiterung 16.

Bei der Abarbeitung eines Programms kommt es zu vielen Programmsprüngen und Verzweigungen im Code, die aus Bedingungen die der Programmierer formuliert hat resultieren. Springt die Ausführung eines Programms an eine neue Stelle, dann muss ggf. erst der Programmcode aus dem Hauptspeicher geladen werden. Um die an dieser Stelle auftretenden Latenzen zu vermeiden, verfügen moderne Prozessoren über eine sog. Branch-Prediction. Diese Einheit versucht Sprünge im Programmcode möglichst präzise vorherzusagen und lädt dann parallel zur aktuellen Ausführung bereits die neuen Codeteile aus dem Speicher.

Der Programmierer kann mit speziellen Compilerhinweisen bewirken, dass der Compiler den Programmcode so strukturiert, dass die Branch-Prediction eine besonders hohe Trefferquote erzielen kann. Im von Apple favorisierten GCC gibt es dazu die Makros EXPECT_TRUE() und EXPECT_FALSE(). Mit diesen Hinweisen kann der Compiler den Programmcode für den allgemeinen Fall optimieren.

Eine weitere Möglichkeit die Rechengeschwindigkeit zu steigern sind Spezialrecheneinheiten. Unter dem Namen Altivec (PowerPC) und SSE (Intel) haben die Prozessorhersteller spezielle Vektorrecheneinheiten in ihre Prozessoren integriert. Diese Einheiten arbeiten nach dem sog. SIMD-Prinzip. SIMD steht für Single Instruction Multiple Data und das bedeutet, dass eine Rechenoperation auf einen ganzen Datenstrom angewendet wird. Dies ist z. B. bei der Video- oder Musikkomprimierung interessant, da hier spezielle Instruktionen immer wieder auf unterschiedliche Daten angewendet werden.

Compiler
Großen Einfluss auf die Geschwindigkeit haben Compiler. Sie übersetzen den vom Programmierer in einer Programmiersprache verfassten Programmtext in ein ausführbares Programm. Compiler haben großen Einfluss darauf, wie effektiv die Rechenwerke und Register des Prozessors ausgenutzt werden. Eine Technik, die alle gängigen Compiler beherrschen, ist das sog. Loop Unrolling. Mehrere Iterationen einer Schleife werden zusammengefasst und linear abgearbeitet. Dabei werden die Sprünge eingespart, die sonst am Ende jedes Durchlaufs den Programmzähler auf den Anfang der Schleife setzen. Der Nachteil ist, dass dadurch die Größe des Programmcodes anwächst und diese Technik daher für eingebettete Systeme ungeeignet ist.

Es gibt noch eine Vielzahl weiterer Möglichkeiten für Compiler den Programmcode zu optimieren. Doch das würde an dieser Stelle zu weit führen. Wer näher daran interessiert ist, den verweise ich auf den entsprechenden Wikipedia-Artikel.

Betriebssystem
Für den Anwender kommt es letzlich darauf an, welche Geschwindigkeit bei ihm “ankommt”. An dieser Stelle kommt das Betriebssystem ins Spiel. Wie gut kann es die Möglichkeiten der Hardwarearchitektur ausnutzen und wieviel Performance wird vom Betriebssystem geschluckt.

An dieser Stelle kommen auch subjektive bzw. psychologische Faktoren mit ins Spiel. Lässt die Reaktion des Betriebssystems auf eine Anwenderinteraktion länger als 100ms auf sich warten, so entsteht der Eindruck eines langsamen Systems. Deshalb sollten Dialoge mit Fortschrittsbalken möglichst sofort angezeigt werden und Reaktionen auf Mausklicks sofort erfolgen. Wie wichtig das ist, zeigte sich 2001 bei der Veröffentlichung von Mac OS X 10.0. Die neue Aqua-Oberfläche war so unglaublich träge, dass die Menschen das Gefühl hatten, ihr Rechner läuft gegenüber Mac OS 9 mit angezogener Handbremse. Dabei zeigten alle Benchmarks, dass das neue System schneller als das alte war. Mit Version 10.1 spendierte Apple der Oberfläche deutlich mehr Geschwindigkeit und sofort hatte man den Eindruck vor einem neuen Rechner zu sitzen.

Ein weiterer Punkt in dem der Betriebssystemhersteller Einfluss auf die Geschwindigkeit (s)eines Systems hat, ist durch die Bereitstellung von Bibliotheken. Eine großes Unternehmen hat häufig mehr Ressourcen und besseren Zugang zu Architekturdetails und das hilft optimierte Algorithmen mit Hilfe von Bibliotheken anzubieten. Entwickler die diese Bibliotheken benutzen profitieren davon und können sich auf ihre eigentliche Aufgabe konzentrieren. Apple hat es an dieser Stelle zu einer gewissen Perfektion gebracht. Das Accelerate-Framework (unter /System/Library/Frameworks) unterstützt sowohl die PowerPC- als auch die Intel-Architektur. Ein Entwickler muss sich also nicht mit unterschiedlichen Optimierungen für zwei Architekturen beschäftigen, sondern kann einfach die Bibliothek von Apple nutzen.

Fazit
Dieser Artikel hat gezeigt, wie sich in Zukunft die Geschwindigkeit von Computern steigern lässt. Die Möglichkeiten beschränken sich dabei nicht nur auf den Prozessor allein, sondern es gibt vielmehr eine Vielzahl an Stellschrauben, die Einfluss auf die Geschwindigkeit haben. Die Prozessorhersteller werden die Architektur ihrer Prozessoren weiter optimieren und mittels SMP- und SMT-Techniken die Parallelisierung von Aufgaben vorantreiben. Die Betriebssystemhersteller werden ihre Systeme anpassen, um die Möglichkeiten der Hardwarearchitektur möglichst effektiv ausnutzen zu können. Mit Hilfe von Bibliotheken können auch Anwendungsentwickler auf die Möglichkeiten der Hardware zugreifen, ohne sich mit der Optimierung für eine spezielle Architektur auseinandersetzen zu müssen. Weitere Leistungsreserven lassen sich mit Compilern heben, denn in deren Hand liegt es die Leistungsreserven der Hardware optimal auszunutzen.

 Und wie ist deine Meinung?  Schreib uns einfach!

 1 Kommentar(e) bisher

  •  Daniel sagte am 11. November 2007:

    Es mag ja sein, dass die Prozessoren immer schneller werden, aber seit Leopard laufen auf meinem Macbook auch andauerend die Lüfter wegen hoher Prozessorauslastung – geht euch das auch so?
    Besonders der windowserver und syslog brauchen immer wieder massiv Prozessorleistung. Hoffentlich wird das mit dem ersten Update besser.

    Antworten 

Kommentar verfassen

Werbung
© 2006-2013 MACNOTES.DE. Made with insanely great for all things Mac. Apple.de