Почніть роботу з Intel Trace Analyzer і Collector
Почніть роботу з Intel® Trace Analyzer і Collector
Використовуйте цей документ «Початок роботи» та попередньо зібрану трасування file щоб пройти базовий аналіз продуктивності MPI за допомогою Intel® Trace Analyzer і Collector.
Intel Trace Analyzer and Collector допомагає досліджувати ефективність використання інтерфейсу передачі повідомлень (MPI) і визначати гарячі точки зв’язку, вузькі місця синхронізації та балансування навантаження. Додаткову інформацію про продукт див. на сторінці продукту Intel Trace Analyzer and Collector.
Завантажте Intel Trace Analyzer і Collector
- як частина Intel® oneAPI HPC Toolkit
- як окремий інструмент
передумови
- Перш ніж запускати Intel Trace Analyzer і Collector, переконайтеся, що ви інсталювали останню версію бібліотеки Intel® MPI і компілятор Intel® oneAPI DPC++/C++ або компілятор Intel® Fortran.
- Це встановлює необхідні змінні середовища для компіляторів, бібліотеки Intel MPI, аналізатора і збирача трасування Intel, і ви готові відстежувати свої програми.
- Для отримання додаткової інформації див. Системні вимоги Intel® oneAPI HPC Toolkit.
Зрозумійте робочий процес
- Відстежте свою заявку
- Проаналізуйте найбільш активні функції MPI
- Визначте проблемні взаємодії
- Покращте продуктивність програми, замінивши функцію, яка викликає проблеми
Відстежте свою програму MPI
Згенерувати трасування file для збору журналів подій для наступного аналізу поведінки програми.
- Налаштуйте середовище для запуску Intel® Trace Analyzer і Collector, запустивши сценарій setvars із директорії встановлення oneAPI
ПРИМІТКА
За замовчуванням Intel Trace Analyzer і 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
Цей колишнійample створює трасування (stf*) для asample poisson_sendrcv.одна програма MPI - Відкрийте згенерований .stf file з Intel Trace Analyzer з Intel Trace Analyzer і Collector.
У Linux:
$ traceanalyzer ./ poisson_sendrecv.single.stf
У Windows:
traceanalyzer poisson_sendrecv.single.stf
ПРИМІТКА
З метою тестування ви можете завантажити попередньо зібрану трасування file poisson_sendrecv.single.stf для пуассона, який використовується в цьому документі, і відкрийте його за допомогою Intel Trace Analyzer і Collector.
.stf file відкривається на сторінці підсумку view, який представляє загальну інформацію про продуктивність вашої програми:ПРИМІТКА Щоб отримати додаткові відомості про функції Intel Trace Analyzer і Collector, див. Докладніше.
Проаналізуйте найактивніші функції MPI
Проаналізуйте поведінку програми MPI, знайдіть вузькі місця та визначте серіалізацію, щоб знайти шляхи покращення продуктивності програми.
- На сторінці підсумків відкрийте часову шкалу події view натиснувши «Продовжити» > «Діаграми» > «Хронологія подій» для глибокого аналізу найпопулярніших функцій MPI.
На діаграмі відображаються дії окремих процесів у часі.
Робота програми є ітераційною, де кожна ітерація складається з обчислювальної частини та зв’язку MPI. - Визначте одну ітерацію, на якій потрібно зосередитися, і збільште її, перетягнувши курсор миші на потрібний інтервал часу:
Слід view показує розділ у межах трасування, який ви вибрали. Графік часової шкали подій показує події, які були активними під час вибраної ітерації.
- Горизонтальні смуги представляють процеси з функціями, які викликаються в цих процесах.
- Чорні лінії позначають повідомлення, що надсилаються між процесами. Ці лінії з’єднують процеси надсилання та отримання.
- Сині лінії представляють колективні операції, такі як трансляція або скорочення.
- Перейдіть на Flat Profile вкладка (A), щоб ближче розглянути функції, які виконуються в момент часу, який ви вибрали на часовій шкалі події.
- Розгрупуйте функції MPI, щоб проаналізувати активність процесу MPI у вашій програмі.
Для цього клацніть правою кнопкою миші Усі процеси > Група MPI (B) у Flat Profile і виберіть UngroupMPI. Ця операція відкриває окремі виклики MPI. - Проаналізуйте процеси, які спілкуються зі своїми прямими сусідами за допомогою MPI_Sendrecv на початку ітерації. наприкладampле:
- a. У сample, обмін даними MPI_Sendrecv має вузьке місце: процес не обмінюється даними зі своїм наступним сусідом, доки не завершиться обмін з попереднім. Хронологія подій view відображає це вузьке місце як сходи.
- b. MPI_Allreduce наприкінці ітерації повторно синхронізує всі процеси; тому цей блок має вигляд зворотних сходів.
- Визначте серіалізацію за допомогою функції Profile і Message Profile views.
- a. Одночасно відкрийте діаграми:
У функції Profile діаграми, відкрийте вкладку «Баланс навантаження». - Перейдіть до меню «Діаграми», щоб відкрити Message Profile.
- b. На вкладці «Баланс навантаження» розгорніть MPI_Sendrecv і MPI_Allreduce. Балансування навантаження вказує на те, що час, витрачений на MPI_Sendrecv, збільшується разом із номером процесу, тоді як час на MPI_Allreduce зменшується.
- в. Вивчіть Message Profile Діаграму вниз до нижнього правого кута.
Кольорове кодування блоків вказує на те, що повідомлення, що переміщуються від вищого рангу до нижчого рангу, потребують пропорційно більше часу, тоді як повідомлення, що переміщуються від нижчого рангу до вищого рангу, виявляють слабку модель парно-непарного типу:
- a. Одночасно відкрийте діаграми:
Результати порівняльного аналізу показують, що в додатку немає складних схем обміну, обмін здійснюється лише з сусідніми процесами. Ця інформація буде необхідною для кроку покращення продуктивності вашої програми шляхом зміни комунікацій, щоб оптимізувати модель зв’язку програми.
Визначте дисбаланс комунікацій
Перегляньте свою програму в ідеальних умовах і порівняйте оригінальну трасу file з ідеалізованим, щоб ізолювати проблемні взаємодії.
- Створіть ідеалізований file:
- a. Виберіть Додатково > Ідеалізація або клацніть
Кнопка панелі інструментів (Ідеалізація).
- b. Перевірте параметри ідеалізації в діалоговому вікні Ідеалізація (ідеальна траса file назва та діапазон часу для перетворення).
- в. Натисніть «Пуск», щоб ідеалізувати трасування.
- a. Виберіть Додатково > Ідеалізація або клацніть
- Порівняйте вихідний слід з ідеалізованим слідом:
- a. Виберіть Додатково > Діаграма дисбалансу або клацніть
Кнопка на панелі інструментів (діаграма дисбалансу).
- b. У діалоговому вікні «Діаграма дисбалансу» клацніть «Відкрити інший». File кнопку, перейдіть до ідеалізованої траси та виберіть її.
- в. У вікні «Діаграма дисбалансу» натисніть кнопку «Загальний режим» і виберіть «Режим розбивки».
- a. Виберіть Додатково > Діаграма дисбалансу або клацніть
Ви бачите, що функція MPI_Sendrecv займає найбільше часу. Маса дисбалансу відображається в
світлого кольору і становить близько 10% для функції MPI_Sendrecv. Це час, який процеси витрачають на очікування один одного.
Покращте продуктивність своєї програми, змінивши комунікації
- Покращте продуктивність програми MPI, змінивши блокування зв’язку на неблокуючий.
У вашому коді замініть послідовний MPI_Sendrcv на неблокуючий зв’язок: MPI_Isend і MPI_Irecv. наприкладample: оригінальний фрагмент коду:
// межовий обмін
void exchange(para* p, grid* gr){
int i,j;
MPI_Status status_100, status_200, status_300, status_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
if(gr->left != 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); }
if(gr->left != 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 req[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, req, 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 або її дочірніх компаній. Інші назви та бренди можуть бути визнані власністю інших.
- Цей документ не надає жодної ліцензії (явної чи неявної, судової або іншої) на будь-які права інтелектуальної власності.
- Описані продукти можуть містити конструктивні дефекти або помилки, відомі як помилки, які можуть спричинити відхилення продукту від опублікованих специфікацій. Поточні характеристики помилок доступні за запитом.
- Intel відмовляється від усіх явних і непрямих гарантій, включаючи, без обмежень, непрямі гарантії придатності для продажу, придатності для певної мети та непорушення прав, а також будь-які гарантії, що випливають із ходу роботи, поведінки чи використання в торгівлі.
Документи / Ресурси
![]() |
intel Початок роботи з Intel Trace Analyzer і Collector [pdfПосібник користувача Початок роботи з Intel Trace Analyzer і Collector, Початок роботи з Intel, Trace Analyzer і Collector, Collector |