Этот вопрос не относится к C ++, AFAIK определенные среды выполнения, такие как Java RE, могут выполнять профилированную оптимизацию на лету, меня это тоже интересует.
MSDN описывает PGO следующим образом:
Теперь очевидно, что результат профилирования будет зависеть от используемого набора данных.
При обычном ручном профилировании и оптимизации я бы нашел некоторые узкие места и исправил эти узкие места и, вероятно, оставил бы весь другой код нетронутым. PGO, кажется, улучшает часто запускаемый код за счет замедления редко запускаемого кода.
А что, если этот замедленный код часто запускается на другом наборе данных, который программа увидит в реальном мире? Ухудшится ли производительность программы по сравнению с программой, скомпилированной без PGO, и насколько серьезной будет эта деградация? Другими словами, действительно ли PGO улучшает производительность моего кода для набора данных профилирования и, возможно, ухудшает его для других наборов данных? Есть ли реальные примеры с реальными данными?