Опубликован: 28.10.2009 | Уровень: специалист | Доступ: платный
Самостоятельная работа 3:

Отладка параллельных MPI программ в среде Microsoft Visual Studio 2005

< Лекция 5 || Самостоятельная работа 3: 123 || Лекция 6 >

8.3.3. Задание 3 - Запуск параллельной MPI программы в режиме отладки из Microsoft Visual Studio 2005

  • После настроек, указанных в предыдущем задании, Вы получите возможность отлаживать параллельные MPI программы. Так, запустив программу из меню Microsoft Visual Studio 2005 (команда " Debug->Start Debugging "), будут запущены сразу несколько процессов (их число соответствует настройкам предыдущего задания). Каждый из запущеных процессов имеет свое консольное окно. Вы можете приостанавливать любой из процессов средствами Microsoft Visual Studio 2005 и проводить отладку. Подробнее об отладке будет рассказано в следующем упражнении.

8.4. Упражнение 2 - Отладка параллельной программы в Microsoft Visual Studio 2005

8.4.1. Задание 1 - Знакомство с основными методами отладки

  • Откройте проект параллельного вычисления числа Пи ( parallelpi ) и выполните настройки, необходимые для проведения отладки MPI программ (если это еще не было сделано), указав число запускаемых процессов равное 2. Откройте файл " parallelpi.cpp " (дважды щелкните на файле в окне " Solution Explorer ").
  • Поставьте точку остановки на строке выделения памяти с использованием функции malloc: установите мигающий указатель вводимого текста на ту строку, на которой Вы хотите установить точку остановки и нажмите кнопку " F9 ".

  • Выберите отладочную конфигурацию (" Debug ") в выпадающем списке конфигураций проекта на панели инструментов. Запустите программу в режиме отладки: выполните команду меню " Debug->Start Debugging " или нажмите на кнопке с зеленым треугольником () в панели инструментов Microsoft Visual Studio 2005. Программа запустится, откроется 3 консольных окна: окно процесса " mpiexec.exe " и 2 консольных окна параллельной программы вычисления числа Пи. По достижении точки остановки выполнение процессов приостановится, так как оба процесса достигнут указанной точки.

  • Откройте окно " Call Stack ": выполните команду меню " Debug->Windows->Call Stack ". Окно показывает текущий стек вызова функций и позволяет переключать контекст на каждую из функций в стеке. При отладке это помогает понять, как именно текущая функция была вызвана, а так же просмотреть значения локальных переменных функций в стеке. Щелкните 2 раза по функции, находящейся ниже текущей функции в стеке. Текущий контекст изменится, и Вы увидите библиотечную функцию, вызвавшую функцию " main ".
  • Щелкните 2 раза на функции " main " в окне " Call Stack ". Откройте окно " Autos " (выполните команду меню " Debug->Windows->Autos "). Окно " Autos " показывает значения переменных, используемых на текущей и на предыдущих строках кода. Вы не можете изменить состав переменных, так как он определяется средой Microsoft Visual Studio 2005 автоматически.
  • Откройте окно " Watch " (выполните команду меню " Debug->Windows->Watch->Watch 1 "). В этом окне Вы можете просматривать значения переменных, которых нет в окне " Autos ". Например, введите в колонке " Name " окна " Watch " имя переменной " ReferencePI ", нажмите клавишу " Ввод ". В колонке " Value " появится текущее значение переменной, в колонке " Type " - ее тип.
  • Откройте окно " Processes " (выполните команду меню " Debug->Windows->Processes "). Появится окно со списком процессов параллельной MPI программы. В нашем случае их 2. Введите в окне " Watch " переменную " MyID " - идентификатор текущего процесса. Запомните значение переменной. Затем измените текущий процесс, дважды щелкнув по другому процессу в окне " Processes ". Посмотрите значение переменной " MyID " - оно должно отличаться от предыдущего, так как у каждого процесса в одной MPI задаче идентификаторы различны. При использовании окна " Processes " необходимо учитывать следующие 2 момента:
    • Вы можете сделать активным только приостановленный процесс (для приостановки процесса можно поставить точку остановки или выделить работающий процесс в окне " Processes " и выполнить команду " Break Process " - кнопка в виде двух вертикальных линий в окне " Processes ").
    • В окне " Processes " есть колонка " ID " - идентификатор процесса в операционной системе Windows. Важно помнить, что указанный идентификатор не имеет отношения к рангу (идентификатору) процесса в MPI задаче.

  • Перейдите на процесс с нулевым идентификатором " MyID ". Введите в окне " Watch " переменные " processor_name " и " all_proc_names ". " all_proc_names " - это массив названий узлов, на которых запущены параллельные процессы. Массив используется только на процессе с индексом 0. Для отображения значений, например, двух элементов массива введите " all_proc_names,2 ". После этого Вы сможете просмотреть значения двух первых элементов массива, нажав на " + " слева от имени переменной. Нажимайте кнопку " F10 " для пошагового выполнения программы. После каждого шага Вы можете видеть, как изменяются значения внутренних переменных. Так, после вызова функции MPI_Gather процесс с индексом 0 будет содержать названия всех узлов, на которых запущены параллельные процессы. Для входа "внутрь" функции Вы можете нажимать кнопку " Ґ· F11 " (в рассматриваемом примере все вызываемые функции являются системными, поэтому Вы не сможете увидеть их исходный код).
< Лекция 5 || Самостоятельная работа 3: 123 || Лекция 6 >
Алексей Николаев
Алексей Николаев
Россия, г. Саранск
Рамиль Ариков
Рамиль Ариков
Россия, Республика Мордовия