.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的运行时间最短。
🏷️

标签

➡️

继续阅读