Тип работы:
Предмет:
Язык работы:


Генерация оптимального объектного кода

Работа №126326

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы29
Год сдачи2021
Стоимость4550 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
30
Не подходит работа?

Узнай цену на написание


Введение 2
1 Цели и задачи 3
2 Обзор 4
2.1 Анализ Clang 5
2.2 Анализ GCC 6
2.3 Оптимизация на основе SSA-формы 7
2.4 Оптимизация на основе AST-формы 8
3 Реализация 8
3.1 Общий подход 8
3.2 Оптимизация последовательных переходов 9
3.3 Вычисление количества повторов цикла перед телом цикла 11
3.4 Использование слота задержки 12
3.5 Индуцированные переменные 14
3.6 Удаление ненужных индуктивных переменных 17
4 Измерения и оценка 19
5 Заключение 21
Список литературы 23
Приложение 1 26
Приложение 2 27
Приложение 3 27

Несмотря на то, что C является фактическим стандартом для низкоуровневого программирования и программирования встроен­ных систем, он имеет существенные недостатки, такие как арифме­тика указателей и отсутствие контроля за границами массива при доступе к элементу массива. Примечательно, что это недостатки самого языка, а не отдельных компиляторов. Эти недостатки нега­тивно сказываются на безопасности языка C.
На кафедре системного программирования Санкт-Петербургского государственного университета разрабатывается транслятор языка RuC, представляющий собой усовершенствованную версию языка C [1]. На эту тему были сделаны научные публикации [2, 3]. На дан­ный момент проект RuC стал промышленным, что свидетельствует об актуальности и практической значимости данного проекта.
С развитием RuC возникла необходимость в реализации опти­мизаций. Без оптимизаций транслятор не сможет конкурировать с популярными компиляторами с языка C, такими, как GCC или Clang.
Генерация оптимального объектного кода является одной из ос­новных и наиболее сложных задач в области разработки компиля­торов. Данная работа посвящена оптимизации генерации кода для процессоров с архитектурой MIPS [4], что усложняет задачу. MIPS - это RISC-архитектура, допускающая огромную вариативность в генерации кода и его оптимизации.
Разработчик генератора кода сталкивается со сложными вопро­сами. Какие оптимизации должны быть реализованы? Какие оп­тимизации дадут значительный выигрыш в скорости работы про­граммы? Какие оптимизации часто ускоряют работу программы, а какие срабатывают очень редко? Какие особенности архитектуры следует учитывать при оптимизации кода? Все это требует анализа других трансляторов, подходов к оптимизации и большой работы с машиной, в коды которой переводится программа.
Некоторые оптимизации не могут быть реализованы только в рамках генератора кода. Для сложных оптимизаций может потре­боваться изменить абстрактное синтаксическое дерево или доба­вить дополнительную информацию в таблицы транслятора до на­чала кодогенерации, что требует включения в компилятор допол­нительного оптимизирующего просмотра.
После реализации необходимо повторно проанализировать дру­гие трансляторы, чтобы выяснить, где и как еще можно оптими­зировать код, насколько и в каких случаях компилятор RuC про­игрывает своим аналогам, а в каких случаях и на сколько он стал лучше.
Работа состоит из пяти глав. В первой главе ставится цель ра­боты и описываются конкретные задачи для достижения цели. Во второй главе представлен обзор оптимизированного кода, сгенери­рованного GCC и Clang, а также обзор подходов к оптимизации. Третья глава содержит общий подход к реализации оптимизаций и детали реализации конкретных оптимизаций. В четвёртой главе представлены измерения, их оценка и повторное сравнение с GCC и Clang. В пятой главе описаны результаты работы и возможности для дальнейших исследований.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В данной работе решается задача оптимизации генерации ассем­блерного кода архитектуры MIPS. Были проанализированы ком­пиляторы GCC и Clang. На основе проведенного анализа были вы­браны оптимизации для реализации: оптимизация последователь­ных переходов, вычисление количества повторов цикла перед телом цикла, использования слота задержки, индуцированные перемен­ные и удаление ненужных индуктивных переменных. Эффектив­ность оптимизаций была показана на примере умножения матриц. Таким образом, генерация кода для циклов и вырезок была опти­мизирована в трансляторе RuC.
Дальнейшим направлением работ по оптимизации генерации RuC в архитектуру MIPS могут быть: оптимизация вызовов функций, арифметических операций, распределение регистров, устранение неиспользуемых переменных.
Также работа оставляет после себя несколько открытых про­блем для исследований. Например, в обзоре было указано, что ко­манда madd сильно замедляет программу. Но почему так проис­ходит? Это хорошая тема для исследований свойств архитектуры процессора. Сам результат данной работы может стать объектом для исследования. Почему оптимизированная программа работает всё ещё медленнее аналогов в отдельных случаях? Вопрос остаётся открытым.


[1] Github проекта RuC - URL: https://github.com/andrey- terekhov/RuC (accessed: 04.04.2021)
[2] Проект РуСи для обучения и создания высоконадежных про­граммных систем. Терехов А. Н.; Терехов М. А. Известия выс­ших учебных заведений. Северо-Кавказский регион. Техниче­ские науки. 2017.
[3] Code generation for floating-point arithmetic in architecture MIPS. Arkhipov I.S. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2020;32(3):49-56
[4] SYSTEM V APPLICATION BINARY INTERFACE MIPS RISC Processor, 3rd Edition
[5] GCC official site - URL: https://GCC.gnu.org/ (accessed: 04.04.2021)
[6] LLVM official site - URL: https://llvm.org/ (accessed: 04.04.2021)
[7] Baikal-Tl specifications - URL: http://www.baikalelectronics.ru/ products/35/ (accessed: 04.04.2021)
[8] time(l) Linux manual page - URL: https://man7.org/linux/man- pages/man1/time.1.html (accessed: 04.04.2021)
[9] MIPS Architecture for Programmers Volume II-A: The MIPS32 Instruction Set Manual
[10] Aho, Alfred Vaino; Lam, Monica Sin-Ling; Sethi, Ravi; Ullman, Jeffrey David (2006). Compilers: Principles, Techniques, and Tools (2 ed.)
[11] S. Muchnick. Advanced Compiler Design and Implementation, 1997
[12] Kathleen Knobe, Vivek Sarkar. Array SSA form and its use in parallelization. POPL ’98: Proceedings of the 25th ACM SIGPLAN- SIGACT symposium on Principles of programming languages, January 1998
[13] Jianzhou Zhao, Santosh Nagarakatte, Milo M. K. Martin, Steve Arthur Zdancewic. Formal verification of SSA-based optimizations for LLVM. PLDI ’13: Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation, June 2013
[14] Tiny C Compiler Reference Documentation - URL: https://bellard.org/tcc/tcc-doc.html (accessed: 04.04.2021)
[15] Тесты для оптимизации последовательных переходов - URL: https://github.com/IvanArkhipov1999/RuC/tree/mips/tests/mips/ optimizations/cycle_jump_reduce (accessed: 04.04.2021)
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