• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Статья
Crystallochemical Design of Huntite-Family Compounds

Kuz’micheva G. M., Kaurova I. A., Rybakov V. B. et al.

Crystals. 2019. Vol. 9. No. 2. P. 1-49.

Глава в книге
Structural Synthesis of the IoT System for the Fog Computing

Saksonov E., Leokhin Y., Panfilov, P.

In bk.: 24th Conference of Open Innovations Association FRUCT, FRUCT 2019. IEEE Computer Society, 2019. P. 381-387.

Препринт
Темпоральные расширения в стандарте SQL

С.Д. Кузнецов

Препринты ИСП РАН. Институт системного программирования им. В.П. Иванникова РАН, 2017. № 30.

Компиляторные технологии

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

В первой части курса строится и анализируется промежуточное представление «среднего уровня». Программная единица представляется в виде последовательности «трехадресных» инструкций: в каждой инструкции присутствует код операции, имена двух операндов и имя результата; ветвления и циклы организуются с помощью операций условного и безусловного перехода; операции call и return представлены явно; имена означают ссылки на таблицу символов: еще нет регистров, соглашений о связях и т.п. Промежуточное представление «среднего уровня» используется для построения алгоритмов анализа потока данных на графе потока управления. Структура графа потока управления выявляется с помощью его остовного дерева и дерева управления. Рассматриваются простейшие оптимизации, такие как оптимизация индуктивных переменных, частичная развертка циклов, открытая вставка процедур, оптимизация переходов и возвратов из процедур (в частности, рекурсивных).

Вторая часть курса посвящена методам машинно-ориентированной оптимизации: распределение регистров, планирование последовательности команд, выдача команд методом переписывания дерева.

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

План

Промежуточные представления программы. Базовые блоки и граф потока управления.

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

Анализ потока данных – основной метод глобальной оптимизации. Примеры анализа потока данных – анализ достигающих определений и анализ живых переменных.

Граф потока управления: остовное дерево, обход,  нумерация вершин, классификация дуг, отношение доминирования и построение дерева доминаторов.

SSA-форма промежуточного представления и ее построение. Граница доминирования. Анализ потока данных в SSA-форме. Доступные выражения.

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

Методы ускорения анализа потока данных, используя суперблоки и другие области графа потока управления.

Глобальный метод нумерации значений

Глобальный и межпроцедурный анализ указателей с учетом псевдонимов (алиасов). Методы учета контекста вызова процедур.

Машинно-ориентированная оптимизация: планирование кода, распределение регистров

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

Генерация объектного кода методом переписывания дерева.