---
title: 特性说明
description: "当前的PGO(Profile-Guided Optimization) profile不具备上下文敏感性：内联函数的分支概率对所有调用者(caller)均采用相同的值，而实际上这些概率在不同调用上下文中往往存在显著差异。此类次优的profile会严重影响多项下游优化的效果，尤其是机器级的基本块布局(basic block layout)和寄存器分配(register allocation)。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/hgcc/hist-hgcc/kunpenghgcc_06_0017.html
sourcePath: /source/zh/kunpengdevkithistory/hgcc/hist-hgcc/kunpenghgcc_06_0017.html
indexId: dc4457c4749f23599d25edd98ffbbfdb173638a862b7a76104e1211cc146e1c071
---
# 特性说明

当前的PGO(Profile-Guided Optimization) profile不具备上下文敏感性：内联函数的分支概率对所有调用者(caller)均采用相同的值，而实际上这些概率在不同调用上下文中往往存在显著差异。此类次优的profile会严重影响多项下游优化的效果，尤其是机器级的基本块布局(basic block layout)和寄存器分配(register allocation)。

为解决该问题，CSPGO(Context-Sensitive PGO)引入了一个在内联之后执行的post-inline profiling阶段，专门用于收集内联展开后的运行时profile，从而实现上下文敏感的反馈信息，即“上下文敏感 PGO”（Context-Sensitive PGO, CSPGO）。

因此，在完整的优化流程中会生成两份 profile 文件：

- 原始PGO profile用于指导早期优化，如函数内联、间接调用提升(indirect call promotion)等。
- CSPGO profile则用于内联完成后的后续优化，例如基本块重排和寄存器分配，以获得更精确的性能收益。
