Вы находитесь на старом сайте МЦСТ. Актуальный материал смотрите на новом сайте.

Использование профиля значений в инлайн-подстановках

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

В качестве одного из основных средств выявления и устранения межпроцедурных избыточностей оптимизирующими компиляторами применяется подстановка тела вызываемой функции в точку вызова (inline-подстановка, инлайн-подстановка) [1]. Суть этого преобразования состоит в замене операции вызова процедуры на ее тело. Применительно к EPIC-архитектурам [2], подстановка тела функции в точку вызова обладает еще одним важным, с точки зрения производительности, эффектом. А именно, помимо возможности устранения межпроцедурных избыточностей, компилятор получает возможность совместного планирования вызывающей и вызываемой процедур. Другими словами, часть операций вызывающей и вызываемой процедур может исполняться параллельно. Алгоритмам проведения inline-подстановок посвящена статья [3].

На практике подстановка тела функции в точку вызова не всегда возможна. Например, бывают случаи, когда вызов процедуры происходит не по имени, а по адресу (вызовы по косвенности, неявные вызовы), т.е. в момент вызова неизвестно, какая именно процедура будет вызвана и, соответственно, тело какой процедуры можно подставить в данную точку. Известный подход к решению данной проблемы состоит в статическом межпроцедурном анализе указателей [4, 5], с помощью которого иногда удается узнать, какая именно процедура вызывается. Однако в большинстве случаев возможностей статического анализа хватает лишь на то, чтобы немного сократить множество процедур, которые могут быть потенциально вызваны в данной точке.

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

Подробнее... Загрузить файл 

Содержание:

Введение
1. Сбор профильной информации
2. Специализированная подстановка тела функции в место вызова на основе профиля значений
3. Экспериментальные результаты
Заключение
Литература

Использование профиля значений в инлайн-подстановках

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

mcst.ru