Россия, г. Саранск |
Отладка параллельных MPI программ в среде Microsoft Visual Studio 2005
Одним из важнейших этапов разработки программ является процесс поиска и устранения ошибок, неизбежно возникающих при написании сложных программных систем. Для того, чтобы упростить и во многом автоматизировать этот процесс, необходимо использовать специальные программы, называемые отладчиками. Несмотря на то, что сложность написания параллельных программ часто существенно превосходит сложность написания последовательных аналогов, длительное время наблюдалась нехватка качественных отладчиков для параллельных программ, разрабатываемых с использованием технологии MPI. Новейшая интегрированная среда разработки Microsoft Visual Studio 2005 имеет в своем составе отладчик, предоставляющий широкие возможности для поиска и устранения ошибок, в том числе и для отладки MPI приложений.
8.1. Цель лабораторной работы
Цель данной лабораторной работы - получение практических навыков отладки параллельных MPI программ в среде Microsoft Visual Studio 2005. При этом будет предполагаться, что на рабочей станций станции установлен Compute Cluster Server SDK, и, следовательно, используется реализация MPI от компании Microsoft (библиотека MS MPI):
- Упражнение 1 - Тестовый локальный запуск параллельных программ.
- Упражнение 2 - Отладка параллельной программы в Microsoft Visual Studio 2005.
Примерное время выполнения лабораторной работы: 90 минут.
8.2. Обзор методов отладки параллельных программ в среде Microsoft Visual Studio 2005
Отладка (поиск и устранение ошибок) - один из важнейших этапов в написании программных систем, часто занимающий у разработчика больше времени, чем написание отлаживаемого кода. Для того, чтобы максимально снизить время, затрачиваемое на отладку, необходимо придерживаться рекомендаций крупнейших производителей программного обеспечения и ведущих исследователей в области компьютерных наук еще на этапах проектирования и программирования. Например, подобные рекомендации обычно требуют подготавливать автоматические тесты для всех участков разрабатываемой системы и контролировать корректность значений внутренних переменных с использованием макроса ASSERT. Но и сама процедура отладки должна проводиться эффективно, в соответствии с рекомендациями ведущих экспертов в этой области. Огромное значение здесь имеет правильный выбор отладчика - специальной программы, существенно упрощающий процесс поиска ошибок, позволяющий выполнять программу в пошаговом режиме, отслеживать значения переменных, устанавливать точки остановки и т.д. Важнейшими критериями выбора отладчика являются богатство предоставляемого программисту инструментария и удобство использования. В ходе выполнения данной лабораторной работы мы будем использовать стандартный отладчик среды Microsoft Visual Studio 2005, удачно сочетающий в себе интуитивно понятный пользовательский интерфейс и широкий спектр предоставляемых возможностей.
Наиболее частым приемом отладки является приостановка работы программы в заданный момент времени и анализ значений ее переменных. Момент, в который программа будет приостановлена, определяется выбором, так называемых, точек остановки, то есть указанием строк кода исходной программы, по достижении которых выполнение останавливается до получения соответствующей команды пользователя. Помимо простого указания строк кода, где произойдет приостановка, возможно также указание условий, которые должны при этом выполняться. Например, можно дать указание приостановить выполнение программы на заданной строке только в том случае, если значение некоторой переменной программы превысило заданную константу. Правильный выбор момента остановки имеет решающее значение для успеха отладки. Так, зачастую анализ значений переменных непосредственно перед моментом падения программы дает достаточно информации для определения причин некорректной работы.
Другим исключительно полезным инструментом является возможность выполнять программу в пошаговом режиме - по одной строке исходного кода отлаживаемой программы при каждом нажатии пользователем кнопки F10. При этом пользователь также имеет возможность заходить внутрь функции, вызов которой происходит на данной строке, или просто переходить к следующей строке. Таким образом, пользователь всегда находится на том уровне детализации, который ему необходим.
Для того, чтобы в полной мере оценить преимущества отладчика, необходимо предварительно скомпилировать программу в специальной отладочной конфигурации (чаще всего такая конфигурация называется " Debug "), особенностью которой является добавление в генерируемые бинарные файлы специальной отладочной информации, которая позволяет видеть при отладке исходный код выполняемый программы на языке высокого уровня.
К числу других часто используемых инструментов отладки Microsoft Visual Studio 2005 относятся:
- Окно " Call Stack " - окно показывает текущий стек вызова функций и позволяет переключать контекст на каждую из функций стека (при переключении контекста программист получает доступ к значениям локальных переменных функции).
- Окно " Autos " - окно показывает значения переменных, используемых на текущей и на предыдущих строках кода. Кроме того, это окно может показывать значения, возвращаемые вызываемыми функциями. Список отображаемых значений определяется средой автоматически.
- Окно " Watch " - окно позволяет отслеживать значения тех переменных, которых нет в окне " Autos ". Список отслеживаемых переменных определяется пользователем.
- Окно " Threads " - окно позволяет переключаться между различными потоками команд процесса.
- Окно " Processes " - окно, позволяет переключаться между различными отлаживаемыми процессами (например, в случае отладки MPI - программы).
Отладка параллельных MPI программ имеет ряд особенностей, обусловленных природой программирования для кластерных систем. Напомним, что в параллельной программе над решением задачи работают одновременно несколько процессов, каждый из которых, в свою очередь, может иметь несколько потоков команд. Это обстоятельство существенно усложняет отладку, так как помимо ошибок, типичных для последовательного программирования, появляются ошибки, совершаемые только при разработке параллельных программ. К числу таких ошибок можно отнести, например, сложно контролируемую ситуацию гонки процессов, когда процессы параллельной программы взаимодействуют между собой без выполнения каких-либо синхронизирующих действий. В этом случае, в зависимости от состояния вычислительной системы, последовательность выполняемых действий может различаться от запуска к запуску параллельной программы. Как результат, при наличии гонки процессов сложным становится применение одного из основных принципов отладки - проверка работоспособности при помощи тестов (однократное выполнение теста для параллельной программы может не выявить ситуации гонки процессов).
Однако инструменты и приемы, используемые в Microsoft Visual Studio 2005 для отладки как последовательных, так и параллельных программ схожи, поэтому, если Вы имеете хороший опыт отладки последовательных программ, то и отладка параллельных программ не покажется Вам слишком сложной.
8.3. Упражнение 1 - Тестовый локальный запуск параллельных программ
Перед тем, как запускать скомпилированную программу на многопроцессорной вычислительной системе (кластере), желательно провести несколько локальных экспериментов на обычном персональном компьютере(в случае использования однопроцессорного компьютера все процессы параллельной программы запустятся в режиме разделения времени одного имеющегося процессора). Такой способ выполнения параллельных программ является, как правило, более оперативным (не требуется удаленный доступ к кластеру, и отсутствует время ожидания запуска программы в очереди заданий). Кроме того, такие эксперименты выполняются обычно для более простых постановок решаемых задач при небольших размерах исходных данных. Все это позволяет достаточно быстро устранить большое количество имеющихся в параллельной программе ошибок.
Для выполнения локальных экспериментов при установке клиентской части Microsoft Compute Cluster Pack на рабочей станции необходимо установить также Microsoft Compute Cluster Server SDK.
В данном упражнении мы познакомимся с заданием необходимых параметров среды Microsoft Visual Studio 2005 для отладки параллельных MPI программ и запустим программу в режиме отладки.
8.3.1. Задание 1 - Локальный запуск параллельной программы вычисления числа Пи на рабочей станции
- Скомпилируйте проект параллельного вычисления числа Пи ( parallelpi ) в соответствии с инструкциями лабораторной работы "Выполнение заданий под управлением Microsoft Compute Cluster Server 2003" в конфигурации Release.
- Откройте командный интерпретатор (" Start->Run ", введите команду " cmd " и нажмите клавишу " Ввод ").
- Перейдите в папку, содержащую скомпилированную программу (например, для перехода в папку " D:\Projects\senin\mpi_test\parallelpi\Release " введите команду смены диска " d:", а затем перейдите в нужную папку, выполнив команду " cd D:\Projects\senin\mpi_test\parallelpi\Release ").
- Для запуска программы в последовательном режиме (1 процесс) достаточно просто ввести имя программы и аргументы командной строки. Например, " parallelpi.exe 1500 ".
- Для тестового запуска программы в параллельном режиме на локальном компьютере введите " mpiexec.exe -n <число процессов> parallelpi.exe <параметры командной строки> ". В нашем случае параметром командной строки программы вычисления числа Пи является число интервалов разбиения при вычислении определенного интеграла.
Задание 2 - Настройка Microsoft Visual Studio 2005 для локального запуска параллельной MPI программы в режиме отладки
Для того чтобы получить возможность отлаживать параллельные MPI программы, необходимо соответствующим образом настроить Microsoft Visual Studio 2005:
- Откройте проект параллельного вычисления числа Пи ( parallelpi ) в Microsoft Visual Studio 2005.
- Выберите пункт меню " Project->paralellpi Properties… ". В открывшемся окне настроек проекта выберите пункт " Configuration Properties->Debugging ". Введите следующие настройки:
- В поле " Debugger to launch " выберите " MPI Cluster Debugger ".
- В поле " MPIRun Command " введите " mpiexec.exe " - имя программы, используемой для запуска параллельной MPI программы.
- В поле " MPIRun Argument " введите аргументы программы " mpiexec.exe ". Например, введите " -np <число процессов> " для указания числа процессов, которые будут открыты.
- В поле " Application Command " введите путь до исполняемого файла программы.
- В поле " Application Argument " введите аргументы командной строки запускаемой программы.
- В поле " MPIShim Location " введите путь до " mpishim.exe " - специальной программы, поставляемой вместе с Microsoft Visual Studio 2005, используемой для отладки удаленных программ.
- Нажмите " OK " для сохранения внесенных изменений.
- Выберите пункт меню " Tools->Options ". В открывшемся окне настроек проекта выберите пункт " Debugging->General ". Поставьте флаг около пункта " Break all processes when one process breaks " для остановки всех процессов параллельной программы в случае, если один из процессов будет остановлен. Если Вы хотите, чтобы при остановке одного процесса остальные продолжали свою работу, снимите флаг (рекомендуется).