Begriff
SIMD in Wasm (Fixed-Width SIMD)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
WebAssembly soll "Native Performance" bringen.
Native CPUs nutzen SIMD (Single Instruction, Multiple Data), um Bilder, Video und Krypto schnell zu rechnen.
Ohne SIMD ist Wasm im Vergleich zu C++ (mit AVX) oft 4-10x langsamer bei Mathe-Aufgaben.
Wasm SIMD bringt einen v128 Datentyp (128 Bit Vektor) in den Standard.
Damit kann Wasm 4 float Zahlen gleichzeitig addieren.
Das mappt direkt auf SSE/AVX (Intel) oder NEON (ARM).
Anwendungen: Google Earth Web, TensorFlow.js, Photoshop Web.
Merksatz: Eine Erweiterung von WebAssembly, die Vektoroperationen (128-bit) einführt, um datenparallele Aufgaben (wie Bildverarbeitung oder KI-Inferenz) massiv zu beschleunigen.
- Emscripten / Rust: Aktiviere
-msimd128beim Kompilieren. - Auto-Vectorization: LLVM versucht oft, deine Loops automatisch in Wasm-SIMD zu wandeln.
- Halide: Eine Sprache für Bildverarbeitung, die extrem effizienten Wasm-SIMD Code generiert.
1. Fixed Width (128 Bit)
Warum nur 128 Bit? (AVX-512 ist doch geiler?) Weil Wasm portabel sein muss. 128 Bit werden von allen modernen CPUs unterstützt (selbst Handys). AVX-512 gibt es nur auf Highend-Intel. Es gibt einen Vorschlag für "Relaxed SIMD" oder flexible Breite, aber 128 Bit ist der kleinste gemeinsame Nenner (Deterministic Execution).
2. Performance-Boost
Bei Matrix-Multiplikation (KI) bringt SIMD oft einen Faktor 3x-5x Speedup. Das macht den Unterschied zwischen "Ruckelt" und "Flüssig" bei ML im Browser.
1. WebAssembly v128 Architecture
Intern nutzt Wasm-SIMD die Hardware am Limit.
- Auf x86 mappt es auf SSE 4.2 oder AVX.
- Auf ARM mappt es auf NEON. Das Problem: Manche Hardware-Befehle existieren nur auf einer Plattform (z.B. spezielle Dot-Product Befehle). Der Wasm-Standard ist hier konservativ und wählt nur Befehle, die auf allen Plattformen performant emuliert werden können. Wenn eine CPU keinen 128-Bit Support hat (selten), muss der Browser den Code in skalare Befehle zerlegen (De-Vectorization), was die Performance wieder einbrechen lässt.
2. Swizzling & Shuffling
Eines der mächtigsten Werkzeuge in Wasm-SIMD ist der i8x16.shuffle Befehl.
Man kann damit die Positionen der 16 Bytes innerhalb des Vektors in einem einzigen Takt-Zyklus wild vertauschen.
In der Produktion (z.B. bei der Transkodierung von Text von UTF-8 nach UTF-16) spart das hunderte if-Abfragen. Man baut eine "Maske" und schiebt alle Daten gleichzeitig an die richtige Stelle. Google nutzt das massiv in der Hanabi-Engine (für Google Earth), um Geodaten on-the-fly im Browser zu entpacken.
3. Memory Alignment & Tail Loops
SIMD liebt Ordnung. Wenn du Daten aus dem Speicher lädst, sollten sie an 16-Byte-Grenzen ausgerichtet (aligned) sein. Un-aligned Loads sind oft langsamer. Zudem gibt es das Tail-Problem: Wenn du ein Array von 103 Elementen addieren willst, passen 100 in 25 SIMD-Vektoren (4er Gruppen). Was passiert mit den restlichen 3? Experten nutzen Tail Loops (die letzten 3 werden klassisch berechnet) oder Masking (man lädt 4, rechnet aber nur 3). Wasm-SIMD bietet hier (noch) keine Hardware-Maskierung wie AVX-512, daher ist sauberer Source-Code (z.B. in C++ oder Rust) entscheidend für die Effizienz.
Quick-Check
Browser-Support?
Überall da (Safari, Chrome, Firefox, Edge).WebGPU?
WebGPU ist für massive Parallelität (Tausende Threads). SIMD ist für lokale Parallelität auf der CPU. Für kleine Modelle oder Vorverarbeitung ist SIMD oft besser/einfacher als der Roundtrip zur GPU.Krypto?
AES-Verschlüsselung profitiert enorm von SIMD. Zoom nutzt Wasm SIMD für die E2E-Verschlüsselung im Web-Client.