Прогноз производительности - Performance prediction

В информатике , прогноз производительности означает , что для оценки времени выполнения или других факторов эффективности (например, кэш - промахов) программы на данном компьютере. Он широко используется компьютерными архитекторами для оценки новых компьютерных проектов, разработчиками компиляторов для изучения новых возможностей оптимизации, а также для опытных разработчиков для настройки своих программ.

Существует множество подходов к прогнозированию производительности программы на компьютере. Их можно условно разделить на три основные категории:

  • прогнозирование на основе моделирования
  • прогнозирование на основе профиля
  • аналитическое моделирование

Прогнозирование на основе моделирования

Данные о производительности могут быть получены непосредственно из компьютерных симуляторов , в которых каждая инструкция целевой программы фактически динамически выполняется с учетом определенного набора входных данных. Симуляторы могут очень точно предсказать производительность программы, но для обработки больших программ требуется значительное время. Примеры включают симуляторы PACE и Wisconsin Wind Tunnel, а также новейший инструментарий моделирования WARPP, который пытается значительно сократить время, необходимое для параллельного моделирования системы.

Другой подход, основанный на моделировании на основе трассировки , не запускает все инструкции, а запускает файл трассировки, в котором хранятся только важные программные события. Этот подход теряет некоторую гибкость и точность по сравнению с симуляцией с точностью до цикла, упомянутой выше, но может быть намного быстрее. Создание трассировок часто требует значительного объема дискового пространства и может серьезно повлиять на время выполнения приложений, если во время выполнения записывается большой объем данных.

Прогнозирование на основе профиля

Классический подход к прогнозированию производительности рассматривает программу как набор базовых блоков, соединенных путем выполнения. Таким образом, время выполнения всей программы - это сумма времени выполнения каждого базового блока, умноженная на его частоту выполнения, как показано в следующей формуле:

Частоты выполнения базовых блоков генерируются из профилировщика , поэтому этот метод называется прогнозированием на основе профиля. Время выполнения базового блока обычно получается из простого планировщика инструкций.

Классическое прогнозирование на основе профилей хорошо работало для ранних процессоров с одной проблемой и упорядоченным выполнением, но не в состоянии точно предсказать производительность современных процессоров. Основная причина в том, что современные процессоры могут выдавать и выполнять несколько инструкций одновременно, иногда не в исходном порядке и пересекая границы базовых блоков.