.Net8 PGO的GDV是如何提升委托(delegate)性能的呢
💡
原文中文,约1900字,阅读约需5分钟。
📝
内容提要
本文介绍了.NET 7 PGD中的GDV(虚拟保护)对JIT进行优化的实际应用例子。通过一个if判断,是否调用优化的版本还是非优化的版本,可以让委托牺牲一个分支的判断,达到直接调用函数性能的效果。
🎯
关键要点
- 委托在性能上被认为是一个设计问题,.NET 7 PGD中的GDV对JIT进行了优化。
- GDV允许委托牺牲一个分支判断,直接调用函数以提高性能。
- 示例代码通过for循环调用Sum函数,重点在于委托func的使用。
- 未启用PGO时,调用func的机器码生成没有优化。
- 启用PGO后,第一层代码有明显优化,通过判断委托函数地址来决定调用优化版本还是非优化版本。
- 基准测试显示启用PGO后性能显著提升,.NET 8.0的运行时间最短。
➡️