Электронная библиотека диссертаций и авторефератов России
dslib.net
Библиотека диссертаций
Навигация
Каталог диссертаций России
Англоязычные диссертации
Диссертации бесплатно
Предстоящие защиты
Рецензии на автореферат
Отчисления авторам
Мой кабинет
Заказы: забрать, оплатить
Мой личный счет
Мой профиль
Мой авторский профиль
Подписки на рассылки



расширенный поиск

Методы высокоуровневой оптимизации циклов. Серебрянный Константин Сергеевич

Диссертация, - 480 руб., доставка 1-3 часа, с 10-19 (Московское время), кроме воскресенья

Автореферат - 240 руб., доставка 10 минут, круглосуточно, без выходных и праздников

Введение к работе

Актуальность темы. С момента появления вычислительной техники и по сегодняшний день скорость выполнения программ была и остается важной темой исследований. Один из наиболее эффективных методов ускорения работы программ — использование оптимизирующих компиляторов. Увеличение мощности современных компьютеров приводит не только к ускорению выполнения программ, но и к появлению новых возможностей, в том числе и для оптимизирующих компиляторов. Кроме того, изменение архитектуры процессоров определяет необходимость создания новых и переработки уже имеющихся методов автоматической оптимизации.

На форуме Intel для разработчиков (Intel Developer Forum, IDF), прошедшем 2-го октября 2002-го года в Москве, были названы девять основных факторов повышения производительности. Среди них: а) программная конвейеризация (software pipelining), б) автопараллелизация (autoparallelization) и в) оптимизация по профилированию (profile guided optimization, PGO).

Программная конвейеризация — это такая трансформация циклов, которая позволяет наиболее эффективно использовать параллелизм уровня команд в большинстве современных микропроцессоров, в том числе, например, в Sun ULTRASparc IIICu или Intel Itanium.

Автопараллелизация — это семейство оптимизирующих трансформаций, позволяющих запускать последовательные независимые участки программы параллельно в нескольких потоках управления (threads). Наиболее распространенное применение автопараллелизация — автоматическая параллелизация циклов. Автопараллелизация позволяет эффективно использовать преимущества мультипроцессорных архитектур, в том числе и псевдо-мультипроцессорных (например, системы HyperThreading фирмы Intel).

Оптимизация по профилированию — это многофазная схема оптимизации программ, состоящая из инструментирования программы, пробного прогона на характерном наборе данных и последующего использова-

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

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

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

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

разработка нового алгоритма подстановки индуктивных переменных, увеличивающего возможности автопараллелизации;

анализ и частичное решение проблем, связанных с "нестандартными" управляющими переменными циклов в языках С и C++;

создание методов профилирования значений для последующей специализации кода.

Предмет исследования составляют различные аспекты разработки и реализации алгоритмов оптимизации программ:

эффективные алгоритмы идентификации, анализа и трансформации индуктивных переменных;

эффективные методы профилирования значений и выбора участков кода для специализации;

оценка конечной производительности оптимизированного кода.

Методы исследования заимствованы из областей системного программирования, технологии компиляции, символьной алгебры и теории графов. Эффективность разработанных алгоритмов и конечная производительность программ оценивались путем замера времени исполнения ряда тестовых программ, в первую очередь программ пакета SPEC CPU2000 (состоящего из двух частей: SPECint2000— 12 программ, использующих преимущественно целочисленную арифметику и SPECfp2000— 14 программ, активно использующих арифметику с плавающей точкой).

Научная новизна работы заключается в создании новых методов анализа и автоматической оптимизации программ, а именно:

в разработке методов идентификации и символьного анализа индуктивных переменных;

в описании и анализе различных разновидностей "нестандартных" управляющих переменных цикла и возможностей их трансформации;

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

Практическая ценность работы. Разработанные алгоритмы были реализованы в рамках промышленного оптимизирующего компилятора фирмы Sun для платформы SPARC (поддерживает языки Си, Си++, Фортран 77, Фортран 90) и показали прирост производительности на ряде реальных программ. Большая часть разработанных алгоритмов имеет платформо- и языко-независимый характер, что позволяет распространить их использование на максимально широкий класс процессорных архитектур и языков программирования.

Основные научные и практические результаты, выносимые на защиту

В диссертационной работе представлены следующие результаты:

1. Новые алгоритмы анализа и трансформации индуктивных пере
менных:

символьный анализ индуктивных переменных;

снижение стоимости индуктивных переменных и выражений;

подстановка индуктивных переменных.

  1. Методы решения проблемы "нестандартных" управляющих переменных: применение специализации кода и интервального анализа для нормализации управляющих переменных.

  2. Новые алгоритмы специализации кода, основанные на профилировании значений:

анализ возможных точек профилирования;

метод быстрого профилирования конкретных значений сразу нескольких переменных или выражений;

специализация кода по полученной статистике значений переменных и выражений.

Все разработанные алгоритмы реализованы автором в оптимизирующем компиляторе для платформы SPARC и успешно прошли этап опытной эксплуатации в фирме Sun и в ЗАО "МЦСТ", дав хорошие результаты и продемонстрировав высокую надежность методов. Часть алгоритмов включена в версию промышленного компилятора, поставляемую с мая 2003 года, другую часть планируется включить в следующую версию компилятора, готовящуюся к выпуску в середине 2005 года.

Апробация. Результаты работы докладывались на научных конференциях

  1. Всероссийская научно-техническая конференция "Новые материалы и технологии", Москва 2002;

  2. Научная конференция МФТИ, Москва-Долгопрудный 2002;

  3. XXIX и XXX Международная молодежная научная конференция "Гагаринские чтения" (Москва 2003 и 2004);

а также на научных и технических семинарах ЗАО "МЦСТ" и ИМВС РАН и в электронном форуме по методам реализации компиляторов фирмы Sun.

Публикации. По теме диссертации опубликованы шесть работ.

Структура и объем работы. Диссертация состоит из введения, трех глав, заключения и приложения. Диссертация содержит 91 страницу, в том числе 3 иллюстрации, 13 таблиц и 33 примера кода. Список литературы насчитывает 56 наименований.

Похожие диссертации на Методы высокоуровневой оптимизации циклов.