Go 1.21リリース、WASI(WebAssembly System Interface)サポート、実行時プロファイルでコンパイル最適化

今回は「Go 1.21リリース、WASI(WebAssembly System Interface)サポート、実行時プロファイルでコンパイル最適化」についてご紹介します。

関連ワード (実行速度、情報、抽象化等) についても参考にしながら、ぜひ本記事について議論していってくださいね。

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


Googleが中心となってオープンソースで開発されているGo言語の最新バージョン「Go 1.21」が先々月(2023年8月)リリースされました。

Go 1.21では、WebAssemblyをクロスプラットフォーム対応にするWebAssembly System Interface(WASI)が実験的にサポートされました。

また、実行時のプロファイル情報を基にコンパイルを最適化する「Profile-guided optimization」が正式機能となりました。

Go 1.21.0 is released!

Release notes: https://t.co/8yX6FMmTOq

Download: https://t.co/AHKMZi9hp1#golang pic.twitter.com/Xe810nFngP

— Go (@golang) August 8, 2023

WebAssembly System Interface(WASI)をサポート

Go言語は、WindowsやmacOS、Linux、FreeBSD、iOS、Androidなど、さまざまなOSやCPUに対応したバイナリを生成できる機能を備えており、2018年4月にはこれらに加えてWebAssemblyのサポートも開始しました。

参考:Go 1.11がリリース。WebAssembly対応を実装、モジュール機能も追加

しかしWebAssemblyでアプリケーションを作る場合、ほぼ必ずファイルシステムAPIなどOSへのアクセスなどが発生します。

アプリケーションからOSを呼び出すAPIはOSに依存するため、OSを呼び出すWebAssemblyアプリケーションは基本的にそのOSでしか動かないOS依存のアプリケーションになってしまいます。

そこで登場したのが、WebAssemblyのアプリケーションに対してOSのシステムコールを抽象化することでOS依存をなくし、ポータブルなWebAssemblyアプリケーションを実現する業界標準仕様のAPI「WebAssembly System Interface」(WASI)です。

WASI対応のWebAssemblyアプリケーションをWASI対応のWebAssemblyランタイム上で実行すれば、そのWebAssemlbyアプリケーションはOSにすることなく、WebブラウザでもWindowsやMacなどのデスクトップでも、Linuxなどのサーバサイドやエッジでも動くポータブルなもの(WebAssemblyバイナリ)となります。

すでにほとんどのスタンドアロンなWebAssemblyランタイムはWASIに対応しており、事実上の標準となっています。

Go言語のWASI対応で、特定のOSに依存しないポータブルな実装のWebAssemblyアプリケーション開発の実現が期待されます。

実際の実行時プロファイルを基にコンパイルを最適化

Go 1.21では、実行時のプロファイラ情報を用いてコンパイルを最適化し、実行速度の改善を図る「Profile-guided optimization」機能が正式版となりました。

参考:Go言語が実行時のプロファイラ情報でコンパイルを最適化する「Profile-guided optimization」パブリックプレビュー

Profile-guided optimizationとは、プログラムの実行時にどの関数が何回コールされたか、プロセッサやメモリをどのように使用しているかなど、実際のプログラムの実行状況をプロファイル情報として取得し、その情報を基にコンパイルを最適化する手法です。Feedback Directed Optimizationなどとも呼ばれます。

具体的には、何度も呼ばれる関数をインライン展開することで関数呼び出しのオーバーヘッドをなくす、変数の使用頻度によってレジスタへの割り当てを変更する、ループを展開する、などの処理がコンパイル時に行われます。

コンパイルの最適化手法としては以前から存在しており、例えばRustにはすでにProfile-guided optimization機能がありますし、GoogleはChromeブラウザをProfile-guided optimizationによって15%程度高速化したことを2016年に明らかにしています。

Go 1.21のProfile-guided optimizationでは、典型的なアプリケーションでのCPU使用率が2%から7%程度改善すると説明されています。

COMMENTS


Recommended

TITLE
CATEGORY
DATE
コストパフォーマンス重視のサイバー犯罪が目立った2022年–セキュアワークスが報告
IT関連
2023-01-21 08:21
クスリのアオキ、会計・人事給与システムを刷新–クラウド型で決算早期化を実現
IT関連
2024-02-02 09:12
Disney+がNetflixのMarvelシリーズを米国などで配信開始、日本では2022年後半の予定
IT関連
2022-03-03 18:25
レッドハット、非営利のオープンソース組織やプロジェクト向けに無償の「RHEL」プログラム
IT関連
2021-03-02 15:01
「インフレ関連株」に注目–原油・銅・ニッケル・鉄鉱石・穀物・天然ゴム・海運市況上昇
IT関連
2021-02-25 02:22
ベネッセ、AIチャットサービス「Benesse GPT」を開発–より良い商品開発に向けて
IT関連
2023-04-16 11:27
東北大と富士通が戦略提携–デジタルツイン活用で地域住民の健康増進
IT関連
2022-09-29 18:11
ベゾスCEO最後の株主年次書簡で「プライム会員2億人超」「従業員をロボット扱いなどしていない」
企業・業界動向
2021-04-17 05:23
退職を考えているエンジニアが最初に検討すべき3つのこと
IT関連
2022-08-03 06:54
実寸大、煉獄杏寿郎の「日輪刀」をバンダイが発売 セリフや効果音収録 劇中の「うまい!」を全て収録した「うまいモード」も
くらテク
2021-01-16 12:29
環境再生型農業のトレンドを食肉市場に取り込む99 Counties
IT関連
2022-02-24 00:23
トレンドマイクロ、AI×セキュリティ戦略を発表–大三川副社長に聞く基盤展開
IT関連
2024-07-25 20:15
Twitter、フォローボタンの色を変更も「見づらい」と不評 白いボタンの意味が真逆に
イラスト・デザイン
2021-08-13 00:07
飲食店向けテイクアウトの予約・決済サービス「TakeEats」運営のランプが約1億円調達
ネットサービス
2021-02-02 05:01