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
Spotify、AI採用Podcast発見ツールのPodzを買収
アプリ・Web
2021-06-20 00:03
「Raspberry Pi Pico」が登場、価格は4ドル
IT関連
2021-01-22 19:48
「Bing」のAIチャット機能、利用制限がさらに緩和へ–1回20ターンに
IT関連
2023-03-31 19:42
ERPのクラウド化は難しい、という時代の終焉。3年後の国内ERP市場はクラウドが9割以上、オンプレミスが1割以下へ、ITRが予想
ERP
2021-04-15 03:14
アカマイ、「世界で最も分散されたクラウド」としてエッジコンピューティングに注力
IT関連
2022-03-03 17:05
DNPコアライズとxID、藤沢市の通知業務の効率化に向け実証開始
IT関連
2024-07-07 04:17
GoogleのFeedBurnerがインフラを移行、メール購読サービスを廃止
ネットサービス
2021-04-16 11:27
TwitterはGoogle Cloudとの提携を拡大、データから多くを学び迅速な動きを目指す
ネットサービス
2021-02-07 15:09
マルウェア「Emotet」の感染攻撃が再拡大の兆し–手法に変化も
IT関連
2022-11-06 10:12
ゲッティイメージズ、画像生成AIサービス「iStockの生成AI」発表–著作権侵害の心配なし
IT関連
2024-01-11 21:35
浦安市、「災害コールセンター」を2つの地域で運営–KDDIエボルバが支援
IT関連
2023-01-19 21:27
米国防総省、クラウド構築事業でAWSなど大手4社と契約–90億ドル規模
IT関連
2022-12-10 09:14
職業としてのセキュリティ–運用できないセキュリティ製品が売れた理由
IT関連
2023-02-22 01:11
20機の小型ロボット群をハンドジェスチャーで直感操作 スタンフォード大など開発 :Innovative Tech
トップニュース
2021-01-29 07:18