Аннотация:
Предложен метод отображения промежуточных представлений C-, C++-программ в пространство векторов (эмбеддингов) для оценки производительности программ на этапе компиляции, без необходимости исполнения. Использование эмбеддингов для данной цели позволяет
не проводить сравнение графов исследуемых программ непосредственно, что вычислительно
упрощает задачу сравнения программ. Метод основан на серии трансформаций исходного промежуточного представления (IR), таких как: инструментирование — добавление фиктивных инструкций в оптимизационном проходе компилятора в зависимости от разности смещений в текущей инструкции обращения к памяти относительно предыдущей, преобразование IR в многомерный вектор с помощью технологии IR2Vec с понижением размерности по алгоритму t-SNE
(стохастическое вложение соседей с t-распределением). В качестве метрики производительности предлагается доля кэш-промахов 1-го уровня (D1 cache misses). Приводится эвристический
критерий отличия программ с большей долей кэш-промахов от программ с меньшей долей по
их образам. Также описан разработанный в ходе работы проход компилятора, генерирующий
и добавляющий фиктивные инструкции IR согласно используемой модели памяти. Приведено
описание разработанного программного комплекса, реализующего предложенный способ оценивания на базе компиляторной инфраструктуры LLVM. Проведен ряд вычислительных экспериментов на синтетических тестах из наборов программ с идентичными потоками управления,
но различным порядком обращений к одномерному массиву, показано, что коэффициент корреляции между метрикой производительности и расстоянием до эмбеддинга худшей программы
в наборе отрицателен вне зависимости от инициализации t-SNE, что позволяет сделать заключение о достоверности эвристического критерия. Также в статье рассмотрен способ генерации
тестов. По результатам экспериментов, вариативность значений метрики производительности на
исследуемых множествах предложена как метрика для улучшения генератора тестов.
Ключевые слова:математическое моделирование, компиляторы, промежуточные представления программ, эмбеддинги, анализ производительности, статический анализ.
УДК:
004.051
Поступила в редакцию: 01.11.2022 Принята в печать: 23.12.2022