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

Preview:

DESCRIPTION

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

Citation preview

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

Глазкова Е. А., 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

Вопросы

?

Recommended