Google、Google Sheetsの計算エンジンをWebAssemblyに最適化し、2倍の性能を実現したと発表

今回は「Google、Google Sheetsの計算エンジンをWebAssemblyに最適化し、2倍の性能を実現したと発表」についてご紹介します。

関連ワード (動的、移植、高速等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。


GoogleはWebブラウザ上でスプレッドシート機能を提供する「Google Sheets」の計算エンジンの性能をWebAssembyで実装し、従来のJavaScriptによる実装と比較して性能を2倍に向上させたことを明らかにしました。

これにより単純なSUM計算から複雑なクエリまで、シート上でのあらゆる計算を始め、ピボットテーブルの作成、条件付きフォーマットなどさまざまな処理が高速になるとのことです。

Google SpreadSheetsの計算エンジンをWebAssemblyに最適化

この性能向上は、JavaScriptで構築されていた計算エンジンをWebAssemblyに最適化したことで実現していると説明されており、そのためにWebAssemby GC(ガベージコレクション)機能を用いたとのことです。

そのため現時点ではChromeとMicrosoft Edgeで利用可能で、今後FirefoxやSafariでも利用可能になることを期待しているとしています。

そしてGoogleがいかにして計算エンジンをJavaScriptからWebAssemblyへ移植し、最適化したかについては別の記事「Why Google Sheets ported its calculation worker from JavaScript to WasmGC」(Translation APIによる日本語版)で紹介されています。

ここではGoogleが行ったWebAssemblyへの最適化の工程を、上記の記事を基にまとめてみてみましょう。

最初はサーバで実行されていたJava製の計算エンジン

2006年にGoogle Sheetsを初めてリリースしたときには、すべての計算はJavaで書かれた計算エンジンを用いてサーバ上で行われていました。

計算エンジンがJavaScript化されてWebブラウザ上で実行されるようになったのは2013年。その際、計算エンジンの作成にはJavaコードからJavaScriptコードを生成するGoogle Web Toolkit(GWT)が用いられ、その後にJava to Closure JavaScript Transpiler(J2CL)が用いられるようになります。

しかしJavaScriptが動的な型付け言語であることを主な理由として、JITなどにより改善されつつもJavaScriptの実行速度は十分高速ではない、というのがGoogleの評価でした。

その解決策としてガベージコレクション機能(WebAssembly GC)を備えたWebAssemblyが採用されることになりました。

WebAssembly GCが登場、Javaからの移植が可能に

Googleの説明の中には出てきませんが、GoogleがこのタイミングでWebAssemblyを採用したのは、Javaコードを基にWebAssembly化するには、WebAssemblyにガベージコレクション機能が欠かせなかったからです。

Javaの実行基盤となるJavaVMは、プログラムが動的に確保して利用したメモリ領域のうち、使わなくなったメモリ領域を自動的に解放してくれる「ガベージコレクション」機能を備えています。

Javaコードを基にGoogle Sheetsの計算エンジンをWebAssembly化するには(ガベージコレクション機能も含めてWebAssemblyで実装することは技術的に不可能ではないものの手間を考えると現実的ではないため)、WebAssembly自体がガベージコレクション機能を搭載することが求められたのです。

このWebAssembly GCは、2023年末にChromeの正式な機能として取り入れられました。

参考:WebAssemblyのガベージコレクションが正式機能に、最新版のChrome 119で。Firefoxも今月リリースのFirefox 120で正式機能になる見通し

今年(2024年)5月には、WebAssmbly GCを用いたFlutter/DartのWebAssemblyへのコンパイル機能が安定版になるなど、実績も増えてきたことで安心して使えるようになってきたところです。

参考:Flutter/DartのWebAssemblyコンパイル機能が安定版に。より高速でスムーズなユーザー体験などを実現

3つの最適化を実行

Google WorkspaceチームとChromeチームは協力して計算エンジンのWebAssembly化に取り組みます。2021年半ばにはJavaからWebAssembly GC版WebAssemblyへのコンパイラを動作させる準備が整い、その年末にはWebAssembly版計算エンジンを搭載したGoogle Sheetsのプロトタイプ版が完成します。

2022年に入り、このプロトタイプを基に性能テストを行ったところ、JavaScript版計算エンジン搭載のGoogle Sheetsより2倍ほど遅くなっていました。つまり、単純にWebAssembly版にしたところ、遅くなってしまったわけです。

ここから、主に以下の3種類の最適化を行ったとGoogleは説明しています。

  • JavaVMとJavaScriptエンジンのV8で用いられていた最適化を取り入れる
  • WebAssemblyによる実装のうち、ブラウザAPIで呼び出せる機能はAPIを呼び出す
  • JavaScriptに最適化されていた実装を修正する

1つ目の最適化については「virtual method dispatching」「speculative inlining」「devirtualization」などが行われ、2つ目の最適化についてはJavaで実装されていた正規表現ライブラリ(re2j)をWebブラウザに内蔵されている正規表現のAPIを呼び出して処理することで100倍高速になり、さらに3つ目として過剰にJavaScriptに最適化されたコードを修正したことが説明されました。

これによってWebAssembly版計算エンジンを搭載したGoogle Sheetsの計算速度が、JavaScript版計算エンジン搭載よりも約2倍高速になったとのことです。

マルチスレッドサポートでさらに高性能を期待

Googleは、今後WebAssemblyがガベージコレクション機能に加えて共有メモリマルチスレッドをサポートすることでシングルスレッド性能をさらに向上させることを期待しているとし、すべてのWeb開発者が、高性能を追求する開発プロジェクトにおいて、ガベージコレクションをサポートしたWebAssemblyの使用を検討することを勧めるとしています。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
「Apple Intelligence」登場–OSに統合されたアップル製AIの多様な機能
IT関連
2024-06-15 04:50
ユーザー体験を管理する文化の醸成へ–クアルトリクスが語る、日本市場での現在地点
IT関連
2022-07-12 16:57
マイクロソフト、サイバーセキュリティ人材の需要増で女性らのスキルアップを支援
IT関連
2023-05-04 07:26
ニューヨーク州ITサービス局のコードリポジトリがインターネット上に公開されていた
セキュリティ
2021-06-26 09:47
テラスカイが打ち出した「経営幹部候補の募集・育成プロジェクト」の背景
IT関連
2021-06-25 15:20
「データセンターからデジタルコンプレックスへ」–IIJがカーボンニュートラルの取り組み語る
IT関連
2022-07-30 17:26
2022年には5nmプロセスへ–日本AMDが戦略説明
IT関連
2021-06-28 21:04
増加するQRコードを悪用したフィッシング–難読化や検知回避の手法も
IT関連
2024-01-10 00:06
Blink Chargingが米国とカナダのGMのディーラーにEV充電器を供給へ
IT関連
2022-01-20 19:56
マイクロソフト、「Office LTSC」「Office 2021」のリリース予定など明らかに
IT関連
2021-02-19 10:56
「Windows」の更新管理を自動化、「Windows Autopatch」とは–今知っておきたいこと
IT関連
2022-04-13 00:14
「Chrome 90」の安定版公開 HTTPS接続強化や低帯域幅での動画改善など
アプリ・Web
2021-04-16 10:53
不正経費自動検知クラウドStena Expense、飲食店の相場価格から会議費・交際費の異常利用を検知するAI機能を追加
IT関連
2022-03-17 02:09
グーグル、「ゼロデイ攻撃」の分析結果と6つの推奨策を提示
IT関連
2024-04-17 04:30