динамическая оптимизация запущенных программ - PullRequest
3 голосов
/ 26 марта 2012

Мне сказали, что работающие программы генерируют данные вероятности, используемые для оптимизации повторяющихся инструкций.
Например, если управляющая структура if-then-else была оценена TRUE 8/10 раз, то в следующий раз, когда выполняется оператор if-then-else, существует 80% вероятность того, что условие будет выполнено ПРАВДА. Эта статистика используется, чтобы побудить аппаратное обеспечение загрузить соответствующие данные в регистры, предполагая, что результат будет ИСТИНА. Цель состоит в том, чтобы ускорить процесс. Если оператор действительно имеет значение TRUE, данные уже загружены в соответствующие регистры. Если оператор оценивается как ЛОЖЬ, тогда другие данные загружаются и просто записываются поверх того, что было решено «более вероятно».
Мне трудно понять, как вычисления вероятностей не перевешивают затраты на производительность решений, которые он пытается улучшить. Это то, что действительно происходит? Это происходит на аппаратном уровне? Есть ли имя для этого? Кажется, я могу найти любую информацию по теме.

1 Ответ

4 голосов
/ 26 марта 2012

Это сделано. Это называется предсказанием ветвлений. Стоимость нетривиальна, , но она обрабатывается выделенным оборудованием, поэтому стоимость почти полностью выражается в дополнительных схемах - это не влияет на время, необходимое для выполнения кода.

Это означает, что реальная стоимость - это упущенная возможность, т. Е. Если бы был какой-то другой способ разработки ЦП, который использовал бы такое количество схем для какой-то другой цели и получил бы больше от этого. Мое непосредственное предположение состоит в том, что ответ, как правило, нет - предсказание ветвления обычно вполне эффективно с точки зрения окупаемости инвестиций.

...