Опубликован: 11.10.2012 | Уровень: специалист | Доступ: платный
Лекция 3:

Intel® Trace Analyzer and Collector

< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Аннотация: Лекция посвящена трассировщику Intel® Trace Collector. Дается общая характеристика 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
< Лекция 2 || Лекция 3: 12 || Лекция 4 >
Евгений Звягин
Евгений Звягин
Россия, Липецк, Липецкий Государственный Технический Университет, 2014
Артур Гибадуллин
Артур Гибадуллин
Россия, Нижневартовск, ФГБОУ ВО НВГУ, Преподаватель