280 likes | 512 Views
Средства профилирования и сбора трасс параллельных программ. Глазкова Е. А., 520 гр. Научный руководитель: Попова Н. Н. Профилирование. Профилирование – это создание таблиц, которые обобщают поведение программы. inclusive, exclusive time , # calls, hardware statistics….
E N D
Средства профилирования и сбора трасс параллельных программ Глазкова Е. А., 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 AnalysisUtilities: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.15 make clean install
Способы использования • На уровне объектного кода: • прединструментированные библиотеки (перехват вызовов библиотеки, например, MPI при помощи PMPI) • автоматическое инструментирование при помощи компилятора (-optCompInst) • На уровне исполняемого кода • Java, Python – инструментирование во время выполнения • DyninstAPI • Инструментирование на базе компонентов (Proxy Components)
Способы использования • Во время выполнения инструментированного приложения собирается множество информации: время, проведенное в каждой функции, количество вызовов функции, показания аппаратных счетчиков и т.д. • Данные о производительности после завершения выполнения программы записываются в один или несколько файлов, которые могут быть просмотрены, например, при помощи программ pprof, ParaProf, PerfExplorer.
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-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
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.
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-форматы, а также получить профиль по трассе. Очень тормозит…
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
-------------------------------------@--- 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
----------------------------------------------------------@-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
Файл вывода библиотеки 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
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_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
Вопросы ?