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


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

Работа №143628

Тип работы

Дипломные работы, ВКР

Предмет

математика и информатика

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

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


Введение 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)...41


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



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


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