Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Evaluate Profile-Guided Optimization (PGO) on Fyrox #498

Open
zamazan4ik opened this issue Aug 11, 2023 · 0 comments
Open

Evaluate Profile-Guided Optimization (PGO) on Fyrox #498

zamazan4ik opened this issue Aug 11, 2023 · 0 comments

Comments

@zamazan4ik
Copy link

Hi!

I am collecting all materials (benchmarks, articles, stories, showcases, etc.) about PGO across different applications here. I am sure there you would be able to find helpful information regarding PGO.

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

We need to check the PGO effects on Fyrox, and if it works well - write a note in the Fyrox documentation about PGO. I'd appreciate your providing an easy way to build Fyrox with PGO. And experienced users will be able to do it on their own for their own usage scenarios. Another option is to optimize Fyrox build with a generic-enough profile. Providing PGO-optimized binaries could be a trickier task (since it requires preparing a good-enough profile) but as an option would be great to see too.

As an additional optimization, I suggest looking at LLVM BOLT. But from my experience, starting with PGO and then using BOLT would be better.

For the Rust projects, I recommend starting with cargo-pgo - it supports LLVM BOLT too.

I understand that the project is still in the early development stages. So I think the issue is just an improvement idea for future developments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant