Googles V8-Javascriptmotor får parallelle data i Webassembly

Illustration: Bigstock/REDPIXEL.PL
Vektor-beregninger kan give bedre ydelse ved signalprocessering og machine learning.

Et forslag om at gøre parallelle instruktioner tilgængelige i Webassembly vil nu bliver implementeret i Googles V8-Javascriptmotor.

Det skriver udviklerbloggen Infoq.

Webassembly er en ny standard for bytekode og en tilhørende virtuel maskine, som kan afvikles lige godt i alle de fire store browsere. Udviklingsarbejdet blev igangsat i 2015 og byggede videre på ideerne i Asm.js.

Læs også: Webassembly kan blive webbets næste revolution og sætte Javascript på porten

I det nye forslag skal parallelisme udnyttes via SIMD-instruktioner i chips som CPU og GPU'er. SIMD står for 'single instruction, multiple data' og udfører samme operationer på flere data, altså vektor-beregninger, på godt dansk.

SIMD-operationer understøttes af de fleste moderne CPU-arkitekturer, skiver Infoq, men er implementeret på forskellige måder.

Derfor sigter det nuværende Webassembly-SIMD-forslag at definere et reduceret sæt af operationer, der kan understøttes bredt på nuværende hardware.

Teknikken kan give ydelsesforbedringer i forbindelse med lyd- og video-behandling, machinelearning og andre omårder.

Således ganges elementerne i to arrays, i C, der kan transpiles til Webassembly-bytecode:

#include <wasm_simd128.h>
 
void multiply_arrays(int* out, int* in_a, int* in_b, int size) {
  for (int i = 0; i < size; i += 4) {
    v128_t a = wasm_v128_load(&in_a[i]);
    v128_t b = wasm_v128_load(&in_b[i]);
    v128_t prod = wasm_i32x4_mul(a, b);
    wasm_v128_store(&out[i], prod);
  }
}

Men optimeringer via LLVM-compileren gør, at almindelige løkke-udtryk automatisk kan oversættes til SIMD-instruktioner, som herunder:

void multiply_arrays(int* out, int* in_a, int* in_b, int size) {
  for (int i = 0; i < size; i++) {
    out[i] = in_a[i] * in_b[i];
  }
}

Faciliteten er tilgængelig i Chromes beta-kanal Canary og kan aktiveres med flaget --enable-features = WebAssembleSimd. SIMD-instruktionerne findes også i sproget Dart.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (1)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere