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