Средства профилирования и сбора трасс параллельных...
description
Transcript of Средства профилирования и сбора трасс параллельных...
Средства профилирования и сбора трасс параллельных программ
Глазкова Е. А., 520 гр.
Научный руководитель:
Попова Н. Н.
Профилирование Профилирование –
это создание таблиц, которые обобщают поведение программы.
inclusive, exclusive time, # calls, hardware statistics…
Отслеживает функции, циклы, другие базовые блоки и сущности, определенные пользователем
Профилирование Имеет низкие накладные расходы (по
сравнению с трассировкой), позволяет найти «узкие места» в программе
Реализуется через: Sampling – периодические прерывания
ОС или прерывания по значению аппаратных счетчиков
Instrumentation – вставка в программу кода, измеряющего производительность
Трассировка Трассировка подразумевает запись потока событий:
вход/выход в участок кода (функцию, цикл…) взаимодействие процессов (нитей) - приемы/передачи
сообщений и т. д. Событие записывается в виде метки, номера
процесса (нити), типа события и данных о событии Трасса позволяет анализировать производительность
и корректность программы Профиль программы может быть восстановлен по ее
трассе. Обычно требует инструментирования кода
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
Tuning and Analysis Utilities: TAU(http://www.cs.uoregon.edu/research/tau)
TAU – набор средств для профилирования и сбора трасс параллельных приложений, написанных на языках Fortran, C, C++, Java, Python.
Поддерживает различные модели параллельного программирования: MPI, OpenMP, гибрид (MPI + OpenMP).
Поддерживает работу с аппаратными счетчиками.
Предоставляются средства визуализации данных.
Способы использования TAU собирает информацию во время выполнения
программы через инструментацию функций, базовых блоков и отдельных операторов. Инструментация состоит в вызове процедур из библиотеки TAU, которые могут быть включены в код одним из следующих способов:
На уровне исходного кода: инструментирование вручную с использованием
TAU API автоматическое инструментирование (Program
Database Toolkit (PDT), Opari)
./configure -xlC -prefix=/home/uname/pdtoolkit-3.15make clean install
Способы использования На уровне объектного кода:
прединструментированные библиотеки (перехват вызовов библиотеки, например, MPI при помощи PMPI)
автоматическое инструментирование при помощи компилятора (-optCompInst)
На уровне исполняемого кода Java, Python – инструментирование во время
выполнения DyninstAPI
Инструментирование на базе компонентов (Proxy Components)
Во время выполнения инструментированного приложения собирается множество информации: время, проведенное в каждой функции, количество вызовов функции, показания аппаратных счетчиков и т.д.
Данные о производительности после завершения выполнения программы записываются в один или несколько файлов, которые могут быть просмотрены, например, при помощи программ pprof, ParaProf, PerfExplorer.
Способы использования
MethodRequires recompiling
Requires PDT
Shows MPI events
Routine-level event
Low level events (loops, phases, etc...)
Throttling to reduce overhead
Ability to exclude file from instrumentation
Ability to exclude other regions of code
Binary rewriting
Yes Yes Yes
Compiler Yes Yes Yes Yes Yes
Source Yes Yes Yes Yes Yes Yes Yes Yes
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/ к вашему пути.
2. Переменные окружения Переменная окружения TAU_MAKEFILE задает
местоположение мейкфайла TAU. Разным параметрам конфигурации соответствуют разные мейкфайлы.
Makefile.tau-bgptimers-mpi-pdtMakefile.tau-bgptimers-mpi-pdt-openmp-opariMakefile.tau-bgptimers-mpi-pdt-trace
Установите переменные окружения:
export PATH=/home/uname/tau-2.19/bgp/bin:$PATHexport TAU_MAKEFILE=/home/uname/tau-2.19/bgp/lib/Makefile.tau-bgptimers-mpi-pdt
3. Компиляция с TAU
mpif90 / mpixlf90 ---> tau_f90.sh mpif77 / mpixlf77 ---> tau_f90.sh (add -qfixed for Fortran77)mpicc / mpixlc ---> tau_cc.shmpicxx/ mpixlcxx ---> tau_cxx.sh
После того, как были заданы переменные окружения, следует заменить в makefile стандартные имена компиляторов на скрипты-обертки TAU.
При выполнении этих скриптов сначала вызываются средства предобработки TAU, а потом обычные XL или GNU компиляторы.
Если требуется собрать данные о производительности разного типа, то необходимо скомпилировать приложение несколько раз с разными TAU_MAKEFILE.
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
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-форматы, а также получить профиль по трассе. Очень тормозит…
6. ParaProf.3D Communcation matrix
6. ParaProf. Identify the routines that use the most time
mpiP. (http://mpip.sourceforge.net) Использование библиотеки mpiP занимает очень
небольшой процент от времени работы приложения, вся информация об MPI-вызовах собирается локально в рамках отдельных MPI-процессов и собирается только на последнем этапе работы приложения для формирования общего отчета.
mpiP позволяет узнать: mapping процент от времени выполнения программы, который
заняли MPI вызовы время выполнения отдельных MPI-вызовов, его разброс
для различных процессоров и нескольких выполнений одного вызова
статистику для размеров сообщений, передаваемых MPI-вызовами.
Файл вывода библиотеки 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
Файл вывода библиотеки mpiP-------------------------------------@--- 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-вызовы
-----------------------------------------------------------@--- 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
Вызовы MPI-функций:
Файл вывода библиотеки mpiP----------------------------------------------------------@- 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.2120 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----------------------------------------------------------@--- 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-процессам
Статистика для времени отдельных MPI-вызовов (аналогичная таблица есть для размеров сообщений).
Использование mpiP:Скомпилировать с флагом –gСобрать с флагами –L/home/uname/mpiP-3.1.2/lib –lmpiP -lm
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)
Интеграция форматов средств профилирования и сбора трасс
Другие средства 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/)
Другие средства : Scalasca (KOJAK) (http://www.scalasca.org)
Трехмерное представление данных. Формат CUBE.
Performance Algebra – возможность объединять, усреднять, сравнивать результаты различных экспериментов
Автоматический анализ производительности. (Wait at Barrier, Early Reduce, Late Sender, Late Receiver...)
Поддержка топологий (физических и виртуальных)
Ссылки https://wiki.alcf.anl.gov/index.php/Tuning_and_Analy
sis_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
Вопросы
?