1 / 27

Средства профилирования и сбора трасс параллельных программ

Средства профилирования и сбора трасс параллельных программ. Глазкова Е. А., 520 гр. Научный руководитель: Попова Н. Н. Профилирование. Профилирование – это создание таблиц, которые обобщают поведение программы. inclusive, exclusive time , # calls, hardware statistics….

charla
Download Presentation

Средства профилирования и сбора трасс параллельных программ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Средства профилирования и сбора трасс параллельных программ Глазкова Е. А., 520 гр. Научный руководитель: Попова Н. Н.

  2. Профилирование • Профилирование – это создание таблиц, которые обобщают поведение программы. • inclusive, exclusive time, # calls, hardware statistics… • Отслеживает функции, циклы, другие базовые блоки и сущности, определенные пользователем

  3. Профилирование • Имеет низкие накладные расходы (по сравнению с трассировкой), позволяет найти «узкие места»в программе • Реализуется через: • Sampling – периодические прерывания ОС или прерывания по значению аппаратных счетчиков • Instrumentation – вставка в программу кода, измеряющего производительность

  4. Трассировка • Трассировка подразумевает запись потока событий: • вход/выход в участок кода (функцию, цикл…) • взаимодействие процессов (нитей) - приемы/передачи сообщений и т. д. • Событие записывается в виде метки, номера процесса (нити), типа события и данных о событии • Трасса позволяет анализировать производительность и корректность программы • Профиль программы может быть восстановлен по ее трассе. Обычно требует инструментирования кода

  5. GNU Profiler • Скомпилировать и собрать программу с флагами -g –pg • Запустить программу. В рабочей директории появятся файлы gmon.out.* • > gprof <yourexe> gmon.out.15 > report.15 • > vi report.15 • Проанализировать данные… Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls s/call s/call name 75.00 39.36 39.36 20 1.97 1.97 Process::jacobi_iteration() 14.46 46.95 7.59 random 5.77 49.98 3.03 20 0.15 0.15 Process::ExchangeData() 1.33 50.68 0.70 1 0.70 0.70 Matrix3::fill() 0.99 51.20 0.52 DMA_RecFifoSimplePollNormalFifoById

  6. Tuning and AnalysisUtilities:TAU(http://www.cs.uoregon.edu/research/tau) • TAU – набор средств для профилирования и сбора трасс параллельных приложений, написанных на языках Fortran, C, C++, Java, Python. • Поддерживает различные модели параллельного программирования: MPI, OpenMP, гибрид (MPI + OpenMP). • Поддерживает работу с аппаратными счетчиками. • Предоставляются средства визуализации данных.

  7. Способы использования • TAU собирает информацию во время выполнения программы через инструментацию функций, базовых блоков и отдельных операторов. Инструментация состоит в вызове процедур из библиотеки TAU, которые могут быть включены в код одним из следующих способов: • На уровне исходного кода: • инструментирование вручную с использованием TAU API • автоматическое инструментирование (Program Database Toolkit (PDT), Opari) ./configure -xlC -prefix=/home/uname/pdtoolkit-3.15 make clean install

  8. Способы использования • На уровне объектного кода: • прединструментированные библиотеки (перехват вызовов библиотеки, например, MPI при помощи PMPI) • автоматическое инструментирование при помощи компилятора (-optCompInst) • На уровне исполняемого кода • Java, Python – инструментирование во время выполнения • DyninstAPI • Инструментирование на базе компонентов (Proxy Components)

  9. Способы использования • Во время выполнения инструментированного приложения собирается множество информации: время, проведенное в каждой функции, количество вызовов функции, показания аппаратных счетчиков и т.д. • Данные о производительности после завершения выполнения программы записываются в один или несколько файлов, которые могут быть просмотрены, например, при помощи программ pprof, ParaProf, PerfExplorer.

  10. 1. Конфигурирование TAU • Параметры конфигурации определяют какой тип информации будет собирать TAU во время выполнения программы. • ./configure -arch=bgp -mpi -pdt=/home/uname/pdtoolkit-3.15 -pdt_c++=xlC -BGPTIMERS • ./configure -arch=bgp -mpi -openmp -opari -pdt=/home/uname/pdtoolkit-3.15 -pdt_c++=xlC -BGPTIMERS • Каждая конфигурация создает уникальный Makefile в /home/uname/tau-2.19/bgp/lib/ • Скрипты-обертки для компилятора находятся в /home/uname/tau-2.19/bgp/bin/ • Добавьте директорию /home/uname/tau-2.19/bgp/lib/ к вашему пути.

  11. 2. Переменные окружения • Переменная окружения TAU_MAKEFILE задает местоположение мейкфайла TAU. Разным параметрам конфигурации соответствуют разные мейкфайлы. Makefile.tau-bgptimers-mpi-pdt Makefile.tau-bgptimers-mpi-pdt-openmp-opari Makefile.tau-bgptimers-mpi-pdt-trace • Установите переменные окружения: export PATH=/home/uname/tau-2.19/bgp/bin:$PATH export TAU_MAKEFILE=/home/uname/tau-2.19/bgp/lib/Makefile.tau -bgptimers-mpi-pdt

  12. 3. Компиляция с TAU • После того, как были заданы переменные окружения, следует заменить в makefile стандартные имена компиляторов на скрипты-обертки TAU. mpif90 / mpixlf90 ---> tau_f90.sh mpif77 / mpixlf77 ---> tau_f90.sh (add -qfixed for Fortran77) mpicc / mpixlc ---> tau_cc.sh mpicxx/ mpixlcxx ---> tau_cxx.sh • При выполнении этих скриптов сначала вызываются средства предобработки TAU, а потом обычные XL или GNU компиляторы. • Если требуется собрать данные о производительности разного типа, то необходимо скомпилировать приложение несколько раз с разными TAU_MAKEFILE.

  13. 4. Запуск программы с TAU • Эти переменные окружения передаются TAU при запуске приложения mpisubmit.bg -n 128 -m dual -env "OMP_NUM_THREADS=2 NPB_MZ_BLOAD=FALSE TAU_TRACK_MESSAGE=1 TAU_COMM_MATRIX=1 TAU_PROFILE=1 TAU_METRICS=TIME PROFILEDIR=TAU_OUTPUT2" sp-mz.D.256

  14. 5. Сбор трасс в TAU • export TAU_MAKEFILE=/home/uname/tau-2.19/bgp/lib/Makefile.tau-bgptimers-mpi-pdt • mpisubmit.bg … -env "TAU_TRACE=1 TRACEDIR=DIRNAME“ appl.tau • tau_treemerge.pl (собранное на фронтенде) • tau2slog2 tau.trc tau.edf –o appl.slog2 • jumpshot appl.slog2 Можно конвертировать в otf, vtf, paraver-форматы, а также получить профиль по трассе. Очень тормозит…

  15. 6. ParaProf.3D Communcation matrix

  16. 6. ParaProf. Identify the routines that use the most time

  17. mpiP. (http://mpip.sourceforge.net) • Использование библиотеки mpiP занимает очень небольшой процент от времени работы приложения, вся информация об MPI-вызовах собирается локально в рамках отдельных MPI-процессов и собирается только на последнем этапе работы приложения для формирования общего отчета. mpiPпозволяет узнать: • mapping • процент от времени выполнения программы, который заняли MPI вызовы • время выполнения отдельных MPI-вызовов, его разброс для различных процессоров и нескольких выполнений одного вызова • статистику для размеров сообщений, передаваемых MPI-вызовами.

  18. Файл вывода библиотеки mpiP @ mpiP@ Command : /gpfs/data/kaelin/jacobi/jac_Hdebug 2304 1280 2560 1 1 128 5 @ Version : 3.1.2@ MPIP Build date : Mar 9 2009, 22:17:50@ Start time : 1970 01 01 00:00:40@ Stop time : 1970 01 01 00:01:42@ Timer Used : gettimeofday@ MPIP env var : [null]@ Collector Rank : 0@ Collector PID : 100@ Final Output Dir : .@ Report generation : Single collector task@ MPI Task Assignment : 0 Rank 0 of 128 <0,0,0,0> R01-M1-N08-J23@ MPI Task Assignment : 1 Rank 1 of 128 <1,0,0,0> R01-M1-N08-J04@ MPI Task Assignment : 2 Rank 2 of 128 <2,0,0,0> R01-M1-N08-J12@ MPI Task Assignment : 3 Rank 3 of 128 <3,0,0,0> R01-M1-N08-J31

  19. -------------------------------------@--- MPI Time (seconds) --------------------------------------------------Task AppTime MPITime MPI% 0 61.7 2.78 4.50 1 61.7 2.78 4.50 2 61.7 2.78 4.50 3 61.7 2.78 4.50 AppTime – общее время работы приложения MPITime – время, которое заняли MPI-вызовы Вызовы MPI-функций: -----------------------------------------------------------@--- Callsites: 34 --------------------------------------------------------------------------------------------------- ID Lev File/Address Line Parent_Funct MPI_Call 1 0 0x01002517 [unknown] Recv 2 0 0x01002477 [unknown] Send 3 0 0x010029db [unknown] Allreduce Файл вывода библиотеки mpiP

  20. ----------------------------------------------------------@-Aggregate Time (top twenty, descending, milliseconds)------------------------------------------------------------Call Site Time App% MPI% COVSendrecv 31 1.6e+05 2.02 44.92 0.02Sendrecv 32 1.59e+05 2.02 44.83 0.01Allreduce 11 1.48e+04 0.19 4.16 0.21 20 MPI-вызовов, занявших наибольшее суммарное (сумма - по всем вызовам и процессам время). --------------------------------------------------------------@- Aggregate Sent Message Size (top twenty, descending, bytes)--------------------------------------------------------------Call Site Count Total Avrg Sent%Sendrecv 32 2520 5.95e+10 2.36e+07 49.61Sendrecv 31 2520 5.95e+10 2.36e+07 49.61 20 MPI-вызовов, передавших наибольший суммарный объем сообщений (сумма - по всем вызовам и процессам). Файл вывода библиотеки mpiP

  21. Файл вывода библиотеки mpiP Статистика для времени отдельных MPI-вызовов (аналогичная таблица есть для размеров сообщений). ----------------------------------------------------------@--- Callsite Time statistics (all, milliseconds): 3840 ------------------------------------------------------------ Name Site Rank Count Max Mean Min App% MPI% Sendrecv 32 1 20 63.1 63 63 2.04 45.35Sendrecv 32 2 20 63.7 63 63 2.04 45.35Sendrecv 32 3 20 63 63 63 2.04 45.33Sendrecv 32 4 20 63.1 63 63 2.04 45.34 ......................................................... Sendrecv 32 * 2520 187 63.3 62.9 2.02 44.83 Общая статистика для этого вызова по всем MPI-процессам Использование mpiP: • Скомпилировать с флагом –g • Собрать с флагами –L/home/uname/mpiP-3.1.2/lib –lmpiP -lm

  22. PAPI • PAPIпредоставляет разработчику интерфейс и методологию использования аппаратных счетчиков, предоставляемых большинством современных процессоров. (http://icl.cs.utk.edu/papi) • Используется многими средствами профилирования и сбора трасс (TAU, Scalasca, Vampir, Rice University HPCToolkitи др.). • В системе Blue Gene/P PAPI базируется на оригинальном интерфейсе UPC. (universal performance counter) IBM System Blue Gene Solution: Performance Analysis Tools. (http://www.redbooks.ibm.com/abstracts/redp4256.html)

  23. Интеграция форматов средств профилирования и сбора трасс

  24. Другие средства • Rice University HPCToolkit (http://hpctoolkit.org) • VampirTrace– средство для сбора трасс в открытом OTF формате. (http://tu-dresden.de/die_tu_dresden/zentrale_ einrichtungen/zih/forschung/software_werkzeuge_zur_unterstuetzung_von_programmierung_und_optimierung/vampirtrace/)

  25. Другие средства:Scalasca (KOJAK) (http://www.scalasca.org) • Трехмерное представление данных. Формат CUBE. • Performance Algebra – возможность объединять, усреднять, сравнивать результаты различных экспериментов • Автоматический анализ производительности. (Wait at Barrier, Early Reduce, Late Sender, Late Receiver...) • Поддержка топологий (физических и виртуальных)

  26. Ссылки • https://wiki.alcf.anl.gov/index.php/Tuning_and_Analysis_Utilities_(TAU) • http://www.ams.sunysb.edu/~tkaman/BlueGene/2009June05_NYCCS_Seminars_TulinKaman.pdf • www.paratools.com/otf/otftutorial.ppt • http://www.fz-juelich.de/jsc/datapool/page/3521/scalasca-tutorial.pdf • http://www.fz-juelich.de/jsc/docs/autoren2005/moore1

  27. Вопросы ?

More Related