DagorEngine icon indicating copy to clipboard operation
DagorEngine copied to clipboard

Evaluate using Profile-Guided Optimization (PGO)

Open zamazan4ik opened this issue 10 months ago • 0 comments

Hi!

I am collecting all materials (benchmarks, articles, stories, showcases, etc.) about Profile-Guided Optimization (PGO) across different applications here. I am sure you will be able to find helpful information regarding PGO in different application domains.

Related to the gamedev domains, I suggest you look at the following things:

  • I did some benchmarks for Bevy with PGO. PGO-run (first) vs non-PGO (second) - Pastebin. In these results you need to interpret performance decrease as "Release version is slower than PGOed" and performance increase as "Release version is faster than PGOed". As you see, in many scenarios PGO improves performance, but in some of them performance is decreased.
  • Unreal Engine supports PGO build since 4.27 (release notes). According to the documentation, PGO allows to achieve better performance on UE too (+10% on some CPU-heavy scenarios from this page). Also, I've talked with developers in a local Telegram chat about UE. A person said that they use PGO as a default optimization with UE and their games. The PGO profiles are collected via crafted local test workloads (usually - the most difficult scenes) with Gauntlet. The performance improvement is something like 6-8%
  • Godot proposal about PGO - link
  • Unity Burst thread about PGO - link

According to the materials above, I think trying to optimize DagorEngine with PGO would be a good idea.

We need to check the PGO effects on DagorEngine, and if it works well - write a note in the DagorEngine documentation (at least in the README file, I guess?) about building with PGO. I'd appreciate your providing an easy way to build DagorEngine with PGO (e.g. via custom build options in the build scripts), and experienced users will be able to do it on their own for their own usage scenarios. Also, optimizing prebuilt binaries with PGO would be a nice thing to have (if it's possible to prepare a generic enough workload).

Seems like the main target platform is Windows so I can suggest starting looking at MSVC documentation about PGO.

zamazan4ik avatar Oct 26 '23 19:10 zamazan4ik