Анализ алгоритмов составляющих частей компилятора и его оптимизации

Обложка

Цитировать

Полный текст

Открытый доступ Открытый доступ
Доступ закрыт Доступ предоставлен
Доступ закрыт Только для подписчиков

Аннотация

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

Полный текст

Доступ закрыт

Об авторах

Илья Андреевич Харин

Национальный исследовательский университет «Московский энергетический институт (МЭИ)»

Автор, ответственный за переписку.
Email: xarin.ilya@bk.ru

аспирант кафедры вычислительных машин, систем и сетей Национального исследовательского университета «МЭИ»

Россия, Москва

Марина Викторовна Раскатова

Национальный исследовательский университет «Московский энергетический институт (МЭИ)»

Email: marvp@yandex.ru

кандидат технических наук; доцент кафедры вычислительных машин, комплексов и систем Национального исследовательского университета «МЭИ»

Россия, Москва

Список литературы

  1. Aschwanden P. CcNav: Understanding compiler optimizations in binary code // IEEE Transactions on Visualization and Computer Graphics. 2021. Vol. 27. No. 2. Pp. 667–677.
  2. Chen Ge. CRAC: An automatic assistant compiler of checkpoint/restart for OpenCL program // Concurrency and Computation: Practice and Experience. 2022. Vol. 34. No. 8. Pp. 14–22.
  3. Huang Ya., Xie B. Fine-grained compiler identification with sequence-oriented neural modeling // IEEE Access: Practical Innovations, Open Solutions. 2021. Vol. 9. Pp. 49160–49175.
  4. Sampson A., Adit N. Performance left on the table: An evaluation of compiler autovectorization for RISC-V // IEEE Micro. 2022. Vol. 42. No. 5. Pp. 41–48.
  5. Tang Yi., Zhou Zh.. Detecting compiler warning defects via diversity-guided program mutation // IEEE Transactions on Software Engineering. 2021. Vol. 48. No. 11. Pp. 4411–4432.
  6. Tewary M., Salcic Z.. Compiler-assisted energy reduction of java real-time programs // Microprocessors and Microsystems. 2022. Vol. 89. No. 3. Pp. 78–83.
  7. Wang Zh. Machine learning in compiler optimization // Proceedings of the IEEE. 2018. Vol. 106. No. 11. Pp. 1879–1901.
  8. Баглий А.П., Кривошеев Н.М., Штейнберг Б.Я. Автоматизация распараллеливания программ с оптимизацией пересылок данных // Научный сервис в сети Интернет. 2022. № 24. С. 81–92.
  9. Болотнов А.М., Нурисламова Э.А. Влияние оптимизации компилятора GCC на эффективность программного кода в языке C++ // Современные наукоемкие технологии. 2019. № 12-2. С. 266–270.
  10. Вьюкова Н.И., Галатенко В.А., Самборский С.В. Средства динамического анализа программ в компиляторах GCC и CLANG // Программирование. 2020. № 4. С. 46–64.
  11. Малявко А.А. Обработка ошибок в синтаксическом анализаторе компилятора языка EL // Научный вестник Новосибирского гос. техн. ун-та. 2019. № 2 (75). С. 37–48.
  12. Советов П.Н. Итеративный подход с использованием компилятора для синтеза и моделирования проблемно-ориентированного набора команд // International Journal of Open Information Technologies. 2019. Т. 7. № 10. С. 14–21.
  13. Стрелец А.И., Черникова Е.А., Малков Л.В., Дождев А.И. Структура компилятора одноразовой программы // Международный журнал гуманитарных и естественных наук. 2019. № 1-1. С. 146–147.
  14. Третьяк А.В. Значимость отступов при разработке лексического анализатора компиляторов // Молодежь. Наука. Инновации. 2021. Т. 1. С. 306–309.
  15. Штейнберг Б.Я. Преобразования программ – фундаментальная основа создания оптимизирующих распараллеливающих компиляторов // Программные системы: теория и приложения. 2021. Т. 12. № 1 (48). С. 21–113.

Дополнительные файлы

Доп. файлы
Действие
1. JATS XML
2. Рис. 1. Фазы работы компилятора [Aschwanden, 2021]

Скачать (59KB)
3. Рис. 2. Пример работы лексического анализатора

Скачать (65KB)
4. Рис. 3. Пример синтаксического анализа

Скачать (73KB)
5. Рис. 4. Сопоставление оптимизированного и исходного кода [Wang, 2018]

Скачать (56KB)
6. Рис. 5. Пример устранения лишних инструкций

Скачать (59KB)
7. Рис. 6. Общий взгляд на машинное обучение в компиляторах: а – разработка функции; b – обучение модели; с – развертывание

Скачать (117KB)
8. Рис. 7. Уплотнение потока OpenCL: a – оригинальное ядро OpenCL; b – преобразование кода с коэффициентом уплотнения 2

Скачать (96KB)
9. Рис. 8. Цикл взаимодействия CompilerGym

Скачать (141KB)


Данный сайт использует cookie-файлы

Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта.

О куки-файлах