Россия, г. Санкт-Петербург |
Отладка программ в OpenMP
Средства автоматизированной отладки в OpenMP
Актуальность развития многопоточных приложений обусловлена быстрым развитием и все более широким распространением микропроцессоров, реализующих многоядерные (multicore) и многопоточные (hyper-threading) технологии.
Поскольку многопоточная программа существенно сложнее однопоточной, вести отладку таких приложений весьма и весьма непросто. Применение обычных (стандартных) отладчиков не может решить и малой доли проблем, возникающих при отладке многопоточных приложений. Поэтому становится весьма актуальной задача создания автоматизированных средств отладки с наглядным графическим интерфейсом. Одним из таких средств является разработка компании Intel - программа Intel Thread Checker. Эта программа имеет развитый графический интерфейс и позволяет быстро и эффективно решать основные проблемы отладки многопоточных программ, находя и устраняя сложные, невидимые на первый взгляд ошибки.
С помощью программы Intel Thread Checker разработчик может в автоматическом режиме осуществить поиск ошибок в многопоточной программе, проанализировать условия доступа к данным в параллельных потоках, выявить тупиковые ситуации в программе и установить причины зависания потоков. Кроме того, с помощью этого инструмента разработчик может провести модернизацию параллельной программы, руководствуясь подсказками программы Intel Thread Checker.
Программа Intel Thread Checker работает под управлением операционных систем Windows и Linux и позволяет вести отладку с Windows-компьютера на удаленных Linux-компьютерах.
В процессе анализа программы разработчика программа Intel Thread Checker находит строки текста с ошибками и отмечает сами ошибки. Кроме того, программа Intel Thread Checker находит некорректно используемые переменные и их описания. Справочная система программы не только отображает причины найденных ошибок, но и предлагает возможные пути их устранения.
Программа Intel Thread Checker под управлением операционной системы Windows работает в среде разработки с любыми компиляторами компаний Intel и Microsoft. Кроме того, Intel Thread Checker работает в среде разработки Microsoft Visual Studio .NET и позволяет анализировать программы, оттранслированные с помощью следующих версий компиляторов Microsoft: Visual C++ .NET Compiler версий 2002 или 2003, а также Visual C++ Compiler 6.0. Программа поддерживает анализ стека вызовов, функций интерфейса Win32 API, исполняемых библиотек языка C, директив OpenMP. Таким образом, анализ охватывает большинство проблем, с которыми на практике сталкивается разработчик многопоточных программ.
Программа Intel Thread Checker позволяет выводить информацию об ошибках с различными уровнями детализации. Всего в программе имеется шесть различных уровней детализации сообщений об ошибках: от ошибок и предупреждений до содержательных комментариев. Все возникающие ошибки можно классифицировать по категориям, присвоив им определенный статус. Список ошибок можно отсортировать различными способами, например по степени их важности. Затем можно установить причины ошибок и даже получить рекомендации по их устранению. Все это реализовано в удобном графическом режиме.
Программа Intel Thread Checker позволяет не только находить, анализировать и исправлять ошибки в многопоточных параллельных программах, но и анализировать полный ход выполнения программы, находя и выделяя критические пути. Последующий анализ критического пути выполнения многопоточной программы позволяет установить ее узкие места ( bottle neck ), устранить их и тем самым повысить быстродействие программы.
Программа Intel Thread Checker полностью совместима с технологией OpenMP. Однако при этом она может обнаруживать и ошибки в однопоточной версии программы. Для отображения дополнительных сведений об указателях при запуске компилятора следует использовать настройку /Qtcheck компилятора Intel.
Если режим OpenMP не используется, программа Intel Thread Checker распознает практически все многопоточные версии стандартных функций Win32 API и языка C/C++. Так, программа определяет время создания, временной остановки и время прерывания потоков. Кроме того, она выделяет подпотоки ( fiber ), критические участки ( critical paths ), функции событий, сблокированные (атомарные) функции, объекты блокировки ( mutex ), объекты синхронизации, пулы потоков, функции синхронизации и другие.
На рис.5.1 схематически изображена поэтапная схема проектирования параллельной программы с перечислением инструментов, которые могут быть применены на каждом из этапов.
Как видно из этой схемы, на этапе разработки параллельной программы в качестве средств разработки могут использоваться компиляторы Intel и программа Intel VTune Performance Analyzer; на этапе тестирования и отладки - программа Intel Thread Checker и тесты разработчика; на этапе настройки - программы Intel VTune Performance Analyzer и Intel Thread Profiler. Отметим, что программы Intel Thread Checker, Intel VTune Performance Analyzer и Intel Thread Profiler входят в состав пакета программ Intel Threading Tools. Программа Intel VTune Performance Analyzer является инструментом настройки производительности программ, а программа Intel Thread Profiler - инструментом настройки работы параллельных потоков.
Рис. 5.1. Поэтапная схема проектирования параллельной программы и средства разработки, используемые на этапах
На рис.5.2 изображено окно запуска и настройки программы Intel Thread Profiler.
После запуска в программе Thread Profiler можно выбрать один из четырех видов графического представления информации:
- Overview (общий вид);
- Bar Chart (диаграмма полос);
- Speedup Plot (диаграмма ускорения);
- Legend (условные обозначения).
Определив Activity (различные реализации программы), можно перейти к анализу графической информации, соответствующей анализируемой версии программы.
На рис.5.3 показан экран общего вида путеводителя по проекту в программе Thread Profiler.
На этом экране в сжатой форме представлены три основных окна программы: Bar Chart (диаграмма полос), Speedup Plot (диаграмма ускорения) и Legend (условные обозначения). Закладки Data, Threads, Regions позволяют осуществить более подробный анализ работы исследуемой программы.
На рис.5.4 представлен подробный анализ диаграммы полос (Bar Chart) для исходной (A0) и модифицированной (A1) версий исследуемой программы в Intel Thread Profiler.
Рис. 5.4. Анализ диаграммы для исходной (A0) и модифицированной (A1) версий исследуемой программы в Intel Thread Profiler
Как видно из этого рисунка, в исходной версии программы установлен дисбаланс потоков, устранить который можно после модификации программы.
Теперь рассмотрим основные моменты запуска и работы с программой Intel Thread Checker. На рис.5.5 показаны этапы создания нового проекта.
После запуска программы Intel Thread Checker на экране появляются окна с результатами анализа исследуемой программы (см. рис.5.6). Нажав на красный флажок в верхней строке меню, увидим следующую картину:
Эта картина иллюстрирует анализ загрузки памяти, полученный с помощью программы Intel Thread Checker. Щелкнув левой клавишей мыши на одной из функций в графе Context, можно открыть окно с ассемблерным текстом выбранной функции, а также с текстом на языках C/C++ или Fortran. Это окно показано на рис.5.7. Далее можно выбирать различные режимы просмотра и анализа процессов в параллельной программе. В качестве примера на рис.5.8 приведена трассировка стека в анализируемой программе.
В заключение этого раздела скажем, что интерфейс программы Intel VTune Performance Analyzer аналогичен уже рассмотренному интерфейсу программы Intel Thread Profiler. Также отметим, что были рассмотрены лишь интерфейсы программ, работающих в операционной системе Windows. Для аналогичных программ, работающих в операционной системе Linux, пока не разработано единой графической оболочки. Запуск этих программ в операционной системе Linux в настоящее время осуществляется из командной строки с помощью специальных настроек. Результаты работы программ записываются в специальный раздел на жестком диске, и лишь затем можно запустить программы для просмотра в графическом режиме полученных результатов.