Intent to ship: WebAssembly SIMD

265 views
Skip to first unread message

Lars Hansen

unread,
Mar 2, 2021, 7:25:11 AMMar 2
to dev-platform
WebAssembly SIMD makes a large, common, and portable subset of the 128-bit
vector instructions in many CPUs available to WebAssembly programs. SIMD
helps speed up graphics, video/audio decoding/encoding, and machine
learning workloads, to mention some. It is one of the most-requested
features from those who develop C/C++ and Rust applications for the web.

As of FF89 we intend to turn WebAssembly SIMD on by default on x64 and x86.
Support on ARM64 will follow, likely in FF90.

Platform coverage: Support on x64 and x86 will be limited to systems with
SSE4.1 or better [*], currently about 92% of our Windows user population
and growing. All ARM64 systems will be supported. ARM32 support is not
planned [*]. As SIMD is new in WebAssembly, content must sniff for the
feature, and will be able to handle the lack of SIMD support on these
systems.

Preference: javascript.options.wasm_simd has been available on all channels
for some time and will remain available until the feature has shipped on
all targeted platforms.

Other browsers: Google will ship this in Chrome 91 (
https://www.chromestatus.com/feature/6533147810332672,
https://groups.google.com/a/chromium.org/g/blink-dev/c/Ks2iWmi32MM/m/nXTpmHjYAAAJ
).
Apple signals that they are positive, but have no timeline for
implementation in Safari (
https://lists.webkit.org/pipermail/webkit-dev/2021-February/031705.html).

Development bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1625130

Bug to turn on by default on x64/x86:
https://bugzilla.mozilla.org/show_bug.cgi?id=1695585

Bug to turn on by default on ARM64:
https://bugzilla.mozilla.org/show_bug.cgi?id=1695589

Standard (undergoing finalization): https://github.com/webassembly/simd

Devtools support: None at this time.

Web-platform tests: A comprehensive test suite outside WPT is being
developed as part of the spec work (see link above), as for other Wasm
features.

[*] SSE4.1 was introduced in 2004, and our SSE4.1 baseline corresponds to
that chosen by Chrome. If for any reason we must support more users, we
can choose to lower the baseline to SSSE3, to cover > 98% of Windows users.

The use of Firefox on ARM32 is dropping rapidly, most likely brought on by
the general availability of ARM64 systems, and will approach zero within a
couple of years.

We could support ARM32 and pre-SSE4.1 by translating SIMD code to scalar,
but it is not clear that this would yield better performance than the
non-SIMD fallback path of the application itself.
Reply all
Reply to author
Forward
0 new messages