В данном разделе мы остановимся на общих процедурах , не связанных с пересылкой данных. Большинство процедур этого раздела необходимы практически в каждой содержательной
MPI_INIT(IERR) INTEGER IERR
Инициализация параллельной части программы. Все другие процедуры могут быть вызваны только после вызова MPI_INIT. Инициализация параллельной части для каждого приложения должна выполняться только один раз. В языке Си функции MPI_Init передаются указатели на argc и argv, из которых системой могут извлекаться и передаваться в
MPI_FINALIZE(IERR) INTEGER IERR
Завершение параллельной части приложения. Все последующие обращения к любым процедурам , в том числе к MPI_INIT, запрещены. К моменту вызова MPI_FINALIZE каждым процессом программы все действия, требующие его участия в
Пример простейшей
program example1 include 'mpif.h' integer ierr print *, 'Before MPI_INIT' call MPI_INIT(ierr) print *, 'Parallel section' call MPI_FINALIZE(ierr) print *, 'After MPI_FINALIZE' end
В зависимости от реализации строчки 'Before MPI_INIT' И 'After MPI_FINALIZE' может печатать либо один выделенный процесс, либо все запущенные процессы приложения. Строчку 'Parallel section' должны напечатать все процессы. Порядок вывода строк с разных процессов может быть произвольным.
Общая схема
#include "mpi.h" main(int argc, char **argv) MPI_Init(argc, argv); MPI_Finalize() ;
Другие параллельные программы на языке Си с использованием технологии .
MPI_INITIALIZED(FLAG, IERR) LOGICAL FLAG INTEGER IERR
Процедура возвращает в аргументе FLAG значение .TRUE., если вызвана из параллельной части приложения, и значение .FALSE. - в противном случае. Это единственная процедура , которую можно вызвать до вызова MPI_INIT.
MPI_COMM_SIZE(
В аргументе SIZE процедура возвращает число параллельных процессов в сомм.
MPI_COMM_RANK(
В аргументе процедура возвращает номер процесса в сомм. Если процедура MPI_COMM_SIZE ДЛЯ ТОГО же коммуникатора сомм вернула значение SIZE, то значение, возвращаемое процедурой MPI_COMM_RANK через переменную , лежит в диапазоне от о до SIZE-1.
В следующем примере каждый запущенный процесс печатает свой уникальный номер в MPI_COMM_WORLD И ЧИСЛО процессов в данном
program example2 include 'mpif.h' integer ierr, size, rank call MPI_INIT(ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) print *, 'process ', rank, ', size ', size call MPI_FINALIZE(ierr) end
Строка, соответствующая вызову процедуры print, будет выведена столько раз, сколько процессов было порождено при запуске программы. Порядок появления строк заранее не определен и может быть, вообще говоря, любым. Гарантируется только то, что содержимое отдельных строк не будет перемешано друг с другом.
Эта функция возвращает на вызвавшем процессе астрономическое время в секундах (вещественное число двойной точности), прошедшее с некоторого момента в прошлом. Если некоторый участок программы окружить вызовами данной функции, то разность возвращаемых значений покажет время работы данного участка. Гарантируется, что момент времени, используемый в качестве точки отсчета, не будет изменен за время существования процесса. Заметим, что эта функция возвращает результат своей работы не через параметры, а явным образом. Таймеры разных процессоров могут быть не синхронизированы и выдавать различные значения, это можно определить по значению параметра MPI_WTIME_IS_GLOBAL (1 - синхронизированы, 0 - нет).
Функция возвращает разрешение таймера на вызвавшем процессе в секундах. Эта функция также возвращает результат своей работы не через параметры, а явным образом.
MPI_GET_PROCESSOR_NAME(NAME,
Процедура возвращает в строке NAME возвращается количество символов в имени, не превышающее значения константы MPI_MAX_PROCESSOR_NAME. С помощью этой процедуры можно определить, на какие именно физические процессоры были спланированы процессы МРI-приложения.
В следующей программе на каждом процессе определяются две характеристики NTIMES замеров). Также в данном примере показано использование процедуры
MPI GET PROCESSOR NAME. program example3 include 'mpif.h' integer ierr, rank, len, i, NTIMES parameter (NTIMES = 100) character*(MPI_MAX_PROCESSOR_NAME) name double precision time_start, time_finish, tick call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) call MPI_GET_PROCESSOR_NAME(name, len, ierr) tick = MPI_WTICK(ierr) time_start = MPI_WTIME(ierr) do i = 1, NTIMES time_finish = MPI_WTIME(ierr) end do call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) print *, 'processor ', name(1: len), ', process ', rank, ': tick = ', tick, ', time = ', (time_finish-time_start)/NTIMES call MPI_FINALIZE(ierr) end
MPI и может находиться, например, в файлах /usr/local/examples/mpi /fpi.f или cpi.c ).MPI_INIT и после вызова процедуры MPI_FINALIZE.Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.