プロファイルガイド最適化（PGO）は、プロファイリング情報を使用してバイナリ実行可能ファイルのパフォーマンスを最適化するためにコンピューターソフトウェアエンジニアリングで使用される手法です。PGOの背後にある基本的なアイデアは、実行時にプログラムがどのように実行されるかに関する情報を収集し、この情報を使用してプログラムのバイナリコードを最適化することです。

PGOは、プログラムを数回実行することで機能し、各実行が最も頻繁に実行され、どのセクションが実行され、実行される頻度で実行されるかについての情報を収集します。この情報は、最適化プロセスをガイドするために使用されます。たとえば、コンパイラはこの情報を使用して、指示の数を減らしてキャッシュの使用を改善することにより、コードの頻繁に実行されるセクションをより最適化することができます。

PGOが機能する理由は、コンパイラがコードを最適化する方法について情報に基づいた決定を下すことができるためです。情報をプロファイリングしないと、コンパイラは、ヒューリスティックに基づいてコードの最適化と、プログラムの実行方法に関する一般的な仮定について決定する必要があります。しかし、これらの仮定は、特に複雑で大規模なアプリケーションでは、常に正確ではないとは限りません。PGOを使用すると、コンパイラは、プログラムが実際にどのように実行されているかについての実際の情報に基づいて最適化の決定を下すことができます。

PGOは、ビデオゲーム、科学シミュレーション、金融アプリケーションなど、パフォーマンスが批判的なアプリケーションのパフォーマンスを改善するのに特に役立ちます。PGOを使用することにより、開発者は最適化プロセスが完全に自動化されているため、比較的低い努力で大幅なパフォーマンスの改善を達成できます。
Profile-guided optimization (PGO) is a technique used in computer software engineering to optimize the performance of a binary executable by using profiling information. The basic idea behind PGO is to collect information about how a program is executed at runtime, and then use this information to optimize the program's binary code.

PGO works by executing the program several times, with each run collecting information about which sections of code are executed most frequently and which are executed less frequently. This information is then used to guide the optimization process. For example, the compiler can use this information to better optimize the frequently executed sections of code, by reducing the number of instructions and improving the cache usage.

The reason PGO works is that it allows the compiler to make informed decisions about how to optimize the code. Without profiling information, the compiler has to make decisions about code optimization based on heuristics and general assumptions about how programs run. But these assumptions may not always be accurate, especially for complex and large applications. With PGO, the compiler can make optimization decisions based on real-world information about how the program is actually being executed.

PGO is particularly useful for improving the performance of applications that are performance-critical, such as video games, scientific simulations, and financial applications. By using PGO, developers can achieve substantial performance improvements with relatively low effort, as the optimization process is fully automated.