|
Использование раздела отладки
Если внимательно проанализировать полученное решение, то можно
заметить, что оно является неполным, поскольку в задании требуется
вывести некоторые данные не только в разделе результатов, но и в разделе
отладки.
Мы уже встречались с использованием раздела отладки: в нем
выводилась дополнительная информация об ошибках, возникших в
подчиненных процессах. Вторая задача этого раздела дать возможность
в процессе решения задачи выводить на экран различные отладочные
данные. Эта возможность является особенно важной при разработке
параллельных программ, так как для них нельзя использовать такие
стандартные средства отладки, как точки останова и окна просмотра
содержимого.
Дополнительная часть задания MPI1Proc2 (и других начальных
заданий группы MPI1Proc) посвящена знакомству с различными
вариантами вывода отладочной информации. Хотя задачник не анализирует
содержимое раздела отладки, эта часть выполнения задания является такой
же обязательной, как и вывод полученных результатов, просто проверяться
она будет не самим задачником, а преподавателем. Задачник лишь
отмечает, что «с его точки зрения» задание выполнено, окончательное
решение о том, следует ли зачесть данный вариант решения, принимает
преподаватель (при этом он, в частности, обращает внимание на то, какими
средствами MPI решалась задача, является ли полученное решение
эффективным, и т. п.). Заметим, что отображать данные в разделе отладки
требуется также в заданиях группы MPI2Send, связанных с изучением
неблокирующих функций пересылки данных, а также в заданиях группы
MPI8Inter, связанных с возможностями динамического порождения
процессов в ходе выполнения параллельной программы.
Напомним заключительную часть задания MPI1Proc2: «В главном
процессе продублировать вывод данных в разделе отладки, отобразив на
отдельных строках удвоенное значение A и количество процессов
(использовать два вызова функции ShowLine, определенной в задачнике
наряду с функцией Show)». Обратите также внимание на то, что в разделе
исходных данных в окне задачника выводится комментарий, поясняющий, как
должен выглядеть раздел отладки при правильном решении (см. любой из
приведенных в предыдущем разделе рисунков с окном задачника).
Для вывода данных в разделе отладки в задачнике предусмотрены две
функции: Show и ShowLine, каждая из которых имеет несколько
перегруженных вариантов, позволяющих настраивать вид выводимых
данных и снабжать их дополнительными комментариями.
Отличаются эти функции тем, что функция ShowLine
после вывода данных автоматически переходит на следующую строку
раздела отладки, тогда как функция Show этого не делает (однако при
достижении правой границы раздела отладки также происходит переход на
новую строку).
Для получения нужного содержимого раздела отладки нам достаточно
добавить в конец функции Solve по одному вызову функций ShowLine и
Show. Поскольку требуемые данные надо вывести только в той части
раздела отладки, которая связана с главным процессом, вызовы этих
функций следует поместить в уже имеющийся в программе условный
оператор. Приведем заключительную часть функции Solve, содержащую
полный текст решения задачи:
int n;
pt >> n;
pt << 2 * n;
if (rank == 0)
{
pt << size;
ShowLine(2 * n);
Show(size);
}
После запуска нового варианта и проверки его на пяти тестовых
наборах данных на экране появится окно задачника:
Сравнивая содержимое раздела отладки с образцом, приведенным в
разделе исходных данных, убеждаемся, что теперь задание выполнено
полностью. Обратите внимание на то, что поскольку в данном случае
раздел отладки содержит только данные, выведенные в главном процессе,
на нижней границе окна отображается единственный маркер «0»,
соответствующий этому процессу.
Итак, мы полностью выполнили задание MPI1Proc2. В процессе
решения мы познакомились с действиями по созданию заготовки, изучили
особенности выполнения параллельных программ и те возможности
задачника, которые упрощают их запуск из среды разработки. Мы узнали о
средствах задачника, предназначенных для ввода исходных данных, вывода
результатов и отображения дополнительной информации в разделе
отладки. Кроме того, мы увидели, как задачник реагирует на различные
виды ошибок. Вся эта информация окажется полезной, когда мы будем
выполнять задания, посвященные главному в технологии MPI: различным
способам обмена сообщениями между процессами параллельного
приложения.
|