Главная » Просмотр файлов » Руководство по MPI

Руководство по MPI (547935), страница 2

Файл №547935 Руководство по MPI (Руководство по MPI) 2 страницаРуководство по MPI (547935) страница 22015-08-23СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Сложный тип аргументов MPI_Init предусмотрен для того, чтобы передавать всем процессам аргументы main:

int main(int argc, char** argv)

{

MPI_Init(&argc, &argv);

...

MPI_Finalize();

}

Процедура MPI_Comm_size

Формат процедуры:

int MPI_Comm_size(MPI_Comm comm, int* size), где

  • comm - идентификатор группы;

  • OUT size - размер группы.

Данная процедура обеспечивает определение общего числа параллельных процессов в группе comm.

Процедура MPI_Comm_rank

Формат процедуры:

int MPI_Comm_rank(MPI_comm comm, int* rank), где

  • comm - идентификатор группы;

  • OUT rank - номер вызывающего процесса в группе comm.

Данная процедура обеспечивает определение номера процесса в группе comm. Значение, возвращаемое по адресу &rank, лежит в диапазоне от 0 до size_of_group-1.

Процедура MPI_Wtime

Формат процедуры:

double MPI_Wtime(void)

Данная процедура возвращает астрономическое время в секундах (вещественное число), прошедшее с некоторого момента в прошлом. Гарантируется, что этот момент не будет изменен за время существования процесса.

    1. Процедуры приема / передачи сообщений

Процедуры данной группы составляют основу взаимодействия процессов. Базовым механизмом связи между процессами в MPI является посылка и прием сообщений. Основными функциями, обеспечивающими связь “точка-точка” являются операторы send и receive.

Процедура MPI_Send

Формат процедуры:

int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm), где

  • buf - адрес начала буфера посылки сообщения;

  • count - число передаваемых элементов в сообщении;

  • datatype - тип передаваемых элементов;

  • dest - номер процесса-получателя;

  • msgtag - идентификатор сообщения;

  • comm - идентификатор группы.

Данная процедура осуществляет блокирующую посылку сообщения с идентификатором msgtag, состоящего из count элементов типа datatype, процессу с номером dest. Все элементы сообщения расположены подряд в буфере buf. Значение count может быть нулем. Тип передаваемых элементов datatype должен указываться с помощью предопределенных констант типа.

Разрешается передавать сообщение самому себе.

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

Процедура MPI_Recv

Формат процедуры:

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_comm comm, MPI_Status *status), где

  • OUT buf - адрес начала буфера приема сообщения;

  • count - максимальное число элементов в принимаемом сообщении;

  • datatype - тип элементов принимаемого сообщения;

  • source - номер процесса-отправителя;

  • msgtag - идентификатор принимаемого сообщения;

  • comm - идентификатор группы;

  • OUT status - параметры принятого сообщения.

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

Блокировка гарантирует, что после возврата из подпрограммы все элементы сообщения приняты и расположены в буфере buf.

В качестве номера процесса-отправителя можно указать предопределенную константу MPI_ANY_SOURCE - признак того, что подходит сообщение от любого процесса. В качестве идентификатора принимаемого сообщения можно указать константу MPI_ANY_TAG - признак того, что подходит сообщение с любым идентификатором.

Если процесс посылает два сообщения другому процессу, и оба эти сообщения соответствуют одному и тому же вызову MPI_Recv, то первым будет принято то сообщение, которое было отправлено раньше.

Процедура MPI_Get_Count

Формат процедуры:

int MPI_Get_Count(MPI_Status *status, MPI_Datatype datatype, int *count), где

  • status - параметры принятого сообщения;

  • datatype - тип элементов принятого сообщения;

  • OUT count - число элементов сообщения.

По значению параметра status данная процедура определяет число уже принятых (после обращения к MPI_Recv) или принимаемых (после обращения к MPI_Probe или MPI_IProbe) элементов сообщения типа datatype.

Процедура MPI_Probe

Формат процедуры:

int MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status), где

  • source - номер процесса-отправителя или MPI_ANY_SOURCE;

  • msgtag - идентификатор ожидаемого сообщения или MPI_ANY_TAG;

  • comm - идентификатор группы;

  • OUT status - параметры обнаруженного сообщения.

Данная процедура обеспечивает получение информации о структуре ожидаемого сообщения с блокировкой. Возврата из подпрограммы не произойдет до тех пор, пока сообщение с подходящим идентификатором и номером процесса-отправителя не будет доступно для получения. Атрибуты доступного сообщения можно определить обычным образом с помощью параметра status. Следует обратить внимание, что подпрограмма определяет только факт прихода сообщения, но реально его не принимает.

Процедура MPI_Isend

Формат процедуры:

