Разработка средства оптимизации встраиваемого по на базе автонастройки перестановкой оптимизационных проходов современного компилятора GCC
Автор: Отращенко А.И., Акимов З.Д., Ефанов Н.Н.
Журнал: Труды Московского физико-технического института @trudy-mipt
Рубрика: Информатика и управление
Статья в выпуске: 1 (61) т.16, 2024 года.
Бесплатный доступ
Современные компиляторы реализуют значительное количество оптимизационных проходов, и существенно повлиять на характеристики полученного в результате компиляции бинарного файла может последовательность, в которой они применяются. Однако любое ПО, использующее GCC как систему компиляции, не может настраивать последовательность оптимизаций ввиду отсутствия поддержки такой возможности со стороны компилятора. В данной работе рассматривается разработка способа и имплементация программного комплекса на базе GCC, позволяющего автоматически настраивать последовательности применения оптимизационных проходов компилятора при изначально заданной целевой функции. Комплекс включает в себя программы для взаимодействия непосредственно с компонентами компилятора и его оптимизационными проходами, а также ПО для интеграции с уже существующими библиотеками машинного обучения. С использованием разработанной инфраструктуры авторами реализовано два подхода для автонастройки компилятора: на основе генетического алгоритма и на основе обучения с подкреплением. Для тестирования подходов был сформирован набор открытых бенчмарков, состоящий из утилит с открытым исходным кодом, программ моделирования и уже существующих открытых бенчмарков. В ходе экспериментального сравнения подходов был получен и проанализирован выигрыш в размере бинарных файлов набора открытых бенчмарков без увеличения времени исполнения.
Оптимизирующий компилятор, генетический алгоритм, машинное обучение, gcc, обучение с подкреплением, характеризация функций, автонастройка компилятора
Короткий адрес: https://sciup.org/142241776
IDR: 142241776 | УДК: 004.4’416:004.4’422
Development of optimization framework for embedded software based on automatic tuning of modern GCC via optimisation phases reordering
Nowadays compilers have large amounts of optimizations, and the order in which these optimizations are applied can significantly impact the resulting binary. However, any software that uses GCC as a toolchain could not choose the optimization order, because of lack of such support in the compiler. In this paper, we propose an implementation of software infrastructure, based on GCC toolchain, which allows phase-ordering in GCC with regard to given objective function. It includes infrastructure to interact with GCC and its optimization passes, and it includes integration of this infrastructure into existing machine learning packages. Using the implemented method, we explored two approaches for compiler auto-tuning by phase-ordering: genetic algorithm and reinforcement learning. For testing those approaches a benchmark set was created, which consists of utility programs, programs for modeling and existing open benchmarks. In carried out experiments, where the objective function was chosen to be size reduction without loss in runtime, the results were acquired, analyzed and compared between the approaches.
Список литературы Разработка средства оптимизации встраиваемого по на базе автонастройки перестановкой оптимизационных проходов современного компилятора GCC
- Lattner C., Adve V. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation // Online. 2003. https://llvm.org/pubs/2003-09-30-LifelongOptimizationTR.pdf
- Ashouri A.H., Killian W., Cavazos J., Palermo G., Silvano C. A Survey on Compiler Autotuning using Machine Learning // Online. 2018. https://arxiv.org/abs/1801.04405
- Plotnikov D., Melnik D., Vardanyan M., Buchatskiy R., Zhuykov R., Lee J. A scalable auto-tuning framework for compiler optimization // Online. 2009. https://ieeexplore.ieee.org/document/5161054
- Fursin G., Miranda C., Temam O., Namolaru M., Yom-Tov E., Zaks A., Mendelson B., Barnard P., Ashton E., Courtois E., Courtois F., Bonilla E., Thomson J., Leather H., Williams C., O’Boyle M. MILEPOST GCC: machine learning based research compiler // International Journal of Parallel Programming. 2011. V. 39. P. 296–327.
- Cummins C., Wasti B., Guo J., Cui B., Ansel J., Gomez S., Jain S., Liu J., Teytaud O., Steiner B., Tian Y., Leather H. CompilerGym: Robust, Performant Compiler Optimization Environments for AI Research // Online. 2021. https://arxiv.org/abs/2109.08267
- CompilerGym library // Online. 2023. https://compilergym.com
- GCC GENERIC // Online. 2023. https://gcc.gnu.org/onlinedocs/gccint/GENERIC.html
- GCC GIMPLE // Online. 2023. https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
- GCC RTL // Online. 2023. https://gcc.gnu.org/onlinedocs/gccint/RTL.html
- Multibenches // Online. 2023. https://github.com/mccs-group/multibenches
- Zavodskih R. K., Efanov N. N. Performance prediction for chosen types of loops over one-dimensional arrays with embedding-driven intermediate representations analysis // Computer research and modeling. 2023. V. 15, I. 1. P. 211–224.
- Cummins C., Fisches Z.V., Ben-Nun T., Hoefler T., Leather H. ProGraML: Graphbased Deep Learning for Program Optimization and Analysis // Online. 2018. https://arxiv.org/pdf/2003.10536.pdf
- VenkataKeerthy S., Aggarwal R., Jain S., Desarkar M. S., Upadrasta R., Srikant Y.N. IR2VEC: LLVM IR Based Scalable Program Embeddings // ACM Transactions on Architecture and Code Optimization. 2020. V. 17, I. 4, N 32. P. 1–27.
- Rastello F., Tichadou F.B. SSA-based compiler design // Online. 2022. https://pfalcon.github.io/ssabook/latest/book.pdf
- Gcc_pr environment // Online. 2023. https://github.com/mccs-group/gcc_pr_env
- Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы. Москва: горячая линия Телеком, 2006.
- Gcc-multienv environment // Online. 2023. https://github.com/mccs-group/gcc_multienv
- PyGAD – Python Genetic Algorithm! // Online. 2023. https://pygad.readthedocs.io/en/latest/
- Umbarkar A.J., Sheth P.D. Crossover Operators In Genetic Algorithms: A Review // International Journal of Computer Applications. 2017. V. 162, N 10. P. 34–36.
- Sutton R.S. Barto A.G. Reinforcement Learning: An Introduction. Cambridge MIT Press, 2018
- Liang E., Liaw R., Moritz P., Nishihara R., Fox R., Goldberg K., Gonzalez J.E., Jordan M.I., Stoica I. RLlib: Abstractions for Distributed Reinforcement Learning // Online. 2018. https://arxiv.org/pdf/1712.09381.pdf
- Huang Q., Haj-Ali A., Moses W., Xiang J., Stoica I., Asanovic K., Wawrzynek J. AutoPhase: Juggling HLS Phase Orderings in Random Forests with Deep Reinforcement Learning // Online. 2020. https://arxiv.org/abs/2003.00671
- Sui Y., Cheng X., Zhang G., Wang H. Flow2Vec: value-flow-based precise code embedding // Proceedings of the ACM on Programming Languages. V. 4, I. OOPSLA, N 233. P. 1–27.
- Eckart, C.; Young, G. The approximation of one matrix by another of lower rank // Psychometrika. 1. P. 211–218. Online. http://dx.doi.org/10.1007/BF02288367
- Pearson K. LIII. On lines and planes of closest fit to systems of points in space // Philosophical Magazine and Journal of Science. 1901. V. 2, I. 11. P. 559–572.
- Appel A.W. Modern Compiler Implementation in ML. Cambridge UK: Cambridge University Press, 1998.
- Mnih V., Badia A.P., Mirza M., Graves A., Lillicrap T.P., Harley T., Silver D., Kavukcuoglu K. Asynchronous Methods for Deep Reinforcement Learning // Proceedings of The 33rd International Conference on Machine Learning. 2016. V. 48. P. 1928–1937.
- Yang X., Chen Y., Eide E., Regehr J. Finding and understanding bugs in C compilers // ACM-SIGPLAN Symposium on Programming Language Design and Implementation. 2011. V. 46, I. 6. P. 283–294.