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

Intel® Trace Analyzer and Collector

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

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

Общая характеристика Intel® Trace Analyzer and Collector

Intel® Trace Analyzer and Collector

Intel® Trace Collector

Инструмент трассировки параллельных приложений, использующих технологию Message Passing Interface (MPI), приложений, работающих с общей памятью, а также обычных (не-MPI) приложений. Построен на основе Vampirtrace.

Intel® Trace Analyzer

Инструмент анализа и визуализации результатов трассировки параллельных приложений, использующих технологию Message Passing Interface (MPI). Графический интерфейс. Разнообразные виды анализа и графического представления его результатов.

Многоплатформенность

Microsoft Windows и Linux. Совместимость с конкретной платформой можно проверить на сайте продуктов http://www.intel.com/software/products/cluster

Входят в состав Intel® Cluster Studio XE

Трассировка

Intel® Trace Collector перехватывает вызовы MPI-функций. Для каждой функции MPI имеется своя "обертка" (wrapper), которая позволяет выполнять дополнительные проверки, не предусмотренные в стандартных реализациях MPI

Intel® Trace Collector

Intel® Trace Analyzer and Collector

Трассировка выполняется с помощью инструментовки приложения, то есть внедрения в него обращений к функциям, которые собирают статистику по различным событиям.