int MPI_ISend(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_Send, однако возврат из процедуры происходит сразу после инициализации процесса передачи без ожидания обработки всего сообщения, находящегося в буфере buf. Это означает, что нельзя повторно использовать данный буфер для других целей без получения дополнительной информации о завершении данной посылки. Окончание процесса передачи (т.е. того момента, когда можно переиспользовать буфер buf без опасения испортить передаваемое сообщение) можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test.

Сообщение, отправленное любой из процедур MPI_Send и MPI_ISend, может быть принято любой из процедур MPI_Recv и MPI_IRecv.

Процедура MPI_Irecv

Формат процедуры:

int MPI_IRecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_comm comm, MPI_Request *request), где

  • OUT buf - адрес начала буфера приема сообщения;

  • count - максимальное число элементов в принимаемом сообщении;

  • datatype - тип элементов принимаемого сообщения;

  • source - номер процесса-отправителя;

  • msgtag - идентификатор принимаемого сообщения;

  • comm - идентификатор группы;

  • OUT request - идентификатор асинхронного приема сообщения.

Данная процедура осуществляет прием сообщения, аналогичный MPI_Recv, однако возврат из процедуры происходит сразу после инициализации процесса приема без ожидания получения сообщения в буфере buf. Окончание процесса приема можно определить с помощью параметра request и процедур MPI_Wait и MPI_Test.

Процедура MPI_Wait

Формат процедуры:

int MPI_Wait(MPI_Request *request, MPI_Status *status), где

  • request - идентификатор асинхронного приема или передачи;

  • OUT status - параметры сообщения.

Процедура осуществляет ожидание завершения асинхронных процедур MPI_ISend или MPI_IRecv, ассоциированных с идентификатором request. В случае приема, атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status.

Процедура MPI_WaitAll

Формат процедуры:

int MPI_WaitAll(int count, MPI_Request *requests, MPI_Status *statuses), где

  • count - число идентификаторов;

  • requests - массив идентификаторов асинхронного приема или передачи;

  • OUT statuses - параметры сообщений.

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

Процедура MPI_WaitAny

Формат процедуры:

int MPI_WaitAny(int count, MPI_Request *requests, int *index, MPI_Status *status), где

  • count - число идентификаторов;

  • requests - массив идентификаторов асинхронного приема или передачи;

  • OUT index - номер завершенной операции обмена;

  • OUT status - параметры сообщений.

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

Процедура MPI_WaitSome

Формат процедуры:

int MPI_WaitSome(int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses), где

  • incount - число идентификаторов;

  • requests - массив идентификаторов асинхронного приема или передачи;

  • OUT outcount - число идентификаторов завершившихся операций обмена;

  • OUT indexes - массив номеров завершившихся операций обмена;

  • OUT statuses - параметры завершившихся сообщений.

Выполнение процесса блокируется до тех пор, пока, по крайней мере, одна из операций обмена, ассоциированных с указанными идентифика-торами, не будет завершена. Параметр outcount содержит число завершенных операций, а первые outcount элементов массива indexes содержат номера элементов массива requests с их идентификаторами. Первые outcount элементов массива statuses содержат параметры завершенных операций.

Процедура MPI_Test

Формат процедуры:

int MPI_Test( MPI_Request *request, int *flag, MPI_Status *status), где

  • request - идентификатор асинхронного приема или передачи;

  • OUT flag - признак завершенности операции обмена;

  • OUT status - параметры сообщения.

Данная процедура осуществляет проверку завершенности асинхронных процедур MPI_ISend или MPI_IRecv, ассоциированных с идентифика-тором request. В параметр flag возвращается значение 1, если соответствующая операция завершена, и значение 0 в противном случае. Если завершена процедура приема, то атрибуты и длину полученного сообщения можно определить обычным образом с помощью параметра status.

Процедура MPI_TestAll

Формат процедуры:

int MPI_TestAll( int count, MPI_Request *requests, int *flag, MPI_STatus *statuses), где

  • count - число идентификаторов;

  • requests - массив идентификаторов асинхронного приема или передачи;

  • OUT flag - признак завершенности операций обмена;

  • OUT statuses - параметры сообщений.

В результате выполнения данной процедуры, параметр flag возвращается значение 1, если все операции, ассоциированные с указанными идентификаторами, завершены (с указанием параметров сообщений в массиве statuses). В противном случае возвращается 0, а элементы массива statuses не определены.

Процедура MPI_TestAny

Формат процедуры:

int MPI_TestAny(int count, MPI_Request *requests, int *index, int *flag, MPI_Status *status), где

  • count - число идентификаторов;

  • requests - массив идентификаторов асинхронного приема или передачи;

  • OUT index - номер завершенной операции обмена;

  • OUT flag - признак завершенности операции обмена;

  • OUT status - параметры сообщения.

Если к моменту вызова данной процедуры хотя бы одна из операций обмена завершилась, то в параметр flag возвращается значение 1, index содержит номер соответствующего элемента в массиве requests, а status - параметры сообщения.

Характеристики

Тип файла
Документ
Размер
555,5 Kb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее