KLING / LABS33 / WEBASSEMBLYJämför motorer ↓

Living Code

Utforska matematiken på processorn.
Byt motor. Mät skillnaden. Se resultatet.

Ett minne. Fyra fält.

Motorerna arbetar i sammanhängande fält. Nästa tillstånd skrivs separat, så att en cell aldrig läser ett redan uppdaterat grannvärde. Fraktalen använder bara det första fältet.

Vad är WebAssembly?

Ett kompakt binärt instruktionsformat. Här kompileras AssemblyScript till riktiga .wasm-moduler. JavaScript sköter gränssnittet, medan Wasm kan ta över de intensiva numeriska looparna.

Modulerna laddas när labben startar. Andra språk, till exempel C, C++ och Rust, kan också kompileras till Wasm.

Flera tal i samma instruktion

SIMD-kärnorna packar två 64-bitars värden i 128 bitar. De behandlar två grannceller åt gången. Det betyder inte dubbla hastigheten: minnesåtkomst, kanter och andra instruktioner spelar också roll.

Labben använder en Web Worker för att hålla gränssnittet responsivt. Den använder inte Wasm-trådar eller SharedArrayBuffer.

CPU räknar. Bildytan visar.

WebAssembly är inte en ersättare för WebGPU. Här kommer alla fältvärden från CPU:n. WebGL2 färglägger och ljussätter resultatet. Om WebGL2 saknas används en enklare 2D-visning.

Typiska användningar för Wasm är bild- och ljudbehandling, komprimering, spelmotorer och numeriska beräkningar. Den här labben demonstrerar beräkning, linjärt minne och SIMD.

Modellerna och deras begränsningar +

Gray–Scott

∂A∂t=DA∇2A−AB2+F(1−A)∂B∂t=DB∇2B+AB2−(F+k)B

Dₐ = 1, Dᵦ = 0,5, Δt = 1. Nio punkters Laplaceoperator: −1 i mitten, 0,2 på sidorna och 0,05 diagonalt. Högre upplösning ger en större modellvärld mätt i celler, inte en konvergensstudie av samma fysiska yta.

Mandelbrot

zn+1=zn2+c,z0=0

Färgen utgår från en utjämnad iterationstid. Flyktgränsen |z| = 16 ger stabilare färgband. Begränsat antal iterationer och flyttalsprecision innebär att finare detaljer inte alltid kan avgöras.

Dämpade vågor

ht+1=(2−d)ht−(1−d)ht−1+0,18∇2ht

Fem punkters diskret Laplaceoperator, periodiska kanter och två sinusdrivna källor. Tiden räknas i modellsteg och alla värden är dimensionslösa. Modellen beskriver inte brytande vågor eller realistisk hydrodynamik.