Введение в профилирование и оптимизацию Сегодняшнее занятие посвящено профилированию и оптимизации, которые имеют решающее значение для высокопроизводительных вычислений. Цель состоит в том, чтобы выявить проблемы с производительностью в программе с миллионами строк кода, которые пользователи считают медленными. Будущим разработчикам важно либо оптимизировать существующий код, либо подтвердить его эффективность.
Понимание жалоб Пользователей На Производительность Пользователь считает время выполнения неудовлетворительным, несмотря на то, что он непосредственно не участвовал в разработке. Мы, как профессионалы, несем ответственность за решение этих проблем, выявляя потенциальные области для улучшения или подтверждая, что дальнейшая оптимизация не принесет существенных преимуществ.
Начальные шаги: Запуск программы и выявление проблем Мы начинаем с запуска простой программы, написанной на неопределенном языке, но содержащей обширные математические вычисления и операции генерации случайных чисел. Наша задача - определить, можно ли оптимизировать ее на основе текущих показателей производительности.
Обзор инструментов профилирования: Использование Grint Profiler Профилировщик Grint помогает нам понять, на что уходит больше всего времени обработки в нашем приложении, используя графики вызовов, показывающие частоту и продолжительность вызовов функций, выделяя функции, потребляющие 99% ресурсов процессора, такие как матричные операции, доступ к которым осуществляется через стандартные библиотеки, такие как модуль генератора случайных чисел Boost.
Минимизация накладных расходов на профилирование в многопоточных приложениях Профилировщики для многопоточных приложений могут собирать статистику, не ограничивая выполнение одним потоком, в отличие от некоторых линтеров. Это связано с их архитектурой, основанной на принципах LD, обеспечивающей реальный параллелизм и точный сбор данных.
Проблемы с использованием инструментов для работы с Белой доской Во время презентации Ведущий не смог найти инструмент для работы с белой доской во время онлайн-сессии, несмотря на предыдущие попытки. Они рассматривали альтернативные методы, такие как совместное использование отдельных экранов, но столкнулись с техническими трудностями, которые препятствовали беспрепятственному взаимодействию.
Объявления и определения функций в нескольких файлах Функция, объявленная в заголовке одного файла, может быть определена в другом месте или вообще отсутствовать в рамках одного проекта. Разные команды, работающие над различными частями кодовой базы, могут непреднамеренно создавать конфликтующие функции, что может привести к потенциальным проблемам с компоновкой во время компиляции.
Вывод 'Aa' Благодаря внешним механизмам разрешения символов Вывод "Aa" происходит потому, что современные операционные системы разрешают внешние символы путем последовательного поиска в библиотеках, пока не найдут первое совпадение. Этот механизм обеспечивает согласованное разрешение символов в разных модулях, даже если существует несколько определений.
Ключевое слово "Static" Предотвращает конфликты внешних символов Использование ключевого слова "Static" предотвращает отображение функций в виде внешних символов, что позволяет избежать конфликтов при связывании крупных проектов с участием нескольких разработчиков или библиотек. Это ограничивает видимость функций строго в рамках определяющего модуля, гарантируя отсутствие непреднамеренных переопределений извне.