Go言語が実行時のプロファイラ情報でコンパイルを最適化する「Profile-guided optimization」パブリックプレビュー
Go言語の開発チームは2月1日にリリースしたGo 1.20で、実行時のプロファイラ情報を用いてコンパイルを最適化し、実行速度の改善を図る「Profile-guided optimization」機能のパブリックプレビューを開始しましたことを明らかにしました。
Profile-guided optimizationを用いることで、現時点で2%から4%程度の性能向上が得られ、将来的にはさらに大きな性能向上を実現できるとしています。
Go 1.20 marks the launch of profile-guided optimization into public preview!
— Go (@golang) February 8, 2023
PGO is a compiler optimization technique that feeds information gathered at runtime back into the compiler for the next build of the application.
Details ⬇ https://t.co/aBJgDIAbqy
Profile-guided optimization(PGO)とは
Profile-guided optimizationとは、プログラムの実行時にどの関数が何回コールされたか、プロセッサやメモリをどのように使用しているかなど、プログラムの実行状況をプロファイル情報として取得し、その情報を基にコンパイルを最適化する手法です。Feedback Directed Optimizationなどとも呼ばれます。
具体的には、何度も呼ばれる関数をインライン展開することで関数呼び出しのオーバーヘッドをなくす、変数の使用頻度によってレジスタへの割り当てを変更する、ループを展開する、などの処理がコンパイル時に行われます。
コンパイルの最適化手法としては以前から存在しており、例えばRustにはすでにProfile-guided optimization機能がありますし、GoogleはChromeブラウザをProfile-guided optimizationによって15%程度高速化したことを2016年に明らかにしています。
Goランタイムのプロファイルをコンパイラに渡す
今回プレビューリリースされたGoのProfile-guided optimization機能も、Goランタイムで生成されたプロファイルをGoコンパイラに渡すことで、コンパイル時にプロファイル情報を基にした最適化が行われます。
ドキュメントによると、現時点で2%から4%程度の性能向上が得られ、将来的にはさらに大きな性能向上を実現できるとしていますが、まだプレビューリリースのため本番環境での利用には向かないともしています。
あわせて読みたい
グローバルのクラウドインフラ市場、市場の成長率が鈍化する中でAWSがシェア30%超を維持、AzureとGoogle Cloudは堅調。2022年第4四半期、Synergy ResearchとCanalysの調査結果
≪前の記事
「CustomGPT.ai」でPublickeyのコンテンツを学習させたチャットBotを作ってみた。サイト検索の代わりになるか? 回答の精度と3つの大きな課題