Open Source im professionellen Einsatz

Programme für SSE2-fähige Prozessoren optimieren

Vier auf einen Streich

Intels x86-Prozessoren sind SIMD-fähig seit dem Pentium MMX: SIMD (Single Instruction, Multiple Data) bedeutet, dass die CPU vier Berechnungen in einem Rutsch ausführt. Wer die passenden Optimierungstechniken kennt und nutzt, kann seine Programme erheblich beschleunigen.

Aktuelle Prozessoren der IA32-Familie sind schnell genug für wissenschaftliche Berechnungen und andere rechenintensive Aufgaben, etwa Multimedia-Anwendungen. Bis vor kurzem galt das nur für Ganzzahloperationen, bei der Gleitkommarechnung waren andere Prozessorfamilien deutlich schneller[1].

Seit dem Pentium MMX hat Intel einen neuen Weg eingeschlagen: SIMD-Erweiterungen (Single Instruction, Multiple Data) sollen Integer- und Gleitkomma-Operationen wesentlich schneller ausführen als bisherige Architekturen, da ein einzelner Befehl mehrere Berechnungen ausführt.

Befehl mit breiter Wirkung

Die besondere Stärke von SIMD-Architekturen sind Multimedia-Anwendungen. Statt vieler unterschiedlicher Informationen in den verschiedensten Datentypen muss der Prozessor hier ganze Ströme von Daten gleichen Typs mit den gleichen Befehlen verarbeitet. Ein SIMD-Befehl arbeitet daher mit mehreren Daten des gleichen Typs zur selben Zeit. Das steht im Gegensatz zur SISD-Technik (Single Instruction, Single Data) der bisherigen Prozessoren. Die Arbeitsweisen von SISD und SIMD sind in Abbildung 1 dargestellt.

Reine SIMD-Prozessoren wären jedoch zu unflexibel, um auch SISD-Aufgaben schnell und Ressourcen sparend zu bearbeiten. Kombiniert sind SISD und SIMD ideal, um sowohl einfache Aufgaben als auch größere Datensätze schnell und effektiv zu bearbeiten.

Die SIMD-Arbeitsweise ist nicht neu. Viele andere Prozessorarchitekturen, zum Beispiel MIPS und SPARC, nutzen ebenfalls diese Technik. Auch Spielekonsolen wie Sonys Playstation 2 mit ihrer Emotion Engine nutzen SIMD.

Alter Hut: SIMD in der GPU

Selbst auf normalen PCs arbeiten seit Jahren SIMD-Einheiten, und zwar in den Grafikkarten (GPU, Graphics Processing Unit). SIMD ist ideal für die Bearbeitung von Grafikdaten: Die GPU muss oft Operationen, etwa eine geometrische Transformation, auf eine größere Menge von Daten (hier: Vertices) gleichen Typs anwenden.

Es gibt verschiedenen Techniken, die die SIMD-Operationen in Hardware verwirklichen. Im Folgenden meint SIMD die Variante der neueren x86-Prozessoren, der Textkasten "SIMD-Erweiterungen der IA32-Prozessoren" gibt Erläuterungen zu den verbreiteten Techniken MMX, SSE, SSE2 und 3DNow.

Abbildung 1: Ein SISD-Prozessor (links) arbeitet pro Befehl mit einem einzelnen Datenfeld, während ein SIMD-Prozessor (rechts) in jedem Schritt mehrere Daten gleichzeitig verarbeitet.

Abbildung 1: Ein SISD-Prozessor (links) arbeitet pro Befehl mit einem einzelnen Datenfeld, während ein SIMD-Prozessor (rechts) in jedem Schritt mehrere Daten gleichzeitig verarbeitet.

Abbildung 2: Die Datenvektoren von MMX, SSE und SSE2 arbeiten mit verschiedenen Datentypen. Links sind Anzahl, Größe und Typ der Elemente angegeben, rechts der Klassenname des Vektors innerhalb Intels Klassenbibliothek.

Abbildung 2: Die Datenvektoren von MMX, SSE und SSE2 arbeiten mit verschiedenen Datentypen. Links sind Anzahl, Größe und Typ der Elemente angegeben, rechts der Klassenname des Vektors innerhalb Intels Klassenbibliothek.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook