WebAssemblyがSIMDをサポート、「WebAssembly SIMD」がChromeやFirefoxで標準実装。画像処理や物理演算など高速実行
ChromeなどのWebブラウザに搭載されているJavaScriptエンジン「V8」の開発チームは、WebAssemblyでSIMD命令をサポートする「WebAssembly SIMD」を来月、2021年5月にリリース予定のChrome 91からデフォルトで利用可能にすることを明らかにしました。
Firefoxでもx86版、x86-46版においてはすでにフラグを設定することでWebAssembly SIMDが利用可能になっており、Node.jsでもフラグの設定で利用可能になっています。
これによりWebAssemblyで画像処理などが高速に実行できるようになることが期待されます。
WebAssembly SIMD will be shipped by default in Chrome 91.
— V8 (@v8js) April 19, 2021
We have updated our SIMD feature explainer and added new instructions for feature detection, cross-compilation of code targeted for SSE/AVX/NEON to Wasm, and usage from Rust. https://t.co/tVCsK2a8p8
WebAssemblyとは、Webブラウザなどに実装された仮想マシン上で、ネイティブコードとほぼ同様の実行速度を実現するバイナリフォーマットです。すでに主要なWebブラウザやNode.jsなどに搭載されているJavaScriptエンジンはWebAssemblyに対応しています。
またWasmerやWasmtime、Lucetといった、Webブラウザなどから独立したWebAssemblyランタイムなども登場しています。
- WebAssemblyが50マイクロ秒以下で起動する「Lucet」。コンパイラとランタイムをFastlyがオープンソースで公開
- WebAssemblyをWin/Mac/Linuxで実行可能なランタイム「Wasmer 1.0」正式リリース。事前コンパイルによる高速起動やクロスコンパイルなどにも対応
固定長128ビットのSIMD命令に絞ってWebAssembly SIMDとして標準化
今回、WebAssemblyから利用可能になるSIMD(Single Instruction, Multiple Data)とは、一般に1つの命令で同時に複数のデータを処理できるプロセッサの命令、もしくはその処理のことを指します。
これを活用することで、単純な演算を大量に繰り返すような画像処理や機械学習、物理演算などの処理が高速になるのです。
WebAssembly SIMDは、WebAssemblyからSIMD命令を呼び出すための標準仕様とその実装です。
WebAssemblyはW3Cを中心に標準仕様の策定が進められており、WebAssembly W3C Processで設定されているプロセスには「1. Feature Proposal」「2. Proposed Spec Text Available」「3. Implementation Phase」「4. Standardize the Feature」「5. The Feature is Standardized」の5段階があります。
WebAssembly SIMDは現在、第四段階にあると説明されています。
ただし、WebAssembly SIMDはあらゆるプロセッサのさまざまなSIMD命令に対応するわけにもいかないため、次のようにある程度絞られた仕様での策定が進んでいます。「Fast, parallel applications with WebAssembly SIMD」から引用します。
The set of SIMD instructions is large, and varied across architectures. The set of operations included in the WebAssembly SIMD proposal consist of operations that are well supported on a wide variety of platforms, and are proven to be performant. To this end, the current proposal is limited to standardizing Fixed-Width 128-bit SIMD operations.
SIMD命令群は数多くあり、アーキテクチャによっても異なります。WebAssembly SIMDのプロポーザルに含まれている演算は、幅広いプラットフォームでサポートされ、高性能であることが明確であるもので構成されています。そこで今回のプロポーザルでは固定長128ビットのSIMD演算を標準化することに限定されています。
WebAssemblyのSIMD対応によって画像処理などが高速に
WebAssembly SIMDは5月リリースのChrome 91からデフォルトで利用可能になる予定ですが、Chrome 84から90までのバージョンでも「Origin Trials」として利用可能になります。
Origin Trialsとは、あらかじめその機能を使うことを登録した開発者にのみ、機能を解放する仕組みです。一定期間が過ぎると自動的にその機能は使えなくなります。
かつてWebブラウザなどでの試験的な機能の実装はベンダプレフィクスを用いることで利用可能にしていました。しかしその機能がやがて標準となり正式版として実装されても、ベンダプレフィックスによるベンダ依存の表記がいつまでもWebアプリケーションなどに残り続けてしまうという負の側面がベンダプレフィクスにはありました。 Origin Trialsはこれを反省し、利用に期限を設けることで実験的機能に依存した表記や実装がいつまでも残り続けないようにしたものです。
下記は、そのOrigin Trialsを利用してWebAssembly SIMDを活用したデモ動画です。画像処理ライブラリのOpenCVをWebAssembly SIMD対応としてコンパイルし、実行。クレジットカードの券面を高速に読み取っています。
今後、Webブラウザを含むさまざまなエッジにおいて画像処理や機械学習処理などが行われることになるとみられます。WebAssembly SIMDの登場は、こうした処理を快適にしてくれることでしょう。
あわせて読みたい
インフラ構成ツールの「Pulumi 3.0」正式リリース。APIでPulumiを呼び出し可能、クラウドのアップデートに即時対応など
≪前の記事
JAMスタックを実現する国産サービス「Kuroco」正式リリース。GitHub Actionsでビルドし、Webホスティング、APIサーバなど提供。月額1100円分まで無料