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


Разработка программной системы на основе LLVM для оптимизации задержки в высоконагруженных секциях кода C++-приложений

Работа №126710

Тип работы

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

Предмет

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

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

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


Введение 4
Постановка задачи 5
1. Обзорный раздел по предметной области 6
1.1. Встраивание функции 6
1.2. LLVM 7
1.3. Аналоги 7
1.4. Обзор литературы 8
1.4.1 Aggressive Function Splitting for Partial Inlining 8
1.4.2 Automatic Tuning of Inlining Heuristics 8
1.4.3 Function Inlining with Code Size Limitation in Embedded Systems 9
1.5. Вывод 9
2. Программная реализация 11
2.1. Основные компоненты 11
2.2. Локальный оптимизатор 12
2.2.1 Добавление атрибута 12
2.2.2 Встраивание функций 14
2.2.3 Агрессивность встраивания функций 16
2.2.4 Промежуточный результат 16
2.3. Оптимизатор 17
2.4. Модификатор 19
2.5. Исполнитель 22
2.6. Пример использования 22
3. Тестирование и результаты 24
3.1. Тестирование 24
3.2. Проекты для тестирования 24
3.3. Измерение задержки 25
3.3.1 RedBlackTree 25
3.3.2 tinyxml2 26
3.3.3 treap 26
3.4. Размеры исполняемых файлов 28
Выводы 29
Заключение 31
Благодарность 32
Список литературы 33
Приложения 37

В современном мире существует огромное количество программного обеспечения, написанного на C++. Считается, что данный язык программи­рования является очень быстрым. Тем не менее существуют сферы, требую­щие от программы высокой производительности, которая недостижима лишь удачным выбором языка.
Написать код с минимальной асимптотической сложностью - не значит написать оптимальный с точки зрения задержки код: нередко решающим фактором является компилятор, а именно его оптимизации, производящиеся над программой.
В сферах, нуждающихся в высокопроизводительном коде, есть потреб­ность в применении дополнительных оптимизаций. С этой задачей обычно достаточно хорошо справляется компилятор, предоставляющий, например, флаги компиляции [1]. При включенных оптимизационных флагах компи­ляции часто достигается удовлетворяющий пользователя результат, однако далеко не всегда этого достаточно.
Одной из самых важных оптимизаций компилятора является встраи­вание функций [2] - замена вызова функции непосредственно телом функ­ции. Данная работа направлена на создание программной системы, которая предоставляет пользователям возможность оптимизировать задержки в C++- приложениях путем регулируемого агрессивного встраивания функций.

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

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

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


Проведено исследование статей на смежные темы и выявлены различ­ные подходы к встраиванию функций.
Основным результатом данной работы является реализованная про­граммная система, позволяющая оптимизировать среднее время выполнения программ на С++ при помощи агрессивного встраивания функций. Широкий набор параметров для регулирования агрессивности является существенным преимуществом разработанного решения.
На базе созданной системы произведены измерения среднего време­ни работы нескольких тестовых проектов. На одном из тестовых проектов выявлено значительное ускорение до 15%. Произведенные измерения де­монстрируют возможность ускорения программ при помощи использования разработанной системы.


[1] Clang command line arguments. URL: https://clang.llvm.org/docs/ CommandGuide/clang.html#code-generation-options. (дата обра­щения 20.05.2023).
[2] Function inlining. URL: https : / / en . wikipedia. org / wiki / Inline _ function. (дата обращения 20.05.2023).
[3] LLVM. URL: https://llvm.org/. (дата обращения 20.05.2023).
[4] Inline specifier. URL: https://en.cppreference.com/w/cpp/language/ inline. (дата обращения 20.05.2023).
[5] noinline attribute. URL: https : / / clang . llvm . org / docs / AttributeReference.html#noinline. (дата обращения 20.05.2023).
[6] Constant folding. URL: https://en.wikipedia.org/wiki/Constant_ folding. (дата обращения 20.05.2023).
[7] Profile guided optimizetion. URL: https : / / llvm . org / docs / HowToBuildWithPGO . html # introduction. (дата обращения 20.05.2023).
[8] Clang. URL: https://clang.llvm.org/. (дата обращения 20.05.2023).
[9] clang command. URL: https : / / clang . llvm . org / docs / CommandGuide/clang.html. (дата обращения 20.05.2023).
[10] opt command. URL: https://llvm.org/docs/CommandGuide/opt. html. (дата обращения 20.05.2023).
[11] llc command. URL: https://llvm.org/docs/CommandGuide/llc.html. (дата обращения 20.05.2023).
[12] Jun-Pyo Lee и др. «Aggressive Function Splitting for Partial Inlining». В: Interaction between Compilers and Computer Architecture, Annual Workshop on 0 (февр. 2011), с. 80—86. DOI: 10.1109/INTERACT. 2011.14.
[13] John Cavazos и Michael FP O’Boyle. «Automatic tuning of inlining heuristics». В: SC’05: Proceedings of the 2005 ACM/IEEE Conference on Supercomputing. IEEE. 2005, с. 14—14.
[14] Xinrong Zhou, Johan Lilius и Lu Yan. «Function Inlining with Code Size Limitation in Embedded Systems.» В: Int. Arab J. Inf. Technol. 2.3 (2005), с. 214—218.
[15] LLVM 12 github project repository. URL: https://github.com/llvm/ llvm-project/tree/release/12.x. (дата обращения 20.05.2023).
...


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



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


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