2006 Ответы на экзаменационные вопросы по ПОД (Lilalbrother), страница 13
Описание файла
PDF-файл из архива "2006 Ответы на экзаменационные вопросы по ПОД (Lilalbrother)", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 13 страницы из PDF
Все элементы сообщения расположеныподряд в буфере buf. Значение count может быть нулем. Тип передаваемых элементовdatatype должен указываться с помощью предопределенных констант типа. Разрешаетсяпередавать сообщение самому себе.Блокировка гарантирует корректность повторного использования всех параметровпосле возврата из подпрограммы. Выбор способа осуществления этой гарантии:копирование в промежуточный буфер или непосредственная передача процессу dest,остается за MPI. Следует специально отметить, что возврат из подпрограммы MPI_Sendне означает ни того, что сообщение уже передано процессу dest, ни того, что сообщениепокинуло процессорный элемент, на котором выполняется процесс, выполнившийMPI_Send.int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Commcomm, MPI_Request *request)buf - адрес начала буфера посылки сообщенияcount - число передаваемых элементов в сообщенииdatatype - тип передаваемых элементовdest - номер процесса-получателяmsgtag - идентификатор сообщенияcomm - идентификатор группыOUT request - идентификатор асинхронной передачиПередача сообщения, аналогичная MPI_Send, однако возврат из подпрограммыпроисходит сразу после инициализации процесса передачи без ожидания обработки всегосообщения, находящегося в буфере buf.
Это означает, что нельзя повторно использоватьданный буфер для других целей без получения дополнительной информации озавершении данной посылки. Окончание процесса передачи (т.е. того момента, когдаможно переиспользовать буфер buf без опасения испортить передаваемое сообщение)можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test.Сообщение, отправленное любой из процедур MPI_Send и MPI_Isend, может бытьпринято любой из процедур MPI_Recv и MPI_Irecv.int MPI_Send_init( void *buf, int count, MPI_Datatype datatype, int dest, int msgtag,MPI_Comm comm, MPI_Request *request)buf - адрес начала буфера посылки сообщенияcount - число передаваемых элементов в сообщенииdatatype - тип передаваемых элементовdest - номер процесса-получателяmsgtag - идентификатор сообщенияcomm - идентификатор группыOUT request - идентификатор асинхронной передачиФормирование запроса на выполнение пересылки данных. Все параметры точнотакие же, как и у подпрограммы MPI_Isend, однако в отличие от нее пересылка неначинается до вызова подпрограммы MPI_Startall.int MPI_Sendrecv( void *sbuf, int scount, MPI_Datatype stype, int dest, int stag, void *rbuf, intrcount, MPI_Datatype rtype, int source, MPI_Datatype rtag, MPI_Comm comm, MPI_Status*status)••••••••••••sbuf - адрес начала буфера посылки сообщенияscount - число передаваемых элементов в сообщенииstype - тип передаваемых элементовdest - номер процесса-получателяstag - идентификатор посылаемого сообщенияOUT rbuf - адрес начала буфера приема сообщенияrcount - число принимаемых элементов сообщенияrtype - тип принимаемых элементовsource - номер процесса-отправителяrtag - идентификатор принимаемого сообщенияcomm - идентификатор группыOUT status - параметры принятого сообщенияДанная операция объединяет в едином запросе посылку и прием сообщений.Принимающий и отправляющий процессы могут являться одним и тем же процессом.Сообщение, отправленное операцией MPI_Sendrecv, может быть принято обычнымобразом, и точно также операция MPI_Sendrecv может принять сообщение, отправленноеобычной операцией MPI_Send.
Буфера приема и посылки обязательно должны бытьразличными.35. MPI: коллективные операции.В операциях коллективного взаимодействия процессов участвуют все процессыкоммуникатора. Соответствующая процедура должна быть вызвана каждым процессом,быть может, со своим набором параметров. Возврат из процедуры коллективноговзаимодействия может произойти в тот момент, когда участие процесса в даннойоперации уже закончено. Как и для блокирующих процедур, возврат означает то, чторазрешен свободный доступ к буферу приема или посылки, но не означает ни того, чтооперация завершена другими процессами, ни даже того, что она ими начата (если этовозможно по смыслу операции).int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int source, MPI_Comm comm)OUT buf - адрес начала буфера посылки сообщенияcount - число передаваемых элементов в сообщенииdatatype - тип передаваемых элементовsource - номер рассылающего процессаcomm - идентификатор группыРассылка сообщения от процесса source всем процессам, включая рассылающийпроцесс.
При возврате из процедуры содержимое буфера buf процесса source будетскопировано в локальный буфер процесса. Значения параметров count, datatype и sourceдолжны быть одинаковыми у всех процессов.int MPI_Gather( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount,MPI_Datatype rtype, int dest, MPI_Comm comm)sbuf - адрес начала буфера посылкиscount - число элементов в посылаемом сообщенииstype - тип элементов отсылаемого сообщенияOUT rbuf - адрес начала буфера сборки данныхrcount - число элементов в принимаемом сообщенииrtype - тип элементов принимаемого сообщенияdest - номер процесса, на котором происходит сборка данныхcomm - идентификатор группыOUT ierror - код ошибкиСборка данных со всех процессов в буфере rbuf процесса dest.
Каждый процесс,включая dest, посылает содержимое своего буфера sbuf процессу dest. Собирающийпроцесс сохраняет данные в буфере rbuf, располагая их в порядке возрастания номеровпроцессов. Параметр rbuf имеет значение только на собирающем процессе и на остальныхигнорируется, значения параметров count, datatype и dest должны быть одинаковыми увсех процессов.int MPI_Allreduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op,MPI_Comm comm)sbuf - адрес начала буфера для аргументовOUT rbuf - адрес начала буфера для результатаcount - число аргументов у каждого процессаdatatype - тип аргументовop - идентификатор глобальной операцииcomm - идентификатор группыВыполнение count глобальных операций op с возвратом count результатов во всехпроцессах в буфере rbuf.
Операция выполняется независимо над соответствующимиаргументами всех процессов. Значения параметров count и datatype у всех процессовдолжны быть одинаковыми. Из соображений эффективности реализации предполагается,что операция op обладает свойствами ассоциативности и коммутативности.int MPI_Reduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, introot, MPI_Comm comm)sbuf - адрес начала буфера для аргументовOUT rbuf - адрес начала буфера для результатаcount - число аргументов у каждого процессаdatatype - тип аргументовop - идентификатор глобальной операцииroot - процесс-получатель результатаcomm - идентификатор группыФункция аналогична предыдущей, но результат будет записан в буфер rbuf толькоу процесса root.int MPI_Barrier( MPI_Comm comm)comm - идентификатор группыБлокирует работу процессов, вызвавших данную процедуру, до тех пор, пока всеоставшиеся процессы группы comm также не выполнят эту процедуру.36.
MPI: группы, коммуникаторы.int MPI_Comm_split( MPI_Comm comm, int color, int key, MPI_Comm *newcomm)••••comm - идентификатор группыcolor - признак разделения на группыkey - параметр, определяющий нумерацию в новых группахOUT newcomm - идентификатор новой группыДанная процедура разбивает все множество процессов, входящих в группу comm, нанепересекающиеся подгруппы - одну подгруппу на каждое значение параметра color(неотрицательное число). Каждая новая подгруппа содержит все процессы одного цвета.Если в качестве color указано значение MPI_UNDEFINED, то в newcomm будетвозвращено значение MPI_COMM_NULL.int MPI_Comm_free( MPI_Comm comm)•OUT comm - идентификатор группыУничтожает группу, ассоциированную с идентификатором comm, который послевозвращения устанавливается в MPI_COMM_NULL.37.
Модели параллельных программ: SPMD, мастер/рабочие.Схема мастер/рабочие (master/slaves). Процесс-мастер порождает какое-то числоодинаковых процессов-рабочих, распределяет между ними работу и собирает результат.Приведём для примера текст подобной программы написанной для системы Linda.main(argc, argv)int argc;char *argv[];{int nworker, j, hello();nworker = atoi (argv[l]);for (j = 0; j < nworker; j++)eval ("worker", hello(j));for(j =0; j < nworker; j++)in("done");printf("Hello_world is finished.\n");}int hello (num)/** function hello **/int num;{printf("Hello world from number %d.\n", num);out("done");return(0);}Если много рабочих то мастер не сможет их всех обслужить.SPMD-модель. В рамках этой модели для всех параллельных процессовиспользуется один и тот же код.
Одна программ много данных.38. Модели передачи сообщений Send/Recv и Put/Get; свойства программ,написанных в терминах Put/Get.39. OpenMP: общая концепция.Одним из наиболее популярных средств программирования компьютеров с общейпамятью, базирующихся на традиционных языках программирования и использованииспециальных комментариев, в настоящее время является технология OpenMP. За основуберется последовательная программа, а для создания ее параллельной версиипользователю предоставляется набор директив, процедур и переменных окружения.Стандарт OpenMP разработан для языков Фортран, С и С++.