Оптимизация размера кода при сохранении времени выполнения посредством упорядочивания оптимизационных проходов уровня функций в компиляторе GCC

Автор: Лебедев Г.К., Ефанов Н.Н., Черныш М.В.

Журнал: Труды Московского физико-технического института @trudy-mipt

Рубрика: Информатика и управление

Статья в выпуске: 1 (65) т.17, 2025 года.

Бесплатный доступ

В связи с распространением встраиваемых систем с ограниченным объемом памяти, существует необходимость в уменьшении размера кода программного обеспечения при сохранении времени выполнения. Эта задача не была широко изучена исследователями. Компилятор GCC остается популярным выбором при компиляции программ для встраиваемых систем, однако исследования в области перестановки оптимизационных проходов не продвигались с момента выхода Milepost GCC, а текущие исследования автоматической настройки GCC сосредоточены на настройке флагов. В данной работе исследуется возможность упорядочения оптимизационных проходов в GCC для уменьшения размера кода без ущерба для времени выполнения. Предыдущие работы были сосредоточены на оптимизации всей программы, в то время как это исследование посвящено детальной настройке на уровне функций. Авторами предлагается новая система для изучения последовательностей оптимизаций на уровне функций для компилятора GCC, с целевой функцией размера кода и ограничением на постоянство времени выполнения. Также вводится понятие кэша оптимизаций функций, представляющего собой отображение функций в оптимизационные последовательности, который может улучшить выбор оптимизаций на этапе компиляции. В ходе экспериментов были получены такие результаты, как оценка вероятности того, что случайная последовательность оптимизаций превзойдет стандартную для GCC последовательность 02. а также распределение этой вероятности и зависимость этого распределения от исследуемой функции. Наконец, данная работа предлагает дальнейшие направления исследований: изучение взаимодействий между оптимизационными проходами, исследование пространства поиска и адаптивные стратегии по компиляции.

Еще

Уменьшение размера кода, сохранение времени выполнения, упорядочивание проходов, автоматическая настройка компилятора, оптимизация функций

Короткий адрес: https://sciup.org/142245206

IDR: 142245206   |   УДК: 004.4’416:004.4’422

Optimizing code size at constant execution time with function-level phase ordering in GCC

Due to the increasing prevalence of embedded systems that have limited memory resources, there is a need for reducing the size of code while maintaining execution time. This issue has not been widely explored in the literature. The GCC compiler remains a popular tool for compiling software for embedded devices. However, research on optimization phase ordering within GCC has stagnated since the release of the Milepost GCC abd current research on GCC auto-tuning focuses solely on flag settings. In this paper, we explore the phase ordering space in GCC for code size reduction at constant execution time. Previous studies have focused on optimizing entire programs, whereas our approach focuses on finegrained tuning at the function level. We propose a framework for investigating optimization sequences in GCC, using code size constrained by constant execution time as the objective function. Additionally, we introduce the concept of a function optimization cache, a mapping of functions to optimization sequences that can be used to augment an optimizing compiler. Through experiments, we obtain the probability that a randomly selected sequence of optimizations exceeds the standard GCC 02 sequence, as well as the distribution of these probabilities and their dependence on the function being optimized. Finally, we propose further research directions: exploring collaborative interaction between optimization passes, guided search space exploration, and adaptive compilation strategies.

Еще