ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
УДК 004.051
Д.С. Чайковский, Н.А. Гулевич АНАЛИЗ СОВРЕМЕННЫХ СРЕДСТВ ПРОФИЛИРОВАНИЯ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ
Достижение максимальной производительности на современной многопроцессорной вычислительной машине является непростой задачей. Существует большое количество средств измерения производительности параллельных программ. Несмотря на то, что большинство из существующих средств являются высокоэффективными при поиске и устранении причин снижения производительности, выбор необходимого инструмента для конкретной задачи является трудоемким процессом. Изучены современные программные инструменты анализа производительности параллельных программ, выявлены основные особенности и предложены рекомендации по использованию каждого из изученных средств.
Средства профилирования параллельных программ, инструментовка, трассировка, анализ производительности, параллельное программирование
D.S. Chaikovsky, N.A. Gulevich ANALYSIS OF MODERN PROFILING MEANS OF PARALLEL PROGRAMS
Achievement of peak productivity on a modern multiprocessor computer is a complicated task. Numerous techniques are used to estimate the productivity of parallel programs. In spite of the majority of existing means which are highly effective in searching and elimination of factors causing productivity decline, the choice of the necessary tools to achieve specific objectives is a time-consuming procedure. This paper presents the analysis of modern means for profiling parallel programs, and provides guidelines and best practices needed for the application of the studied means.
Means of profiling of parallel programs, instrumentation, trace, performance review, parallel programming
В настоящее время главным направлением повышения производительности ЭВМ является создание многопроцессорных систем. При переходе от одного процессора к нескольким резко возрастает сложность программирования. И многие традиционные подходы проектирования в этом случае уже не работают. Одной из ключевых проблем является проблема эффективности компьютерной программы. Важно точно представлять, какой эффект дает распараллеливание программы и что необходимо предпринять, чтобы максимизировать этот эффект. Методы и средства отладки производительности параллельной программы существенно зависят от той модели, в рамках которой разрабатывается параллельная программа.
В информатике существует понятие профилирования программы. Под профилированием подразумевают измерение производительности как всей программы в целом, так и отдельных ее фрагментов, с целью нахождения «узких» мест, - тех участков программы, на выполнение которых расходуется наибольшее количество времени. Инструмент, используемый для анализа работы, называют профилировщиком или профайлером.
Исследование эффективности параллельной программы с целью выявления и устранения «узких мест», а в конечном счете - с целью уменьшения времени выполнения программы, называется профилированием параллельной программы.
Профиль параллельной программы - это последовательность событий при выполнении программы с указанием того, сколько времени требует каждая стадия вычислений и каждая коммуникационная операция. Основное назначение профилировщика параллельной программы состоит в сохранении последовательности событий и представление информации о событиях в удобном для пользователя виде. Профилировщики организуют хранение информации о событиях и привязанных к ним временных метках в специальных файлах журнала.
В статье предложен анализ результатов работы современных профилировщиков параллельных программ.
TAU (Tuning and Analysis Utilities)
Аббревиатура TAU (Tuning and Analysis Utilities) [1] дословно переводится как утилиты настройки и анализа. TAU представляет собой набор средств для измерения производительности, написанные исследователями Орегонского университета США.
Одной из отличительных особенностей этого профилировщика является большое количество поддерживаемых аппаратных и программных платформ. TAU может работать практически на любой современной высокопроизводительной вычислительной технике и поддерживает несколько языков, включая C, C++, Java, Python, Fortran, SHMEM, OpenMP, MPI, и Charm.
Большинство TA U функций заключается в контроле времени компиляции, которые заданы как опции в скрипте конфигурации. TAU можно настроить таким образом, чтобы использовать профилирование или трассировку, и имеет много опций, управляющих типом профилирования. Несмотря на то, что многие функции из набора средств являются взаимоисключающими, возможно установить несколько версий TAU и настроить их на свое усмотрение. К дополнительным функциям TAU можно отнести динамическую двоичную инструментацию реализованную средствами DynInst [2], библиотеки-оболочки дляMPI (использующие интерфейс PMPI), инструментацию для Java и Python.
TA U может работать в двух режимах: Pprof и Paraprof. Режим Pprof представляет собой инструмент, который в результате анализа кода в текстовом файле перечисляет функции в порядке возрастания времени потребления. Paraprof показывает те же данные, что и Pprof, но отображает их графически с помощью диаграмм и трехмерных изображений. Помимо этого в новых версиях Paraprof можно воспользоваться новым инструментом PerfExplorer [3] - интерфейсом для выполнения интеллектуального анализа данных. TAU может быть сконфигурирован таким образом, чтобы собрать полные пути вызова, чтобы получить лучшее представление о контексте каждого вызова функции. TAU не содержит встроенных средств просмотра трассировки. Вместо этого в TAU предусмотрен экспорт файлов трассировки его собственного формата в другие форматы, и в настоящее время поддерживает форматы таких программ как Jumpshot's SLOG-2, KOJAK's EPILOG и VTF.
Для проверки работы TA U был использован режим Paraprof, чтобы диагностировать проблемы производительности, так как Paraprof представляет собой наиболее функциональный пользовательский интерфейс, предоставляемый TA U. В результате TAU с легкостью смогла идентифицировать большинство медленных функций, но определить, как передача могла быть реструктурирована, чтобы получить эффективность, не представилось возможным.
Тестирование данного профилировщика и последующих, описанных в данной статье, было проведено на параллельном программном коде LU-разложения матрицы, реализованном с помощью MPI на C+ + .
В результате проведенного теста Paraprof показал, что большая часть времени приложения была потрачена на передачу, но мы не получили информацию о том, какие коммуникационные образцы вызывали ухудшение производительности. Paraprof смог легко идентифицировать большинство «узких» мест вычисления, но не предоставил достаточной информации, чтобы идентифицировать «узкие» места, которые следовали из переменных коммуникационных образцов.
Однако следует отметить, что, когда TAU профили были объединены с TAU трассировкой и инструментами визуализации, такими как Jumpshot или Vampir, стало возможным идентифицировать почти каждое «узкое» место в программном коде.
Библиотеки TAU для измерений также показали хороший результат, записывая данные профиля с минимальными издержками. Режимы профиля TAU обычно представляли незначительные временные накладки (меньше чем 1%). Измерительные библиотеки TAU также представили минимальные накладки времени (меньше чем 5%) в экспериментах трассировки.
Несмотря на то, что TAU отличается своей оперативностью и функциональной глубиной предложенных средств, существует ряд недостатков, о которых стоит упомянуть.
Во-первых, TAU для обеспечения своей основной функциональности использует другое программное обеспечение - PDToolkit, что делает процесс установки немного трудоемким, так как дополнительное программное обеспечение должно быть загружено и установлено до установки TA U.
Во-вторых, даже при том, что TAU оснащен подробным руководствоу пользователя, которое знакомит разработчика со всеми функциями TAU, на его изучение может потребоваться много времени.
Кроме того, иногда проще использовать другие инструменты трассировки вместо того, чтобы использовать их через TAU. Например, обычно проще использовать mpicc-mpilog и Jumpshot, чем проделать аналогичную последовательность операций, чтобы получить ту же функциональность, через TAU.
Несмотря на то, что пользовательский интерфейс TAU относительно простой в использовании, корректная компиляция и установка параметров, чтобы инструментовать код и подключить библиотеки, с первого раза получится едва ли. Однако более новые версии TA U обеспечивают сценарии, которые могут использоваться вместо вызовов компиляторов (например, taucc.sh вместо cc), что делает намного проще инструментовать приложения.
В целом TAU - мощный, но сложный инструмент, хорошо подходящий для пользователей, которым необходима большая функциональность и которые готовы потратить время, чтобы изучить, как использовать его функционал в полном объеме.
HPCToolkit
HPCToolkit [4] представляет собой набор инструментов, который помогает программистам собирать, организовывать и отображать данные профиля. Этот продукт работает на многих платформах, основанных на Linux, включая IA32, Opteron и системы Itanium с установленной библиотекой PAPI. Этот продукт также работает на AlphaServer Tru64, машинах IRIX64 MIPS и машинах SPARC Solaris. HPCToolkit может работать с любой скомпилированной исполняемой программой MPI и OpenMP. HPCToolkit не требует инструментария, но для нее необходимо, чтобы исполняемые программы были скомпилированы с отладочной информацией.
HPCToolkit состоит из нескольких инструментов, которые обеспечивают большую функциональность комплекта инструментальных средств. Hpcrun - инструмент для выполнения контролируемых запусков исполняемых программ, используя PAPI, который создает текстовые файлы профиля. Эти профили объединены с информацией о структуре формата исполняемых файлов которые созданы hpcprof - инструментом. Профили могут использоваться hpcview-инструментом, который собирает информацию о производительности и исходном коде, на который есть ссылки в файлах каталогов отчета и который может быть открыт hpcviewer-программой.
HPCToolkit позволяет пользователям собирать как временные, так и любые другие показатели PAPI(Performance Application Programming Interface) для каждого выбранного выполнения. Во время просмотра в hpcviewer эти измерения выведены на экран рядом с кодом программы. Пользователи могут объединять показатели, создавая выражения MathML, которые hpcviewer -инструмент использует при отображении данных. Кроме того, возможно включать показатели, собранные из различных выполнений в единственном hpcviewer сеансе.
При тестировании на поиск «узких» мест в программе HPCToolkit смог идентифицировать связанные вычисляемые разделы кода. В программе отсутствуют высокоуровневые коммуникационные измерения, поддерживаемые PAPI, поэтому HPCToolkit не смог показать коммуникационные характеристики приложения, кроме времени, проведенного в каждом вызове функции MPI. HPCToolkit легко идентифицирует ограниченные вычисления разделов кода, что не дает возможность выявить проблемы коммуникации. Накладные расходы не отличаются от накладных расходов обычных профилировщиков (от 1 до 5%).
HPCToolkit хорошо использовать в отладке проблем производительности в последовательном коде или в коде с небольшой передачей. HPCToolkit также предоставляет возможность связать измерения производительности со строками исходного кода.
Данные, представленные HPCToolkit, зачастую показывают, где время тратится в библиотеке (например, время, проведенное во внутренних вызовах функции MPI). Было бы полезно предоставить сведения о том, где информация синхронизации связана с кодом анализируемой программы, а не с внутренними подпрограммами, используемыми библиотеками, так как большинство программистов не заинтересованы в изменении кода библиотек для улучшения производительности.
В целом HPCToolkit лучше всего подходит для диагностики проблем производительности в последовательных частях параллельного приложения. HPCToolkit интеграция с PAPI и его превос-
111
ходная взаимосвязь с исходным кодом делают его очень ценным для настройки кода, чтобы минимизировать неудачные обращения в кэш и максимизировать число операций с плавающей точкой в секунду.
MpiP
MpiP [5] - «легкий» инструмент для профилирования приложений MPI. Он поддерживает Linux, Tru64, AIXIBM, Cray UNICOS платформы. В то время как у многих инструментов есть проблемы при работе систем с тысячами процессоров, mpiP был успешно запущен на машинах с массовым параллелизмом.
MpiP собирает статистику по вызываемым функциям и генерирует отчёт с гораздо меньшим количеством данных, чем стандартными возможностями MPI, однако такие отчёты гораздо легче обрабатываются.
На выходе программа предоставляет файл, из которого можно легко понять, что следует оптимизировать в первую очередь, при этом не запутываясь в гораздо более сложных файлах статистики mpi.
При тестировании на выявление «узких» мест кода mpiP смог идентифицировать проблемный участок в коде, где есть функции MPI, но не смог предоставить информацию о частях программы, где не используются функции MPI.
Тест данного инструмента на примере решения задачи LU-разложения матрицы показал, что значительная часть времени выполнения была потрачена на вызовы MPI. Издержки времени, наложенные mpiP, были небольшими, составляя в среднем меньше чем 3% для всех сравнительных тестов.
В то время как mpiP обеспечивает только небольшое количество информации о производительности при сравнении с другим средствами, большим количеством полнофункциональных инструментов, использование его может быть довольно ценно при попытке диагностировать проблемы коммуникации MPI, которые происходят, поскольку системный размер увеличен до нескольких тысяч процессоров.
Профилировщики долгое время использовались с последовательными программами, и большинство производителей программного обеспечения включали инструменты, такие как prof, gprof, или pixie, как часть их стандартных установок программного обеспечения. Большинство предоставленных поставщиками инструментов опирается на выборку стека вызовов и связывает информацию о производительности со строками исходного кода.
Множество параллельных профильных инструментов стараются обеспечить параллельное расширение подобных prof инструментов, таких как PGI [б], vprof [7], HPMToolkit [S], PerfSuite, в дополнение к текстовым выводам от hpcprof (HPCToolkit) и pprof tools (TAU), о которых уже говорилось ранее.
Двумя наиболее успешными коммерческими профильными инструментами, которые пытаются предоставить пользователю предложения о том, как исключать «узкие» места в их коде, является продукт DEEP/MPI компании Crescent Bay Software и VTune компании Intel (несмотря на то, что VTune в настоящее время доступен для последовательных программ только на платформах Intel).
Следует отметить продукт SvPablo [9], который представляет собой инструмент, способный выводить на экран значение производительности в виде цветовых шкал и располагать результаты рядом с кодом программы.
В отличие от других профилировщиков, упомянутых выше, у SvPablo есть графический интерфейс, который позволяет пользователям работать в интерактивном режиме. SvPablo также в состоянии сделать основной анализ производительности, автоматически производя диаграммы эффективности на основе зарегистрированных данных о производительности. SvPablo также использует независимый от языка формат файла для записи данных о производительности, которые позволяют интерфейсу визуализировать данные профиля с любого языка. SvPablo хорошо прошел тест на поиск «узких» мест в программе. Однако коммуникационные «узкие» места иногда невозможно точно определить, когда доступна только профильная информация.
Следующий инструмент, о котором хочется упомянуть, - это AIMS [10]. Этот продукт создан научно-исследовательским центром AMES NASA. Он является самым близким по функциональности к TAU. AIMS поддерживает визуализацию и возможности статистического анализа. К сожалению, AIMS не обновлялся с l999 года, и запустить его на современных платформах не предоставляется возможным.
Профилировщик PAT [11], разработанный Cray, предлагает поддержку выборки, профилирования и трассировки и доступен на большинстве Cray платформ, таких как X1/X1E и XD1. В PAT есть возмож-112
ность экспортировать данные в формате XML для использования с другими инструментами. Основные аналитические возможности, обеспеченные PAT, подобны рга/'-инструментам, PAT Cray может также работать с Apprentice2 для визуализации и трассировками MPI и выбранными данными программы. PAT поддерживает большое разнообразие языков, включая SHMEM, Co-Array Fortran, MPI и OpenMP.
Заключение
В статье представлены результаты экспериментального исследования современных программных инструментов анализа производительности параллельных программ. Описаны сильные и слабые стороны исследованных программ, сделаны выводы по наиболее эффективному использованию вышеописанных инструментов анализа производительности.
ЛИТЕРАТУРА
1. Mohr B. TAU: A portable parallel program analysis environment for C++ / B. Mohr, D. Brown, A. Malony // In CONPAR 94 - VAPP VI. 1994. P. 29-40.
2. Hollingsworth J.K. Dynamic program instrumentation for scalable performance tools / J.K. Hollingsworth, B.P. Miller, J. Cargille // In Scalable High Performance Computing Conference (SHPCC). 1994.
3. Huck K.A. Perfexplorer: A performance data mining framework for large-scale parallel computing / K.A. Huck, A. D. Malony // SC2005. 2005.
4. Mellor-Crummey J. HPCVIEW: A tool for top-down analysis of node performance / J. Mellor-Crummey, R.J. Fowler, G. Marin, N. Tallent // The Journal of Supercomputing, 23(1):81-104. 2002.
5. Vetter J. Statistical scalability analysis of communication operations in distributed applications / J. Vetter, M. McCracken // In Principles and Practice of Parallel Programming (PPOPP). 2001.
6. Portland Group, Incorporated // Сайт pgprof.com. (http://www.pgroup.com/products/ pgprof.html)
7. Browne S. PAPI: A portable interface to hardware performance counters / S. Browne, C. Deane, G. Ho, P. Mucci // In Department of Defense HPCMP Users Group Conference. 1999.
8. DeRose L. The hardware performance monitor toolkit // In 7th International Euro-Par Conference on Parallel Processing. 2001. P. 122-131.
9. DeRose L. Svpablo: A multi-language performance analysis system // L. DeRose, Y. Zhang, D. Reed // 10th International Conference on Computer Performance Evaluation - Modeling Techniques and Tools - Performance Tools. 1998. P. 352-355.
10. Yan J. Performance measurement, visualization and modeling of parallel and distributed programs using the AIMS toolkit // J. Yan, S. Sarukkai, P. Mehra // Software - Practice and Experience. 25(4). 1995. P.429-461.
11. Galarowicz J. Analyzing message passing programs on the Cray T3E with PAT and VAMPIR // J. Galarowicz, B. Mohr // 4th European CRAY-SGI MPP Workshop. 1998. P. 29-49.
Чайковский Дмитрий Станиславович -
кандидат физико-математических наук, доцент кафедры «Прикладная информатика и программная инженерия» Саратовского государственного технического университета имени Гагарина Ю.А.
Гулевич Наталия Анатольевна -
кандидат технических наук, доцент кафедры «Прикладная информатика и программная инженерия» Саратовского государственного технического университета имени Гагарина Ю.А.
Dmitry S. Chaikovsky -
Ph.D., Associate Professor Department of Applied Informatics and Software Engineering,
Yuri Gagarin State Technical University of Saratov
Natalya A. Gulevich -
Ph.D., Associate Professor Department of Applied Informatics and Software Engineering,
Yuri Gagarin State Technical University of Saratov
Статья поступила в редакцию 17.06.14, принята к опубликованию 25.09.14