Программирование на кластерах с использованием инструментов Intel (Intel Cluster Studio)

Intel® VTune Amplifier XE

Показывать лекцию целиком

Презентацию к данной лекции Вы можете скачать здесь.

Оптимизация программного обеспечения

Цикл оптимизации

  • Выявление "горячих пятен" (Hotspots).
  • Определение причин низкой эффективности:
  • промахи кэш-памяти;
  • доступ к данным;
  • простои выполнения программы;
  • ошибки предсказания ветвлений;
  • другие.
  • Оптимизация.
  • Три уровня оптимизации:

  • Системный уровень
  • Уровень приложения
  • Микроархитектурный уровень
  • 1 шаг анализа производительности программы - на уровне системы.

  • Анализ операций обмена с внешними носителями (жесткими дисками).
  • Анализ использования оперативной памяти.
  • Анализ взаимодействия с сетью.
  • Цель оптимизации на уровне системы – добиться наиболее эффективного взаимодействия программы с системой. Наличие проблем на уровне системы может лишить смысла оптимизацию программы на других уровнях (если программа мало загружает процессор из-за проблем на уровне системы, даже серьезное ускорение на уровне архитектуры не даст, скорее всего, заметного выигрыша).

    Оптимизация на уровне приложения - оптимизация алгоритмов.

    Выполняется анализ:

  • эффективности использования ППИ;
  • эффективности реализации многопоточности;
  • наличия блокировок;
  • др
  • 3 (самый нижний) уровень анализа – уровень архитектуры. Обладает наименьшим потенциалом эффективности.

    Ключевые факторы:

  • использование кэш-памяти;
  • выравнивание данных;
  • другие вопросы.
  • Наибольший выигрыш (в несколько раз по производительности) достигается на уровне системы.

    Умеренный выигрыш - на уровне приложения.

    Небольшой выигрыш (до нескольких десятков процентов) - на уровне архитектуры процессора.

    При анализе выполнения программы в первую очередь следует обратить внимание на следующие факторы:

  • количество промахов при обращении к кэш-памяти. Каждый промах приводит к дополнительным транзакциям между оперативной памятью и кэш-памятью, что отрицательно сказывается на производительности программы;
  • ошибки в предсказании ветвлений. Предсказание ветвлений позволяет прогнозировать исполнение программы, принимая меры для его ускорения. Чем точнее выполняется предсказание, тем эффективнее исполняется программа;
  • вычисления с плавающей точкой. Значение этого фактора очевидно для вычислительных программ, в которых может выполняться колоссальное количество арифметических операций с плавающей точкой;
  • блокировки, связанные с доступом к ресурсам. Каждая блокировка ведёт к потере производительности;
  • потери производительности, связанные с отсутствием выравнивания данных. Время выполнения команд с невыровненными данными существенно увеличивается, что приводит и к увеличению времени выполнения программы.
  • В Help имеется информация о событиях, по которым возможен сбор статистики.

    Для выполнения анализа приложения VTune потребуются:

  • исполняемый (бинарный) файл, подготовленный соответствующим образом;
  • исходный файл (не обязательно, но желательно, поскольку в этом случае результаты сбора статистики можно "привязать" к исходному коду программы);
  • символьная информация;
  • информация о номерах строк.
  • Необходим правильно подготовленный тестовый набор данных, соответствующий "стандартной" для данного приложения ситуации. Запуск приложения с этим набором данных даёт опорную точку, по которой будет определяться эффективность различных методов оптимизации производительности.

    Общая характеристика Intel® VTuneTM Amplifier

    Intel® VTune Amplifier XE – эксIntel® VTune Performance Analyzer – инструмент динамического анализа приложений.

    Многоплатформенный: MS Windows, Linux.

    Совместимость с : C/C++, Fortran, .NET, ассемблер.

    Интеграция с Microsoft Visual Studio.

    Возможность работы в режиме командной строки (CLI).

    Поддержка автономного интерфейса.

    Входит в состав следующих пакетов:

  • Intel® Parallel Studio XE
  • Intel® Cluster Studio XE
  • Позволяет выполнять анализ следующего вида:

  • анализ "горячих пятен" ("хотспотов");
  • анализ эффективности реализации многопоточности;
  • анализ блокировок и простоев;
  • анализ статистики по событиям.
  • Графический интерфейс:

  • представление результатов различных типов анализа в виде временных диаграмм;
  • привязка к исходному тексту или результатам дизассемблирования.
  • Набор заранее сгенерированных профилей анализа.

    Сбор статистики:

  • по времени (TBS);
  • по заданному количеству событий (например, по заданному количеству ошибочно предсказанных ветвлений, EBS);
  • привязка к исходному коду или дизассемблирование.
  • Некоторые проблемы производительности

    Использование процессора

    Idle – все ядра находятся в состоянии ожидания. Ни один поток не выполняется.

    Poor – доля одновременно работающих ядер < 50%.

    Ok – доля одновременно работающих ядер от 51% до 85%.

    Ideal – доля одновременно работающих ядер > 86%.

    Эффективность многопоточного параллелизма

    Idle – все потоки находятся в состоянии ожидания. Ни один поток не выполняется.

    Poor – низкая эффективность. Доля используемых потоков < 50% от степени параллелизма архитектуры.

    Ok – хорошая эффективность. Доля используемых потоков от 51% до 85% от степени параллелизма архитектуры.

    Ideal – очень хорошая эффективность. Доля используемых потоков от 86% до 115% от степени параллелизма архитектуры.

    Over – избыточная эффективность. Доля используемых потоков > 115% от степени параллелизма архитектуры.

    "Горячие пятна"

    Hotspot – это фрагмент, в котором программа проводит значительную часть времени.

    Hotspots определяются в терминах событий CPU_CLK_UNHALTED.THREAD ("тиков").

    2 вида анализа Intel® VTune Amplifier XE:

  • Hotspots
  • Lightweight hotspots
  • Виды анализа Intel® VTuneTM Amplifier XE

  • Поиск функций, на выполнение которых тратится наибольшее время ("хотспоты", "горячие пятна программы");
  • Поиск фрагментов программы, которые неэффективно используют процессор.
  • Поиск фрагментов программы, в которых следует в первую очередь выполнить оптимизацию последовательного кода.
  • Поиск фрагментов программы, в которых следует в первую очередь выполнить оптимизацию многопоточной реализации.
  • Поиск объектов синхронизации, которые "плохо" влияют на производительность.
  • Поиск неэффективных операций ввода-вывода.
  • Поиск "узких мест", связанных с неэффективным использованием оборудования.
  • Другие.
  • Промахи кэш-памяти

    Промахи увеличивают CPI (Clocks Per Instruction).

    Анализ выполняется в режиме General Exploration.

    Метрики LLC_Hit, LLC_Miss.

    Как уменьшить количество промахов:

  • согласовать размер данных с размером кэша;
  • использовать локальные по отношению к потокам переменные;
  • использовать алгоритм, минимизирующий число обращений к памяти;
  • другие (см. Intel® 64 and IA-32 Architectures Optimization Reference Manual).
  • Конкуренция по доступу к памяти (write sharing)

    Одному ядру нужны данные, модифицированные другим ядром. Инициируется транзакция между кэш-памятью ядра, модифицировавшего данные и ядра, которому эти данные нужны.

    "Пинг-понг" увеличивает время выполнения.

    False sharing – модифицируются разные фрагменты одного набора данных, находящиеся в одной строке кэш-памяти.

    True sharing – модификация одних и тех же данных.

    Выравнивание данных

    Отсутствие выравнивания увеличивает количество транзакций.

    Профиль General Exploration.

    Метрика 4K Aliasing.

    Что делать:

  • использовать выравнивание данных;
  • использовать "правильные" операции доступа к памяти.
  • Ошибки предсказания ветвлений

    Ошибки предсказания ветвлений ухудшают эффективность, так как инициируются дополнительные выборки инструкций.

    Профиль General Exploration.

    Метрика Branch Mispredict.

    Ошибки предсказания ветвлений есть всегда!

    Что делать, чтобы минимизировать число ошибок предсказания ветвлений: использовать при компиляции оптимизацию на основе профилирования.

    Процессоры Intel® Core 2-го поколения поддерживают технологии:

  • hyper-threading;
  • turbo boost.
  • Эти технологии влияют на анализ. Статистика по некоторым событиям собирается по потокам, а по некоторым – по ядрам.

    При анализе приложения часто отключают поддержку (BIOS), затем анализ повторяется при включенной поддержке.

    Вернуться к учебному плану