Виды инструментовки:

  • бинарная;
  • компиляторная;
  • на уровне исходного кода.
  • При инструментовке на уровне исходного кода используется заголовочный файл VT.h (C/C++) или включаемый файл VT.inc (Fortran).

    При инструментовке любого вида используются библиотеки Intel® Trace Collector.

    Библиотеки Intel® Trace Collector

    Библиотека Назначение
    libVTnull "Заглушка"
    libVT Трассировка MPI-приложений и SHMEM-приложений
    libVTfs Безопасная трассировка MPI-приложений и SHMEM-приложений (результаты трассировки сохраняются даже после аварийного завершения приложения)
    libVTmc Проверка корректности
    libVTcs Трассировка распределенных приложений
    VT_sample Автоматическая трассировка счетчиков с PAPI и getrusage

    Утилиты Intel® Trace Collector

    Утилита Назначение
    stftool Преобразование файлов с результатами трассировки
    xstftool/expandvtlog.pl Преобразование трассировочных файлов в читаемый формат
    itcpin Трассировка бинарных файлов без перекомпиляции

    Сборка исполняемого файла для трассировки MPI-приложения

    Linux

    mpicc app.o -L$VT_LIB_DIR -lVT $VT_ADD_LIBS -o app 
    mpif77 app.o -L$VT_LIB_DIR -lVT $VT_ADD_LIBS -o app

    Microsoft* Windows*

    mpiicc app.obj /link /LIBPATH:%VT_LIB_DIR% VT.lib
    mpiifort app.obj /link /LIBPATH:%VT_LIB_DIR% VT.lib

    Запуск файла для трассировки MPI-приложения

    Задать значения переменных окружения.

    VT_CONFIG путь к каталогу, где находится конфигурационный файл трассировки.

    VT_CONFIG_RANK ранг процесса (относительно MPI_COMM_WORLD), который должен считывать конфигурационный файл трассировки.

    Приложение запускается как обычное MPI-приложение.

    Файл трассировки формируется в памяти и сохраняется на диске после завершения вызова MPI_Finalize. Имя файла <маршрутное имя исполняемого файла>.stf

    Идентификация событий в файле трассировки

    Стандартные коммуникаторы

    COMM_WORLD для MPI_COMM_WORLD 
    COMM_SELF для MPI_COMM_SELF 

    Пользовательские коммуникаторы - имя формируется из префикса и имени "старого" коммуникатора. Для MPI_Comm_create() префикс CREATE Для MPI_Comm_dup() префикс DUP Для MPI_Comm_split() префикс SPLIT Для MPI_Cart_sub() префикс CART_SUB Для MPI_Cart_create() префикс CART_CREATE Для MPI_Graph_create() префикс GRAPH_CREATE Для MPI_Intercomm_merge() префикс MERGE (<oldname 1>/<oldname 2>)

    Аварийное завершение MPI-приложения приводит к потере результатов трассировки, если используется библиотека libVT.

    Аварийное завершение MPI-приложения НЕ приводит к потере результатов трассировки, если используется библиотека libVTfs. В этом случае при аварийном завершении приложения его процессы "замораживаются" до того момента, когда на диске будет сохранен файл трассировки.

    Фиксируются события:

    Сигналы– внутренние (ошибки сегментации, ошибки операций с плавающей точкой) и внешние (SIGINT, SIGTERM). SIGKILL не фиксируется. Преждевременное завершение – один или несколько процессов завершились до вызова MPI_Finalize. Ошибки MPI – ошибки обменов, неправильно заданные параметры функций MPI. Блокировки – фиксируются, если в течение некоторого времени процессы простаивают (находятся в состоянии вызова одной MPI-функции). Время простоя задается с помощью DEADLOCK-TIMEOUT.

    Ошибки параллельного ввода-вывода фиксируются только в среде ОС Linux.

    Intel® Trace Collector позволяет выполнять трассировку односторонних обменов.

    Intel® Trace Collector позволяет выполнять трассировку приложений, работающих с общей памятью.

    Intel® Trace Collector позволяет выполнять трассировку последовательных приложений (библиотека libVTcs). Для трассировки требуются вызовы VT_initialize() и VT_finalize().

    "Фолдинг" (сокрытие информации) позволяет уменьшить количество трассировочной информации.

    Компиляторная инструментовка запускается ключами:

    Компиляторы Intel

    -tcollect  [=библиотека](Linux)

    /Qtcollect  [=библиотека] (Windows)

    Компиляторы GCC

    -finstrument-function (Linux)

    Бинарная инструментовка

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

    itcpin [<ключи ITC>] -- <командная строка запуска
    приложения>

    Если ключи не указаны, утилита выполняет проверку возможности инструментовки файла и определение способа такой инструментовки.

    Ключ --list позволяет определить функции в исполняемом файле. Результат записывается в формате:

    <имя бинарного файла>:<имя исходного файла>:<имя
    функции>

    Трассировка

    Ключ --run запускает приложение в режиме сбора статистики. По умолчанию, если в исполняемом файле содержатся вызовы MPI-функций, подключается библиотека libVT.

    Ключ --insert используется для подключения определенной библиотеки.

    На всех вычислительных узлах Collector должен быть установлен в каталогах с одинаковым маршрутным именем.

    Ключ --profile используется для профилирования функций.

    Сбор статистики в "облегченном" режиме

    Установка переменных окружения

    VT_STATISTICS=ON 
    VT_PROCESS=OFF

    позволяет собирать статистику в "облегченном" режиме.

    Статистика сохраняется в STF-файле.

    Каждая строка содержит:

  • Поток или процесс.
  • Функция.
  • Получатель сообщения.
  • Размер сообщения.
  • Количество процессов.
  • Собирается следующая статистика:

  • Количество обменов.
  • Минимальное время выполнения, исключая время вызываемых функций.
  • Максимальное время выполнения, исключая время вызываемых функций.
  • Суммарное время выполнения, исключая время вызываемых функций.
  • Минимальное время выполнения, включая время вызываемых функций.
  • Максимальное время выполнения, включая время вызываемых функций.
  • Суммарное время выполнения, включая время вызываемых функций.
  • В поле получателя сообщения записывается:

  • 0xffffffff для операций с файлами;
  • 0xfffffffe для коллективных операций.
  • В поле "Сообщение" записывается:

  • 0xffffffff для операций, не связанных с пересылкой сообщений (например, не функция MPI, MPI_Comm_rank и т.д.);
  • В поле "Количество процессов-участников" записывается отрицательное значение, если сообщение принимается.

    Функция Записывается при сборе статистики
    MPI_Barrier 0
    MPI_Bcast Число рассылаемых байтов
    MPI_Gather Число отправленных байтов
    MPI_Gatherv Число отправленных байтов
    MPI_Scatter Число полученных байтов
    MPI_Scatterv Число полученных байтов
    MPI_Allgather Число отправленных+полученных байтов
    MPI_Allgatherv Число отправленных+полученных байтов
    MPI_Alltoall Число отправленных+полученных байтов
    MPI_Alltoallv Число отправленных+полученных байтов
    MPI_Reduce Число отправленных байтов
    MPI_Allreduce Число отправленных+полученных байтов
    MPI_Reduce_Scatter Число отправленных+полученных байтов
    MPI_Scan Число отправленных+полученных байтов

    Сбор статистики с привязкой к исходному коду

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

    mpicc -g -c app.c 
    mpif77 -g -c app.f

    Перед запуском программы следует установить значение переменной окружения VT_PCTRACE равным целому положительному числу (например, 5). Другой способ – указать параметры трассировки в конфигурационном файле:

    # trace 4 call levels whenever MPI is used 
    ACTIVITY MPI 4 
    # trace one call level in all routines not mentioned 
    # explicitly; could also be for example, PCTRACE 5 
    PCTRACE ON

    Счетчики

    Сбор данных о производительности процессора

    PAPI (Performance Application Programming Interface) – интерфейс, позволяющий собирать статистику с аппаратных счетчиков и системную статистику.

    Поддержка PAPI реализована поверх ITC – в файле VT_sample.c.

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

    COUNTER <имя счетчика> ON

    В имени счетчика допускается использование метасимвола *.

    Системные счетчики (список неполон)

    Название счетчика Единицы измерения Собираемая информация
    RU_UTIME Сек. Время в режиме задачи
    RU_STIME Сек. Время в режиме ядра
    RU_MAXRSS Байты Максимальный размер резидентной части
    RU_IXRSS Байты Суммарный размер разделяемой памяти
    RU_MAJFLT # Ошибки страниц
    RU_NSWAP # Выгрузки
    RU_INBLOCK # Блочные операции ввода
    RU_OUBLOCK # Блочные операции вывода
    RU_MSGSND # Отправленные сообщения
    RU_MSGRCV # Полученные сообщения
    RU_NSIGNALS # Полученные сигналы

    Системные счетчики (локальные, для узла)

    Название счетчика Единицы измерения Собираемая информация
    disk_io кб/сек Ввод-вывод на диск
    net_io кб/сек Сетевой ввод-вывод (не включает транспортный уровень MPI)
    cpu_ . . . % Средняя доля процессорного времени всех процессоров, проведенного в . . .
    cpu_idle % . . . режиме простоя
    cpu_sys % . . . режиме ядра
    cpu_usr % . . . режиме задачи

    "Заглушки"

    Заглушка – библиотека VTnull.

    Проверка корректности

    Проверка корректности включает:

  • проверку переносимости;
  • проверку нарушений стандарта MPI, не приводящие к немедленным фатальным      последствиям,  но проявляющиеся при переходе на другие платформы или к другим реализациям  MPI;
  • проверку ошибок в среде исполнения.
  • Проверка корректности реализована в библиотеке libVTmc. По умолчанию результаты проверки корректности не фиксируются. Включить запись можно установкой флага CHECK-TRACING в файле конфигурации.

    03_01.jpg Проверка корректности требует дополнительных ресурсов! Проверка корректности реализована только для Intel® MPI Library!

    Как это делается:

    1 вариант. При запуске использовать переменную окружения LD_PRELOAD (только Linux):

    mpiexec -genv LD_PRELOAD libVTmc.so -n ...

    2 вариант. Бинарная инструментовка.

    3 вариант. Пересборка приложения.

    4 вариант. Использование  ключа –check для mpiexec (только Intel® MPI).

    Для того, чтобы добавить результат в трассировочный файл

    Установить значение переменной окружения При запуске использовать переменную окружения VT_CHECK_TRACING, например:

    mpiexec -genv LD_PRELOAD libVTmc.so -genv VT_CHECK_TRACING on -n ...

    Сигнатуры ошибок

    Локальные ошибки

    Сигнатура Описание
    LOCAL:EXIT:SIGNAL Процесс остановлен "фатальным" сигналом
    LOCAL:EXIT:BEFORE_MPI_FINALIZE Процесс завершен без вызова MPI_Finalize()
    LOCAL:MEMORY:OVERLAP Несколько операций MPI используют одну область памяти
    LOCAL:MEMORY:ILLEGAL_MODIFICATION Некорректная модификация данных
    LOCAL:MEMORY:INACCESSIBLE Буфер недоступен
    LOCAL:MEMORY:ILLEGAL_ACCESS Некорректный доступ к памяти, уже используемой MPI
    LOCAL:MEMORY:INITIALIZATION Проверка распределенной памяти
    LOCAL:REQUEST:ILLEGAL_CALL Неправильная последовательность вызовов
    LOCAL:REQUEST:NOT_FREED Неправильная последовательность вызовов
    LOCAL:BUFFER:INSUFFICIENT_BUFFER Недостаточно памяти для буферизованной отправки сообщения

    Глобальные ошибки

    Сигнатура ошибки Описание
    GLOBAL:MSG/COLLECTIVE:DATATYPE:MISMATCH Несогласованность типов
    GLOBAL:MSG/COLLECTIVE:DATA_TRANSMISSION_CORRUPTED Модификация данных во время передачи
    GLOBAL:MSG:PENDING Завершение программы до приема всех сообщений
    GLOBAL:DEADLOCK:HARD Цикл процессов, ожидающих друг друга
    GLOBAL:DEADLOCK:NO_PROGRESS Возможна блокировка
    GLOBAL:COLLECTIVE:OPERATION_MISMATCH Процессы участвуют в разных коллективных операция
    GLOBAL:COLLECTIVE:REDUCTION_OPERATION_MISMATCH Данных больше или меньше, чем должно быть
    GLOBAL:COLLECTIVE:SIZE_MISMATCH Ошибка в операции приведения
    GLOBAL:COLLECTIVE:INVALID_PARAMETER Неправильные параметры коллективной операции

    Инструментовка, определенная пользователем

    Intel® Trace Collector позволяет пользователю описать процесс трассировки. Инструментовка выполняется на уровне исходного кода.

    Заголовочный файл VT.h для программ на C/C++. Включаемый файл VT.inc для программ на Fortran.

    Минимальный набор функций:

  • VT_initialize() – инициализация;
  • VT_getrank() – ID процесса;
  • VT_finalize() – завершение.
  • Некоторые возможности пользовательской инструментовки:

  • Инициализация, управление, завершение.
  • Определение и запись положения в исходном тексте.
  • Определение и запись функций и регионов.
  • Определение изменения состояния.
  • Определение и запись перекрытия областей видимости.
  • Определение групп процессов.
  • Определение и запись счетчиков.
  • Определение событий коммуникации.
  • Вернуться к учебному плану