Skip to content

Latest commit

 

History

History
58 lines (54 loc) · 4.63 KB

compiler_opt.md

File metadata and controls

58 lines (54 loc) · 4.63 KB

Оптимизация скорости работы компилятора

Языки 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) на скорость работы приложений для данной системы.

План

  1. Выбрать проекты для измерения времени сборки (Linux, Chromium, LibreOffice, ...)
  2. Измерить базовое время сборки (gcc, clang в Ubuntu, ожидание что clang быстрее).
  3. Выявить и уменьшить/устранить недетерминизм измерений времени исполнения:
  • отключить Turbo,
  • отключить HT,
  • выбрать планировщик в ядре,
  • уменьшить частоту прерываний,
  • привязать прерывания к конкретному ядру,
  • запуск приложения на конкретном ядре,
  • статистическая обработка результатов (с Python/Jupyter/pandas),
  • дополнительно: запретить все прерывания на ядре с задачей, запуск в потактовом симуляторе (Gem5), ...
  1. Сборка clang из исходников, статическая линковка.
  2. LTO
  3. PGO
  4. BOLT
  5. Драйвер для автоматического применения BOLT (auto-bolt).

Результаты

  1. Пост на Хабрахабр
  2. Драйвер auto-bolt на гитхабе.

Требования

  1. Компьютер с Linux, навыки работы в командной строке.
  2. Процессор: желательно Интел NHM и выше (наличие LBR).
  3. Программирование на Python (скрипт запуска, обработка результатов, драйвер).

Трудоёмкость

5-6/10

Дополнительные задачи

  • Предложить дополнительные оптимизации,
  • Проанализировать микроархитектурные счётчики (cache miss, branch mispredictions),
  • Анализ с помощью VTune: области для оптимизаций,
  • Реализовать новые оптимизации в BOLT,
  • Предложить средства обнаружения возможностей для ускорения с изменением исходного кода,
  • Ускорение компиляции: кэширование результатов,
  • Линковка: bfd, gold, lld, mold.