Zum Hauptinhalt Zur Navigation

Golem Plus Artikel
Programmieren mit Intrinsics:
Code optimieren ohne Assembler

Mit Vektorbefehlen lässt sich oft noch viel Leistung aus bestehendem Code holen. Wir zeigen , wie das ohne Assembler-Programmierung funktioniert.
/ Johannes Hiltscher
3 Kommentare News folgen (öffnet im neuen Fenster)
Maschinennah programmieren geht auch ohne Assembler. (Bild: Johannes Hiltscher, Golem.de)
Maschinennah programmieren geht auch ohne Assembler. Bild: Johannes Hiltscher, Golem.de

Keine Frage: Compiler erzeugen meist besseren Code als Menschen, doch manchmal muss man ihnen auf die Sprünge helfen. Das gilt besonders für die Verwendung von Vektoranweisungen. Auch hier sind Compiler zwar deutlich besser geworden, übersehen aber oft mögliche Optimierungen. Dann hilft alles nichts und man muss selbst ran und passenden Code schreiben. Da Hochsprachen wie C und C++ aber keine Vektorbefehle mitbringen, bedeutet das, Assembler-Code zu schreiben und mit Registern zu jonglieren. Es geht aber auch einfacher: Mit Intrinsics lassen sich Vektorbefehle und andere plattformspezifische Anweisungen auch ohne Assembler verwenden. Wir zeigen, wie das funktioniert.

Intrinsics sind architekturabhängige Funktionen, die der jeweils passende Compiler mitbringt. Um sie zu verwenden, muss eine Header-Datei eingebunden werden, beim gcc etwa avx2intrin.h für AVX 2 oder arm_neon.h für Anweisungen aus ARMs Vektorerweiterung Neon. Die definiert neben den Intrinsics oft auch noch passende Datentypen, denn besonders Vektoreinheiten erfordern häufig eine besondere Struktur der Daten im Speicher. Variablen müssen etwa oft an 16- oder 64-Byte-Adressen liegen, auch hierum müssen sich Programmierer nicht weiter kümmern. Wir beschränken uns hier auf Vektorerweiterungen, darüber hinaus können durchaus noch weitere Intrinsics für andere plattformspezifische Befehle existieren.

Golem Plus Artikel