Abstract

Inline expansion is very important for high performance VLIW, especially for microprocessors with static scheduling. Optimizations in optimizing compilers for VLIW duplicate code aggressively and lead to long compile time. Our inlining algorithm is based on heuristics that takes into account compile time explicitly. This made optimization more balanced and significantly reduced code growth and compile time compared to common inlining approach based on minimization of runtime within constraints. Instead of using hard constraints we are trading run time for compilation time in some proportion. Our heuristics predicts several key optimizations in evaluation of runtime and compile time: code scheduling, global copy propagation, dead code elimination and different loop optimizations. Optimizations prediction reduces the need in profile information which is rarely available in practice. Our implementation of inlining includes cloning, partial inlining and inlining across compilation modules in whole program mode. All this factors make dramatic impact on performance: our inlining implementation in the Elbrus optimizing compiler boost SPEC CPU2006 benchmark performance by factor of 1.41 at the cost of 12% increase of compile time and 7.7% increase of code size on average.

Highlights

  • Inline expansion is very important for high performance VLIW, especially for microprocessors with static scheduling

  • Our inlining algorithm is based on heuristics that takes into account compile time explicitly

  • This made optimization more balanced and significantly reduced code growth and compile time compared to common inlining approach based on minimization of runtime within constraints

Read more

Summary

Введение

Большинство современных программ написано с использованием высокоуровневых языков программирования. При этом распространённой практикой является разбиение исходного кода на множество мелких функций. 189-198 является инлайн-подстановка (inline expansion), выполняемая оптимизирующим компилятором [1-5]. Наряду с очевидным устранением операций вызова, передачи параметров и результата, инлайнподстановка позволяет увеличить эффективность других оптимизаций, таких как наложение итераций цикла и планирование инструкций. Основным недостатком инлайн-подстановки является рост размера кода, что приводит к увеличению времени компиляции. Указанные проблемы особенно актуальны для VLIW-архитектур со статическим планированием, где в случае небольших функций сложно использовать возможности параллельного исполнения инструкций. Для VLIW необходима очень агрессивная инлайн-подстановка [6], которая в случае современных программ может выполнять подстановку десятков тысяч вызовов. Известные алгоритмы инлайн-подстановки приводят к слишком сильному росту кода и замедлению компиляции. Пытаются найти такое множество подстановок, при котором время исполнения программы минимально, а коэффициент увеличения размера кода не превышает заданной величины. Частичная подстановка функций [7-12] решает указанные проблемы лишь отчасти, в общем случае её область применимости сильно ограничена. Эти алгоритмы показывают хорошие результаты лишь при наличии профильной информации и компиляции в режиме "вся программа" (whole program), на практике такие режимы компиляции используются исключительно редко

Сбалансированная инлайн-подстановка
Findings
Экспериментальные результаты
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call