Programming Taskbook


E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

 

ЮФУ SMBU

Электронный задачник по программированию

©  М. Э. Абрамян (Южный федеральный университет, Университет МГУ-ППИ в Шэньчжэне), 1998–2024

 

PT for MPI | Выполнение заданий в параллельном режиме   | Запуск программы

PrevNext


Запуск программы в параллельном режиме

Теперь выясним, каким образом данный проект можно запустить в параллельном режиме. В самом деле, при компиляции и запуске обычной программы из интегрированной среды она будет запущена в единственном экземпляре. В единственном экземпляре она будет запущена и в случае, если мы выйдем из интегрированной среды и запустим на выполнение откомпилированный exe-файл данной программы.

Для запуска программы в параллельном режиме необходима «управляющая» программа, которая, во-первых, обеспечивает запуск нужного количества экземпляров исходной программы и, во-вторых, перехватывает сообщения, отправленные этими экземплярами (процессами) и пересылает их по назначению.

Следует заметить, что экземпляры «настоящих» параллельных программ обычно запускаются на разных компьютерах, объединенных в сеть (кластер), или на суперкомпьютерах, снабженных большим числом процессоров. Именно в ситуации, когда каждый процесс выполняется на своем собственном процессоре, и обеспечивается максимальная эффективность параллельных программ. Разумеется, для проверки правильности наших учебных программ все их экземпляры достаточно запускать на одном локальном компьютере. Однако управляющая программа необходима и в этом случае.

В качестве управляющей программы для параллельных программ задачник PT for MPI использует приложение MPIRun.exe, входящее в систему MPICH. Для запуска исполняемого файла в параллельном режиме достаточно запустить программу MPIRun.exe, передав ей полное имя файла, требуемое количество процессов (т. е. запущенных экземпляров программы) и некоторые дополнительные параметры. Поскольку при тестировании программы такие запуски придется осуществлять многократно, удобно создать пакетный файл (bat-файл), содержащий вызов MPIRun.exe со всеми необходимыми параметрами. Однако и в этом случае процесс тестирования параллельной программы будет не слишком удобным: каждый раз после внесения необходимых исправлений в программу ее придется перекомпилировать, после чего, покинув интегрированную среду, запускать bat-файл. Проанализировав результаты работы программы, потребуется опять вернуться в интегрированную среду для внесения в нее очередных изменений, и т. д.

Для того чтобы действия по запуску параллельной программы не отвлекали от решения задачи, задачник PT for MPI выполняет эти действия самостоятельно.

Напомним, что в настоящее время мы имеем проект-заготовку для выполнения задания MPIBegin1, который уже готов к запуску. Нажмем клавишу [F9] (в среде Lazarus, Delphi или Code::Blocks) или [F5] (в среде Visual Studio); в результате будет выполнена компиляция программы и, в случае ее успешного завершения, программа будет запущена на выполнение. Поскольку мы не вносили в заготовку никаких изменений, компиляция должна завершиться успешно. При запуске программы на экране появится консольное окно, подобное следующему:

После трех строк информационного сообщения в этом окне отображается командная строка, которая обеспечивает запуск программы MPIBegin1.exe (или ptprg.exe в случае использования языка C++) в параллельном режиме под управлением MPIRun.exe. Число «3», указанное перед полным именем exe-файла, означает, что соответствующий процесс будет запущен в трех экземплярах. Параметр –nopopup_debug отключает вывод сообщений об ошибках в отдельном окне (поскольку эти сообщения в конечном итоге будут выведены в окне задачника), параметр –localonly обеспечивает запуск всех экземпляров процесса на локальном компьютере. Сразу после появления консольного окна, если ранее параллельная программа с именем MPIBegin1.exe (или ptprg.exe) не запускалась, на экране может появиться еще одно окно:

Поскольку мы не собираемся связываться с другими компьютерами, в данном окне можно выбрать любой вариант: как «Блокировать», так и «Разблокировать». На выполнение локальных экземпляров программы это не окажет никакого влияния.

Наконец, на экране появится окно задачника:

Внешне это окно ничем не отличается от окна, возникающего при выполнении обычной, «непараллельной» программы. Однако отличие имеется: в данном случае информация о том, что не была выполнена ни одна из операций ввода-вывода, относится ко всем процессам, запущенным в параллельном режиме.

Для завершения работы программы надо, как обычно, закрыть окно задачника (например, щелкнув мышью на кнопке «Выход (Esc)» или нажав клавишу [Esc]; кроме того, при использовании среды Lazarus/Delphi/Code::Blocks можно нажать [F9], а при использовании среды Visual Studio — [F5]). После закрытия окна задачника немедленно закроется и консольное окно, и мы вернемся в интегрированную среду, из которой была запущена наша программа.

Таким образом, откомпилировав и запустив программу из интегрированной среды, мы смогли сразу обеспечить ее выполнение в параллельном режиме. Это происходит благодаря достаточно сложному механизму, который реализован в ядре задачника Programming Taskbook. Для того чтобы успешно выполнять учебные задания, не требуется детального понимания этого механизма, поэтому дадим здесь лишь его краткое описание (подробности приведены в разделе «Особенности работы задачника в параллельном режиме»).

На самом деле программа, запущенная из интегрированной среды, не пытается решить задачу и выполняется в обычном, «непараллельном» режиме. Обнаружив, что задача относится к группе заданий по параллельному программированию, она лишь создает пакетный файл $pt_run$.bat, записывая в него три строки комментария и командную строку, обеспечивающую вызов программы MPIRun.exe с необходимыми параметрами, после чего запускает этот пакетный файл на выполнение и переходит в режим ожидания завершения работы пакетного файла. Запущенная с помощью пакетного файла программа MPIRun.exe запускает, в свою очередь, нужное количество экземпляров программы (процессов) в параллельном режиме, и эти процессы действительно пытаются решить задачу. В частности, задачник предлагает каждому процессу его набор исходных данных и ожидает от него набор результатов.

Поскольку в нашем случае ни в одном процессе не была указана ни одна операция ввода-вывода, данный запуск параллельной программы был признан ознакомительным, о чем и было сообщено в информационном разделе окна задачника. Отметим, что данное окно отображается главным процессом параллельной программы, в то время как все подчиненные процессы (а также самый первый экземпляр программы, обеспечивший создание и запуск пакетного файла) работают в «невидимом» режиме.

При закрытии окна задачника происходит завершение всех процессов параллельной программы, после этого завершается выполнение пакетного файла, и наконец, обнаружив, что пакетный файл успешно завершил работу, завершает работу и тот экземпляр нашей программы, который был запущен из интегрированной среды.

Примечание. «Стартовый» экземпляр программы обеспечивает выполнение еще одного действия: он автоматически выгружает из памяти все процессы параллельной программы, если в результате неправильного программирования происходит их «зависание». Если при выполнении параллельной программы в течение 15–20 с окно задачника не появляется, следовательно, она зависла (иногда зависание программы проявляется в том, что после закрытия окна задачника не происходит немедленного закрытия консольного окна, т. е. завершения работы пакетного файла). В этой ситуации надо закрыть консольное окно, следуя приведенным в нем указаниям — нажав несколько раз комбинацию клавиш [Ctrl]+[C] или [Ctrl]+[Break]. Если стартовый экземпляр программы обнаружит, что пакетный файл завершил свою работу, а в памяти остались зависшие процессы параллельной программы, то он автоматически выгрузит из памяти все эти процессы. Это действие является важным, так как пока в памяти остаются процессы, связанные с исполняемым файлом, этот файл нельзя изменить (в частности, удалить или заменить на новый откомпилированный вариант).


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
01.01.2024