Языки C/C++ – одни из самых популярных среди разработчиков согласно индексу TIOBE(https://www.tiobe.com/tiobe-index/). Сборка крупных проектов на C/C++ занимает существенное время, особенно при использовании крупных библиотек, таких как STL, Boost, Qt, Webkit и прочих. Так, проект компилятора Clang/LLVM ставил одной из своих основных целей ускорение работы по сравнению с другим популярным компилятором GCC.
- Ускорить сборку проекта на C/C++.
- Изучить способы ускорения работы компилятора.
- Изучить методологию замера производительности в ОС Linux.
- Выработать методологию, разработать автоматические средства для ускорения приложений.
- Предложить новые способы ускорения приложений.
Ускорение сборки – это насущная проблема для разработчиков, так как время сборки находится на критическом пути цикла разработки: внесение изменений, сборка, отладка.
- Практическая:
- Разработана методология замера производительности.
- Реализованы средства автоматического замера производительности (скрипт, обработка результатов).
- Разработан драйвер для автоматического применения оптимизации BOLT для приложений (драйвер).
- Научная:
- Измерен эффект различных оптимизаций (LTO, PGO, BOLT) на скорость работы приложений для данной системы.
- Выбрать проекты для измерения времени сборки (Linux, Chromium, LibreOffice, ...)
- Измерить базовое время сборки (gcc, clang в Ubuntu, ожидание что clang быстрее).
- Выявить и уменьшить/устранить недетерминизм измерений времени исполнения:
- отключить Turbo,
- отключить HT,
- выбрать планировщик в ядре,
- уменьшить частоту прерываний,
- привязать прерывания к конкретному ядру,
- запуск приложения на конкретном ядре,
- статистическая обработка результатов (с Python/Jupyter/pandas),
- дополнительно: запретить все прерывания на ядре с задачей, запуск в потактовом симуляторе (Gem5), ...
- Сборка clang из исходников, статическая линковка.
- LTO
- PGO
- BOLT
- Драйвер для автоматического применения BOLT (auto-bolt).
- Пост на Хабрахабр
- Драйвер auto-bolt на гитхабе.
- Компьютер с Linux, навыки работы в командной строке.
- Процессор: желательно Интел NHM и выше (наличие LBR).
- Программирование на Python (скрипт запуска, обработка результатов, драйвер).
5-6/10
- Предложить дополнительные оптимизации,
- Проанализировать микроархитектурные счётчики (cache miss, branch mispredictions),
- Анализ с помощью VTune: области для оптимизаций,
- Реализовать новые оптимизации в BOLT,
- Предложить средства обнаружения возможностей для ускорения с изменением исходного кода,
- Ускорение компиляции: кэширование результатов,
- Линковка: bfd, gold, lld, mold.