Яке програмне забезпечення добре використовувати для паралельної налагодження?


24

Зараз я не виконую жодного паралельного коду, але передбачаю, що в майбутньому запускається паралельний код, використовуючи гібрид OpenMP та MPI. Налагоджувачі були для мене безцінним інструментом при запуску серійних проектів.

Чи може хтось порекомендувати паралельний налагоджувач (або декілька налагоджувачів) використовувати для налагодження паралельного програмного забезпечення? Вільне програмне забезпечення було б кращим, але не соромтеся згадати ефективне комерційне програмне забезпечення.


Я не бачу, як відповіді тут істотно відрізнятимуться від stackoverflow.com/questions/329259/… . MPI - це важка частина, а не OpenMP. У будь-якому випадку, налагодження перегонових умов у потокових програмах є межею нерозв’язною зараз.
Джефф

ThreadSanitizer - це гарне рішення для налагодження перегонових умов у потокових програмах, хоча я не знаю нікого, хто намагався додати MPI до суміші!
мабрахам

Відповіді:


17

В основному є два основних комерційні варіанти: DDT від Allinea (який ми використовуємо в TACC ) і Totalview (про що йдеться в іншому коментарі). Вони мають порівнянні риси, і активно розвиваються, і є прямими конкурентами.

Eclipse має свою платформу Parallel Tools , яка повинна включати підтримку програмування MPI та OpenMP та паралельний відладчик.


Я ніколи не чув, щоб хтось використовував паралельний налагоджувач PTP. Я не впевнений, що це означає ...
Джефф

У мене є кілька колег, які пробували, але я ніколи сам з цим не грав.
Білл Барт

16

Я мушу дати відповідь курчуму. Моя продуктивність ніколи не була поліпшена жодною з вищенаведених пропозицій. Вони повільні та дорогі порівняно з моїм кращим паралельним варіантом: один сеанс gdb за процес. Кожен gdb може підключитися до процесу MPI і сидіти в xterm (це відбувається автоматично в PETSc за допомогою -start_in_debugger). Я цим користуюся 15 років, щасливо. Заперечення:

1) Я не можу дивитись на глобальні дані

Оскільки MPI - модель, що не має спільного доступу, немає глобальних даних, лише локальних даних

2) Ця стратегія не охоплює безліч процесів

Ні клопи не роблять. Помилки трапляються за окремими процесами, можливо, за допомогою 1 або 2 сусідів. Ви можете легко породжувати gdb лише у процесах, що беруть участь (наприклад, у PETSc, який ви використовуєте -debugger_nodes 0,5,17). Крім того, вищезгадані системи дуже багато відмовляються від запуску кожного процесу, що робить їх повільними. Насправді метод gdb набагато масштабніший.

gdb також дуже портативний. Він працює скрізь, розуміє C ++ та Fortran і дозволяє виконувати довільний код всередині пробігу. Я написав спеціальні функції, щоб легко відображати дані під час роботи в ньому.


4
Гей, боягуз, якщо ви зголосилися, залиште коментар.
Метт Кнеплі

5
Я не був протилежним, але я певною мірою не згоден. Я стикався з декількома помилками в масштабі, які не відображалися при невеликих розмірах, а використання паралельного налагоджувача було ефективним способом їх пошуку. Більшу частину налагодження я роблю з printf і приєднуються до окремих процесів за допомогою gdb, але я бачив вигоду від паралельного налагодження.
Білл Барт

3
Єдиний раз, коли я коли-небудь стикався з помилками в масштабі, - це помилка продуктивності через неправильний алгоритм колективної комунікації. Знову ж таки, мій погляд є ще більш екстремальним, ніж у Метта, оскільки найближчим моментом до налагоджувача, який я коли-небудь користуюся, є вальгринд.
Джек Поульсон

1
@BillBarth Я знаю, що ти маєш рацію, що помилки існують на 1000 процесах, які не виявляються при менших проблемах (у Дінеша був відомий той PETSc, який тривав місяцями, і виявився лише на 82 документах). Моя думка була більше протидіяти пануючій мудрості. Я думаю, що паралельні налагоджувачі - це найкращий край, а не перший варіант.
Метт Кнеплі

3
Я прихильнив тебе. Ваша відповідь не те, що запитали.
aterrel

5

Я використовую лише два налагоджувачі для послідовних і паралельних програм:

  1. Налагоджувач Керніган, тобто розумні друковані висловлювання та ретельне мислення.
  2. Кілька примірників GDB, як описано o http://www.open-mpi.org/faq/?category=debugging#serial-debuggers .

У випадку, коли (2) недостатньо масштабований, я посилаюся на (1b).


1
Я ніколи не чув назви «Керніганський налагоджувач», але схвалюю, оскільки це завжди я налагоджую.
Джек Поульсон

4

Є Intel Parallel Studio, який включає паралельний налагоджувач. Я ніколи не працював з цим, але бачив, як він використовувався в кількох демонстраціях. Ось відеоурок, який показує деякі особливості.

Я також бачив декілька обгортків навколо gdb, які працювали досить добре в певних випадках.


3

Totalview . Це комерційний налагоджувач. Дуже легко переглядати стек на кожному процесорі. Ви можете бачити змінні значення (та змінювати їх) у процесорах / потоках. Ви можете побудувати графіки векторів або матриць для візуалізації змінних значень. Мабуть, сценарій також можливий (Tk / Tcl) для складного аналізу точок спостереження, хоча я ніколи з цим сам не працював.


З суб'єктивної сторони, коли Центр HPC мого університету встановив це, я подумав, що це надмірно. Тоді я дізнався, як легко зробити дуже складну налагодження. Це дійсно чудова програма.
Янв

Я також другий тотальний перегляд теж. Я використовував його в багатьох випадках, і він надзвичайно потужний, хоча і дуже дорогий ...
BlaB


1

Цікаво, чому ніхто не згадав Padb (Parallel Application Debugger), який є відкритим кодом та вільним програмним забезпеченням, як воліє ОП, але не настільки потужний, як комерційні аналоги, наприклад: TotalView для HPC


-1

Ось дайджест деяких відповідей, даних мені раніше:

OpenMP має функції синхронізації: omp_get_wtime()та omp_get_wtick()- онлайн-документи

У Google є профілер процесора

Існує Scalasca, яка робить OpenMP та MPI-профіль та аналіз

Тоді є Тау і vtune, якими я не користувався.

Удачі!


Я не думаю, що питання стосується часу, але я можу помилитися. Хороші пропозиції, хоча ...
Янв

Ця відповідь стосується більше профілювання, ніж налагодження ...
mbq

I have found that profiling tools make good substitutes for parallel debuggers. I find it often the case that parallel bugs are related to performance problems, such as logjam in MPI. Performance tools will often reveal this. TAU's memory profiler is good for figuring out why random segfaults may occur.
Jeff
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.