Dev & Code 1 h agoZu Lesezeichen hinzufügen
Mitchell Hashimoto (Gründer von HashiCorp) unterzeichnet einen Essay, der eine einfache These aufstellt: Im Zeitalter breiter CPU-Architekturen, SIMD nicht zu kennen, bedeutet, 4× bis 16× an Leistung liegen zu lassen.
Mitchell Hashimoto - Mitbegründer von HashiCorp, der zu einem produktiven Einzelbeitragenden wurde (er arbeitet heute an Ghostty, seinem Terminalemulator in Zig) - veröffentlicht einen langen Beitrag mit dem einfachen Titel Everyone Should Know SIMD. Die These lässt sich in einem Satz zusammenfassen: In einer Welt, in der die CPU-Frequenzen stagnieren, aber die Vektorregister breiter werden, bedeutet das Ignorieren von SIMD, Größenordnungen an Leistung ungenutzt zu lassen.
SIMD (Single Instruction, Multiple Data) bezeichnet die CPU-Befehle, die dieselbe Operation auf mehrere Werte gleichzeitig anwenden - acht float in einem Zyklus addieren, sechzehn Bytes auf einmal vergleichen. Auf modernen x86-64-CPUs sind dies die Befehlssätze SSE / AVX / AVX2 / AVX-512. Auf ARM (Apple Silicon, Neoverse-Server) ist es NEON und SVE.
Die Diskussion ist nicht neu - SIMD existiert seit MMX (1996). Was sich geändert hat:
float32 oder 64 int8.Die zentrale Botschaft: SIMD ist nicht nur für Grafikmotor- oder Videocodec-Entwickler reserviert. Jede Massenverarbeitung von Daten - JSON-Parser, Volltext-Suchmaschinen, Zeichenkettenvergleiche, statistische Berechnungen, Bildfilter, Hashing - profitiert massiv von der Vektorisierung.
Einige konkrete Beispiele:
std::sort um den Faktor 3-5 auf Integer-Arrays zu schlagen.Mit anderen Worten: Es ist keine Nische mehr, es ist eine Grundkompetenz für alles, was mit Volumenleistung zu tun hat.
SIMD von Hand ist berüchtigt für seine Unannehmlichkeiten: unlesbare Intrinsics, fragile Portabilität zwischen x86 und ARM. Drei heute gangbare Ansätze:
core::simd in Rust nightly, @Vector builtin in Zig).Für einen "Standard"-Anwendungsentwickler ist der Einstieg über eine portable Bibliothek (Highway, std::simd, @Vector) der beste Weg, um nicht in die Low-Level-Intrinsics eintauchen zu müssen, während man dennoch den Großteil des Gewinns erzielt.
Hashimoto hat recht: Die Generation von Entwicklern, die auf verwalteten Laufzeiten (JavaScript, Python, Go) ausgebildet wurde, ignoriert oft, dass die CPU seit zehn Jahren über Rechenmittel verfügt, die nie von ihrem Code genutzt werden. Das ist keine Anschuldigung - es ist eine Feststellung. Und der Return on Investment, wenn man diese Mittel endlich mit einem kritischen Pfad verbindet, ist spektakulär.
Zu beachten
std::simd, Zig @Vector) machen den Einstieg erschwinglich.Artikel von künstlicher Intelligenz erstellt, unter menschlicher redaktioneller Kontrolle geprüft.