Vector Parallelism in JavaScript: Language and compiler support for SIMD

  • Ivan Jibaja ,
  • Peter Jensen ,
  • Ningxin Hu ,
  • Mohammad R. Haghighat ,
  • John McCutchan ,
  • Dan Gohman ,
  • Stephen M. Blackburn ,
  • Kathryn S McKinley

ACM/IEEE International Confverence on Parallel Architectures and Compilation Techniques (PACT) |

Published by ACM - Association for Computing Machinery

Publication | Publication

JavaScript is the most widely used web programming language and it increasingly implements sophisticated and demanding applications such as graphics, games, video, and cryptography. The performance and energy usage of these applications benefit from hardware parallelism, including SIMD (Single Instruction, Multiple Data) vector parallel instructions. JavaScript’s current support for parallelism is limited and does not directly exploit SIMD capabilities. This paper presents the design and implementation of SIMD language extensions and compiler support that together add fine-grain vector parallelism to JavaScript. The specification for this language extension is in final stages of adoption by the JavaScript standardization committee and our compiler support is available in two open-source production browsers. The design principles seek portability, SIMD performance portability on various SIMD architectures, and compiler simplicity to ease adoption. The design does not require automatic vectorization compiler technology, but does not preclude it either. The SIMD extensions define immutable fixed-length SIMD data types and operations that are common to both ARM and x86 ISAs. The contributions of this work include type speculation and optimizations that generate minimal numbers of SIMD native instructions from high-level JavaScript SIMD instructions. We implement type speculation, optimizations, and code generation in two open-source JavaScript VMs and measure performance improvements between a factor of 1.7 to 8.9 with an average of 3.3 and average energy improvements of 2.9 on micro benchmarks and key graphics kernels on various hardware, browsers, and operating systems. These portable SIMD language extensions significantly improve computeintensive interactive applications in the browser, such as games and media processing, by exploiting vector parallelism without relying on automatic vectorizing compiler technology, nonportable native code, or plugins.