В информатике прогнозирование производительности означает оценку времени выполнения или других факторов производительности (например, промахов кэша ) программы на данном компьютере. Он широко используется архитекторами компьютеров для оценки новых компьютерных проектов, разработчиками компиляторов для исследования новых оптимизаций, а также продвинутыми разработчиками для настройки своих программ.
Существует множество подходов к прогнозированию производительности программ на компьютерах. Их можно условно разделить на три основные категории:
Данные о производительности можно получить напрямую из компьютерных симуляторов , в которых каждая инструкция целевой программы фактически динамически выполняется с учетом определенного набора входных данных. Симуляторы могут очень точно предсказывать производительность программы, но требуют значительного времени для обработки больших программ. Примерами являются симуляторы PACE [1] и Wisconsin Wind Tunnel [2], а также более новый набор инструментов моделирования WARPP [3] , который пытается значительно сократить время, необходимое для моделирования параллельной системы.
Другой подход, основанный на трассировке, не запускает каждую инструкцию, а запускает файл трассировки, который хранит только важные события программы. Этот подход теряет некоторую гибкость и точность по сравнению с циклически-точной симуляцией, упомянутой выше, но может быть намного быстрее. Генерация трассировок часто потребляет значительные объемы дискового пространства и может серьезно повлиять на время выполнения приложений, если во время выполнения записывается большой объем данных.
Классический подход к прогнозированию производительности рассматривает программу как набор базовых блоков, соединенных путем выполнения. Таким образом, время выполнения всей программы представляет собой сумму времени выполнения каждого базового блока, умноженного на частоту его выполнения, как показано в следующей формуле:
Частоты выполнения базовых блоков генерируются из профайлера , поэтому этот метод называется прогнозированием на основе профиля. Время выполнения базового блока обычно получается из простого планировщика инструкций.
Классический прогноз на основе профиля хорошо работал для ранних процессоров с одиночным выпуском и последовательным выполнением, но не может точно предсказать производительность современных процессоров. Основная причина в том, что современные процессоры могут выдавать и выполнять несколько инструкций одновременно, иногда вне первоначального порядка и пересекая границу базовых блоков.