Начните работу с Intel Trace Analyzer и Collector
Начните работу с Intel® Trace Analyzer and Collector
Используйте этот документ «Начало работы» и предварительно собранную трассировку. file пройти базовый анализ производительности MPI с помощью Intel® Trace Analyzer and Collector.
Intel Trace Analyzer and Collector помогает исследовать эффективность использования интерфейса передачи сообщений (MPI) и выявлять точки доступа, узкие места синхронизации и балансировку нагрузки. Дополнительные сведения о продукте см. на странице продукта Intel Trace Analyzer and Collector.
Скачать Intel Trace Analyzer and Collector
- как часть набора инструментов Intel® oneAPI HPC
- как самостоятельный инструмент
Предпосылки
- Перед запуском Intel Trace Analyzer and Collector убедитесь, что установлена последняя версия библиотеки Intel® MPI и компилятор Intel® oneAPI DPC++/C++ или компилятор Intel® Fortran.
- Это устанавливает необходимые переменные среды для компиляторов, библиотеки Intel MPI и Intel Trace Analyzer and Collector, и вы готовы к трассировке своих приложений.
- Для получения дополнительной информации см. Системные требования Intel® oneAPI HPC Toolkit.
Понимание рабочего процесса
- Отследите свое приложение
- Анализировать наиболее активные функции MPI
- Выявление проблемных взаимодействий
- Повысьте производительность вашего приложения, заменив вызывающую проблемы функцию
Отследите свое приложение MPI
Создать трассировку file для сбора журналов событий для последующего анализа поведения приложения.
- Настройте среду для запуска Intel® Trace Analyzer and Collector, запустив сценарий setvars из каталога установки oneAPI.
ПРИМЕЧАНИЕ
По умолчанию Intel Trace Analyzer and Collector устанавливается в папку /opt/intel/oneapi/itac для ОС Linux* и в программу Files (x86)\Intel\oneAPI\itac\latest для ОС Windows*.
В Linux:
$ источник /opt/intel/oneapi/setvars.sh
В Windows:
«C:\Программа Files (x86)\Intel\oneAPI\setvars.bat» - Запустите приложение MPI и сгенерируйте трассировку с параметром -trace.
В Linux:
$ mpirun -trace -n 4 ./poisson_sendrecv.single
В Windows:
Скомпилируйте приложение и соберите трассировку.
Для компилятора Intel oneAPI DPC++/C++ выполните:
> mpiicc -trace poisson_sendrecv.single.c
Для компилятора Intel Fortran выполните:
> mpiifort -trace poisson_sendrecv.single.f
Этот бывшийampФайл генерирует трассировку (stf*) для asample poisson_sendrcv.single приложение MPI - Откройте сгенерированный .stf file с помощью Intel Trace Analyzer с Intel Trace Analyzer и Collector.
В Linux:
$traceanalyzer./poisson_sendrecv.single.stf
В Windows:
трассировщик poisson_sendrecv.single.stf
ПРИМЕЧАНИЕ
В целях тестирования вы можете скачать предварительно собранную трассировку file poisson_sendrecv.single.stf для алгоритма, используемого в этом документе, и откройте его с помощью Intel Trace Analyzer and Collector.
.stf file открывается на странице сводки view, который представляет общую информацию о производительности вашего приложения:ПРИМЕЧАНИЕ Дополнительные сведения о функциях Intel Trace Analyzer и Collector см. в разделе Дополнительные сведения.
Анализировать наиболее активные функции MPI
Проанализируйте поведение приложения MPI, найдите узкие места и определите сериализацию, чтобы найти способы повысить производительность приложения.
- На странице сводки откройте временную шкалу событий. view щелкнув «Продолжить» > «Графики» > «Временная шкала событий» для глубокого анализа основных функций MPI.
На диаграмме отображаются отдельные действия процесса с течением времени.
Работа приложения является итеративной, где каждая итерация состоит из вычислительной части и связи MPI. - Определите одну итерацию, на которой нужно сосредоточиться, и увеличьте ее масштаб, перетащив указатель мыши через требуемый интервал времени:
След view показывает раздел выбранной вами трассы. На диаграмме временной шкалы событий показаны события, которые были активны во время выбранной итерации.
- Горизонтальные полосы представляют процессы с функциями, вызываемыми в этих процессах.
- Черные линии обозначают сообщения, отправленные между процессами. Эти линии соединяют отправляющий и принимающий процессы.
- Синие линии обозначают коллективные операции, такие как операции широковещательной передачи или сокращения.
- Переключиться на Flat Profile вкладку (A), чтобы более подробно ознакомиться с функциями, выполняемыми в момент времени, который вы ( выбрали на временной шкале событий.
- Разгруппируйте функции MPI, чтобы проанализировать активность процесса MPI в вашем приложении.
Для этого щелкните правой кнопкой мыши All Processes > Group MPI ( B) в окне Flat Pro.file и выберите UngroupMPI. Эта операция раскрывает отдельные вызовы MPI. - Проанализируйте процессы, взаимодействующие со своими непосредственными соседями, используя MPI_Sendrecv в начале итерации. Для бывшегоampль:
- а. В сample обмен данными MPI_Sendrecv имеет узкое место: процесс не обменивается данными со своим следующим соседом, пока обмен с предыдущим не завершится. Хронология событий view отображает это узкое место в виде лестницы.
- б. MPI_Allreduce в конце итерации повторно синхронизирует все процессы; поэтому этот блок имеет вид обратной лестницы.
- Определение сериализации с помощью Function Profile и Сообщение Проfile views.
- а. Одновременно откройте графики:
В функции Profile график, откройте вкладку Балансировка нагрузки. - Перейдите в меню Charts, чтобы открыть Message Pro.file.
- б. На вкладке Балансировка нагрузки разверните MPI_Sendrecv и MPI_Allreduce. Балансировка нагрузки показывает, что время, затрачиваемое на MPI_Sendrecv, увеличивается с увеличением номера процесса, а время на MPI_Allreduce уменьшается.
- в. Изучите сообщение Profile Диаграмма вниз к правому нижнему углу.
Цветовое кодирование блоков указывает на то, что сообщения, перемещающиеся с более высокого ранга на более низкий, требуют пропорционально большего времени, в то время как сообщения, перемещающиеся с более низкого ранга на более высокий, демонстрируют слабый четно-нечетный шаблон:
- а. Одновременно откройте графики:
Результаты сравнительного анализа показывают, что в приложении нет сложных схем обмена, обмен осуществляется только с соседними процессами. Эта информация будет необходима для повышения производительности вашего приложения путем изменения связи, чтобы оптимизировать модель связи приложения.
Выявление несбалансированных коммуникаций
Наблюдайте за своим приложением в идеальных условиях и сравнивайте исходную трассировку file с идеализированным, чтобы изолировать проблемные взаимодействия.
- Создайте идеализированный file:
- а. Выберите «Дополнительно» > «Идеализация» или щелкните значок
Кнопка панели инструментов (Идеализация).
- б. Проверьте параметры идеализации в диалоговом окне Idealization (идеальная трасса). file имя и временной диапазон конверсии).
- в. Нажмите Start, чтобы идеализировать вашу трассировку.
- а. Выберите «Дополнительно» > «Идеализация» или щелкните значок
- Сравните исходную трассу с идеализированной трассой:
- а. Выберите «Дополнительно» > «Диаграмма дисбаланса» или нажмите кнопку
(Диаграмма дисбаланса) на панели инструментов.
- б. В диалоговом окне "Диаграмма дисбаланса" нажмите кнопку "Открыть другую". File , перейдите к идеализированной трассе и выберите ее.
- в. В окне Imbalance Diagram нажмите кнопку Total Mode и выберите Breakdown Mode.
- а. Выберите «Дополнительно» > «Диаграмма дисбаланса» или нажмите кнопку
Вы можете видеть, что MPI_Sendrecv — самая трудоемкая функция. Вес дисбаланса отображается в
светлого цвета и составляет около 10% для функции MPI_Sendrecv. Это время, которое процессы тратят на ожидание друг друга.
Улучшите производительность вашего приложения, изменив коммуникации
- Улучшите производительность приложения MPI, заменив блокировку на неблокирующую связь.
В вашем коде замените последовательный MPI_Sendrcv на неблокирующую связь: MPI_Isend и MPI_Irecv. Для бывшегоample: Исходный фрагмент кода:
// граничный обмен
недействительный обмен (пара* р, сетка * гр) {
int i, j;
MPI_Status статус_100, статус_200, статус_300, статус_400;
// отправляем первую строку
MPI_Send(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD); MPI_Recv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD,
&статус_100);
// отправляем последнюю строку вверх
MPI_Send(gr->x_new[gr->lrow], gr->lcol+2, MPI_DOUBLE, gr->up, 200, MPI_COMM_WORLD);
MPI_Recv(gr->x_new[0], gr->lcol+2, MPI_DOUBLE, gr->down, 200, MPI_COMM_WORLD, &status_200);
Используйте сравнение Intel Trace Analyzer view сравнить сериализованное приложение с исправленным
// копируем левый столбец в массивы tmp
если (гр-> слева! = MPI_PROC_NULL) {
gr->x_new[i][gr->lcol+1] = right_col[i]; right_col[i] = gr->x_new[i][gr->lcol];
// отправить правильно
MPI_Send(right_col, gr->lrow+2, MPI_DOUBLE, gr->right, 400, MPI_COMM_WORLD); }
если (гр-> слева != MPI_PROC_NULL)
{
MPI_Recv(left_col, gr->lrow+2, MPI_DOUBLE, gr->left, 400, MPI_COMM_WORLD,&status_400); for(i=0; i< gr->lrow+2; i++
{
gr->x_new[i][0] = left_col[i];
}
}
Обновленный фрагмент кода
Запрос MPI_Request[7];
// отправляем первую строку
MPI_Isend(gr->x_new[1], gr->lcol+2, MPI_DOUBLE, gr->down, 100, MPI_COMM_WORLD, &req[0]);
MPI_Irecv(gr->x_new[gr->lrow+1], gr->lcol+2, MPI_DOUBLE, gr->up, 100, MPI_COMM_WORLD, &req[1]);
…..
MPI_Waitall(7, требуется, MPI_STATUSES_IGNORE);
После исправления единственная итерация исправленного приложения будет выглядеть следующим образом:ampль: - Используйте сравнение Intel Trace Analyzer view сравнить сериализованное приложение с исправленным. Сравните две трассы с помощью сравнения View, собирается View > Сравните. Сравнение View похоже на:
В сравнении View, вы можете видеть, что использование неблокирующего взаимодействия помогает убрать сериализацию и сократить время взаимодействия процессов.
ПРИМЕЧАНИЕ Дополнительные сведения о производительности вашего приложения на уровне узлов см. в документации по соответствующим инструментам: Intel® VTune™ Profiler Анализ кода MPI и анализ приложений Intel® MPI с помощью Intel® Advisor.
Узнать больше
Изучите следующие ресурсы для получения дополнительной информации об Intel Trace Analyzer и Collector.
Уведомления и отказ от ответственности
- Для технологий Intel может потребоваться активированное оборудование, программное обеспечение или сервис.
- Ни один продукт или компонент не может быть абсолютно безопасным.
- Ваши затраты и результаты могут отличаться.
- © Корпорация Intel. Intel, логотип Intel и другие товарные знаки Intel являются товарными знаками корпорации Intel или ее дочерних компаний. Другие имена и торговые марки могут быть заявлены как собственность других лиц.
- Настоящий документ не предоставляет никакой лицензии (явной или подразумеваемой, посредством лишения права возражения или иным образом) на какие-либо права интеллектуальной собственности.
- Описанные продукты могут содержать дефекты конструкции или ошибки, известные как errata, которые могут привести к отклонению продукта от опубликованных спецификаций. Текущие охарактеризованные errata доступны по запросу.
- Intel отказывается от всех явных и подразумеваемых гарантий, включая, помимо прочего, подразумеваемые гарантии товарного состояния, пригодности для определенной цели и ненарушения прав, а также любые гарантии, вытекающие из хода работы, делового оборота или использования в торговле.
Документы/Ресурсы
![]() |
Intel Начало работы с Intel Trace Analyzer and Collector [pdf] Руководство пользователя Начало работы с Intel Trace Analyzer and Collector, Начало работы с Intel, Trace Analyzer and Collector, Collector |