Go Conference

Room A

Intermediate

20 mins.

Goの公式コンパイラは様々な最適化を提供しており、その中で関数のインライン展開と脱仮想化が挙げられます。 関数のインライン展開は、関数呼び出しをその関数の本体で直接置き換え、関数呼び出しのオーバーヘッドを抑えます。 またGoの脱仮想化は、インターフェースを通じたメソッド呼び出しの実行時コストを削減するために、コンパイル時に具体的な実装を特定する最適化手法です。 この2つの最適化の適用範囲を広げられる最適化手法として、Go1.20でPGO(Profile-Guided Optimization)が追加されました。 本セッションでは、インライン展開、脱仮想化と、PGOがこの2つの最適化にどういった影響を及ぼすかについて解説します。

まず、Goコンパイラにおける関数のインライン展開と脱仮想化の基礎的な部分を説明します。 インライン展開では、どのような条件でインライン展開がおこなわれるのかについて掘り下げ、関連するコマンドラインオプションを紹介します。 脱仮想化の説明では、その仕組みを他の言語処理系と比較して解説し、Goコンパイラの設計思想に触れていきます。 次に、PGOによってインライン展開と脱仮想化の適用範囲が広がる仕組みを解説します。 最後に、弊社でのPGOを活用した実際のアプリケーションのパフォーマンス改善に向けた取り組みを共有します。

このセッションを通じて、参加者の方はGoにおける先進的な最適化技術の仕組みを理解し、自身のプロジェクトに応用するための知識を得ることができます。 PGOのプラクティカルな事例を共有することで、サービスのパフォーマンスを更に引き上げたい方に有益なセッションとなることを目指しています。

Satoru Kawahara

Satoru Kawahara

株式会社カンム

関数型プログラミングやコントロールオペレータ、型システム、言語処理系など。Go歴1年弱。