WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 8 |
Параллельное программирование Message Passing Interface Справочные материалы Часть 1 Для студентов 3 курса дневного отделения Составитель:

Фертиков В.В.

2 Введение MPI (Message Passing Interface, Интерфейс с передачей сообщений) – это стандарт на программный инструментарий для поддержки работы взаимодействующих процессов параллельного приложения. Спецификации вы пускает MPI Форум (MPI Forum) – специальный орган во главе с Аргоннской национальной лабораторией США, образованный основными производителями ЭВМ. MPI предоставляет программисту единый интерфейс к механизму взаимодействия параллельных процессов, независящий от машинной архитектуры и операционной системы. Реализации стандарта MPI разработаны практически для всех современных суперкомпьютеров и даже – для обычных локальных сетей рабочих станций и персональных компьютеров, объединенных стандартным коммуникационным оборудованием. В состав реализаций, как того требует стандарт, входят два обязательных компонента: библиотека программирования для языков C, C++ и Фортран (заголовочные и объектные файлы) и загрузчик параллельных приложений (исполняемых файлов).

Упомянутая головная организация проекта MPI разрабатывает пакет MPICH (MPI CHameleon), удовлетворяющий спецификациям стандарта и получивший широкое распространение благодаря своей мобильности. Пакет, с одной стороны, реализован для большинства платформ самими разработчиками. С другой стороны, он предусматривает достаточно несложную процедуру переноса на новые архитектуры ЭВМ (путем написания драйверов нижнего уровня). Таким образом, большая часть созданных другими разработчиками реализаций MPI базируется на MPICH.

Настоящее пособие содержит краткий справочный материал, необходимый программисту, использующему MPI для создания переносимого параллельного приложения. Текст основан на переводе справочных страниц (manual pages), сопровождающих поставку пакета MPICH и ориентированных, таким образом, на использование с конкретной базовой реализацией стандарта. Пособие состоит из двух частей. Данная первая часть содержит наиболее часто требующийся материал по основным функциям, константам и типам данных, определяемых MPI и реализованных MPICH. Во вторую часть включены сведения, по мнению автора, не являющиеся предметом первой необходимости для начинающего MPI-программиста. Среди них – описание архитектурно-независимого интерфейса для работы с файлами, являющегося частью реализации новой спецификации MPI-2, сведения о работе с пользовательскими топологиями, интеркоммуникаторами, информационными объектами, кэшируемыми атрибутами и пользовательскими обработчиками ошибок.

Пособие адресовано, прежде всего, программистам на языках C и C++, поэтому не содержит описания особенностей использования MPI с Фортраном (что не исключает его использования Фортранпрограммистами, изучившими эти особенности). Тем не менее, автор не счел себя в праве изменять терминологию, заимствованную MPI от Фортрана, что может вызвать недоумение у программистов на языке C. Например, библиотечные функции MPI в пособии именуются подпрограммами, в то время как термин «функция» используется для обозначения пользовательских функций, таких как обработчики ошибок, операционные функции, callback функции атрибутов и т.п. Другой особенностью принятой терминологии является подразделение описываемых параметров подпрограмм на входные и выходные, что обозначает направление обмена данными и никак не связано с выбором механизма передачи параметров при вы зове. Например, подпрограмме MPI_Recv необходимо передать начальный адрес буфера приема сообщения, описанный в руководстве как выходной параметр, поскольку он будет использован подпрограммой для возврата данных вызывающей функции.

Для ускорения поиска в предложенном справочнике удобно руководствоваться принятой в MPI нотацией записи идентификаторов. Правила следующие:

• все идентификаторы начинаются с префикса “MPI_” (который в приводимой ниже таблице ссылок опущен для краткости);

• если идентификатор сконструирован из нескольких слов, слова в нем чаще всего разделяются подчерками (MPI_Get_count, MPI_Comm_rank), хотя имеются и исключения (например, MPI_Sendresv, MPI_Alltoall);

• порядок слов в составном идентификаторе выбирается по принципу «от общего к частному»: сначала префикс “MPI_”, потом название категории (Type, Comm, Group, Attr, Errhandler и т.д.), потом название операции (MPI_Type_commit, MPI_Type_free); наиболее часто употребляемые подпрограммы выпадают из этой схемы, имея короткие и стереотипные названия (MPI_Barrier, MPI_Unpack…);

• имена констант (и неизменяемых пользователем переменных) записываются полностью заглавными буквами (MPI_COMM_WORLD, MPI_FLOAT), в именах подпрограмм первая за префиксом буква – заглавная, остальные – строчные, даже если идентификатор состоит из нескольких слов (MPI_Allreduce, MPI_Waitany).

Таблица ссылок содержит номера страниц пособия 5. Константы 26. Group_free 42. Sendrecv 9. Abort 26. Group_incl 42. Sendrecv_replace 10. Address 26. Group_intersection 43. Ssend 10. Allgather 27. Group_range_excl 43. Ssend_init 11. Allgatherv 27. Group_range_incl 43. Start 11. Allreduce 28. Group_rank 44. Startall 12. Alltoall 28. Group_size 44. Status_set_cancelled 12. Alltoallv 28. Group_translate_ranks 44. Status_set_elements 13. Barrier 29. Group_union 44. Test 13. Bcast 29. Ibsend 45. Test_cancelled 14. Bsend 29. Init 45. Testall 15. Bsend_init 31. Init_thread 46. Testany 15. Buffer_attach 31. Initialized 46. Testsome 16. Buffer_detach 31. Iprobe 47. Type_commit 17. Cancel 32. Irecv 47. Type_contiguous 17. Comm_compare 32. Irsend 47. Type_create_darray 18. Comm_create 33. Isend 48. Type_create_subarray 18. Comm_dup 33. Issend 49. Type_extent 18. Comm_free 33. Op_create 49. Type_free 19. Comm_group 34. Op_free 49. Type_get_contents 19. Comm_rank 34. Pack 50. Type_get_envelope 20. Comm_remote_group 35. Pack_size 51. Type_hvector 20. Comm_remote_size 35. Pcontrol 52. Type_lb 20. Comm_size 36. Probe 52. Type_size 21. Comm_split 36. Recv 52. Type_struct 21. Finalize 36. Recv_init 53. Type_ub 22. Finalized 37. Reduce 54. Type_vector 22. Gather 37. Reduce_scatter 54. Unpack 22. Gatherv 38. Request_free 54. Wait 23. Get_count 38. Rsend 55. Waitall 23. Get_elements 39. Rsend_init 55. Waitany 24. Get_processor_name 39. Scan 55. Waitsome 24. Get_version 40. Scatter 56. Wtick 24. Group_compare 40. Scatterv 56. Wtime 25. Group_difference 41. Send 25. Group_excl 41. Send_init Константы Значение констант, определенных в MPI Типы данных языка C. Данные типы должны использоваться только в программах на C (не в Фортране). Все эти константы имеют тип MPI_Datatype.



MPI_CHAR char MPI_BYTE Как unsigned char MPI_SHORT short MPI_INT int MPI_LONG long MPI_FLOAT float MPI_DOUBLE double MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long MPI_LONG_DOUBLE long double (некоторые системы могут не реализовывать) Следующие типы данных – для функций MPI MPI_MAXLOC и MPI_MINLOC.

MPI_FLOAT_INT struct { float, int } MPI_LONG_INT struct { long, int } MPI_DOUBLE_INT struct { double, int } MPI_SHORT_INT struct { short, int } MPI_2INT struct { int, int } MPI_LONG_DOUBLE_INT struct { long double, int }; этот тип НЕОБЯЗАТЕЛЕН, может быть определен как NULL MPI_LONG_LONG_INT struct { long long, int }; этот тип НЕОБЯЗАТЕЛЕН, может быть определен как NULL Специальные типы данных MPI_PACKED Для MPI_Pack и MPI_Unpack MPI_UB Для MPI_Type_struct; индикатор верхней границы MPI_LB Для MPI_Type_struct; индикатор нижней границы Коммуникаторы. Имеют тип MPI_Comm MPI_COMM_WORLD Содержит все процессы MPI_COMM_SELF Содержит только вызывающий процесс Группы. Имеют тип MPI_Group MPI_GROUP_EMPTY Группа не, содержащая никаких членов.

Результаты операций сравнения MPI_IDENT Идентично MPI_CONGRUENT (Только для MPI_comm_compare) группы идентичны MPI_SIMILAR Те же самые члены, но в различающемся порядке MPI_UNEQUAL Различно Коллективные операции. Вызовы коллективных операций (MPI_Reduce, MPI_Allreduce, MPI_Reduce_scatter и MPI_Scan) требуют указания комбинаторной операции. Эта операция имеет тип MPI_Op. Предопределенные операции следующие:

MPI_MAX Возвращает максимум MPI_MIN Возвращает минимум MPI_SUM Возвращает сумму MPI_PROD Возвращает произведение MPI_LAND Возвращает логическое и MPI_BAND Возвращает поразрядное и MPI_LOR Возвращает логическое или MPI_BOR Возвращает поразрядное или MPI_LXOR Возвращает логическое исключительное или MPI_BXOR Возвращает поразрядное исключительное или MPI_MINLOC Возвращает минимум и расположение (фактически, значение второго элемента структуры, где минимум первого найден) MPI_MAXLOC Возвращает максимум и расположение Примечания. Операционные функции (MPI_Op) не возвращают значение ошибки. Если функции обнаруживают ошибку, они могут либо вы звать MPI_Abort, либо незаметно проигнорировать проблему. Таким образом, если Вы замените драйвер ошибки MPI_ERRORS_ARE_FATAL каким-либо другим, например MPI_ERRORS_RETURN, то невозможно будет обнаружить никакую ошибку.

Обратите внимание также, что не все типы данных могут использоваться этими функциями. Например, MPI_COMPLEX недопустим для MPI_MAX и MPI_MIN. Кроме того, стандарт MPI 1.1 не включает C типы MPI_CHAR и MPI_UNSIGNED_CHAR в список арифметических типов для операций, подобных MPI_SUM. Однако поскольку C тип char является целочисленным (подобно short), он должен быть включен. MPI Форум будет, вероятно, включать char и unsigned char как разъяснение к MPI 1.1; до тех пор пользователей уведомляют, что MPI реализации не могут рассматривать MPI_CHAR и MPI_UNSIGNED_CHAR как допустимые типы данных для MPI_SUM, MPI_PROD и т.д. MPICH, тем не менее, допускает эти типы данных.

Постоянные значения ключа MPI_TAG_UB Самое большое значение идентификатора MPI_HOST Номер процесса, который является главным, если есть MPI_IO Номер процесса, который может делать ввод - вывод MPI_WTIME_IS_GLOBAL Имеет значение 1, если MPI_Wtime глобально синхронизировано.

Пустые объекты MPI_COMM_NULL Пустой коммуникатор MPI_OP_NULL Пустая операция MPI_GROUP_NULL Пустая группа MPI_DATATYPE_NULL Пустой тип данных MPI_REQUEST_NULL Пустой запрос MPI_ERRHANDLER_NULL Пустой драйвер ошибки Предопределенные константы MPI_MAX_PROCESSOR_NAME Максимальная длина имени, возвращаемого MPI_Get_processor_name MPI_MAX_ERROR_STRING Максимальная длина строки, возвращаемой MPI_Error_string MPI_UNDEFINED Используется многими подпрограммами для обозначения неопределенного или неизвестного целочисленного значения MPI_UNDEFINED_RANK Неизвестный номер процесса MPI_KEYVAL_INVALID Специальное значение ключа, которое может использоваться, чтобы обнаружить неинициализированное значение ключа.

MPI_BSEND_OVERHEAD Добавьте это к размеру буфера MPI_Bsend для каждого ожидающего обработки сообщения MPI_PROC_NULL Этот номер процесса может использоваться, чтобы посылать в никуда или получать ниоткуда.





MPI_ANY_SOURCE При приеме – получить сообщение от любого процесса.

MPI_ANY_TAG При приеме – получить сообщение с любым значением идентификатора.

MPI_BOTTOM Может использоваться, чтобы указать нижнюю границу адресного пространства Типы топологии MPI_GRAPH Общий граф MPI_CART Декартова сетка MPI статус MPI_Status тип данных – структура. Три элемента, предназначенные для использования программистами, следующие:

MPI_SOURCE Кто послал сообщение MPI_TAG С каким идентификатором сообщение было послано MPI_ERROR Любая возвращаемая ошибка Специальные MPI типы и функции MPI_Aint Тип C, который сохраняет любой имеющий силу адрес.

MPI_Handler_function Функция C для обработки ошибок (см.

MPI_Errhandler_create).

MPI_User_function Функция C для объединения значений (см.

коллективные операции и MPI_Op_create) MPI_Copy_function Функция для копирования атрибутов (см.

MPI_Keyval_create) MPI_NULL_COPY_FN Предопределенная функция копирования MPI_Delete_function Функция для удаления атрибутов (см.

MPI_Keyval_create) MPI_NULL_DELETE_FN Предопределенная функция удаления MPI_DUP_FN Предопределенная функция дублирования MPI_ERRORS_ARE_FATAL Драйвер ошибки, который вынуждает вы ход по ошибке MPI_ERRORS_RETURN Драйвер ошибки, который возвращает коды ошибки (как значение MPI подпрограммы) Ошибки. Все MPI подпрограммы (за исключением MPI_Wtime и MPI_Wtick) возвращают коды ошибок как значение функции. Перед возвратом значения вызывается текущий (установленный) MPI драйвер ошибки. По умолчанию этот драйвер ошибки прерывает работу MPI. Драйвер ошибки может быть заменен при помощи MPI_Errhandler_set; в частности, предопределенный драйвер ошибки MPI_ERRORS_RETURN может использоваться, чтобы заставить подпрограммы возвращать значения ошибок. Обратите внимание: MPI не гарантирует, что программа MPI может продолжаться после ошибки.

MPI классы ошибок MPI_SUCCESS Успешный код возврата MPI_ERR_BUFFER Недопустимый указатель буфера MPI_ERR_COUNT Недопустимый параметр – счетчик MPI_ERR_TYPE Недопустимый параметр типа данных MPI_ERR_TAG Недопустимый параметр идентификатора MPI_ERR_COMM Недопустимый коммуникатор MPI_ERR_RANK Недопустимый номер процесса MPI_ERR_ROOT Недопустимый корень MPI_ERR_GROUP Пустая группа, переданная функции MPI_ERR_OP Недопустимая операция MPI_ERR_TOPOLOGY Недопустимая топология MPI_ERR_DIMS Запрещенный параметр измерения MPI_ERR_ARG Недопустимый параметр MPI_ERR_UNKNOWN Неизвестная ошибка MPI_ERR_TRUNCATE Сообщение усечено при приеме MPI_ERR_OTHER Другая ошибка; используйте Error_string MPI_ERR_INTERN Код внутренней ошибки MPI_ERR_IN_STATUS Смотрите значение ошибки в состоянии MPI_ERR_PENDING Ждущий запрос MPI_ERR_REQUEST Запрещенный дескриптор MPI_Request MPI_ERR_LASTCODE Последний код ошибки – всегда в конце MPI_Abort Прерывает выполнение MPI среды int MPI_Abort(MPI_Comm comm, int errorcode) Входные параметры comm Коммуникатор прерываемых задач errorcode Код ошибки для возврата вызвавшей среде Примечание. Завершает все процессы MPI, связанные с коммуникатором comm; в большинстве систем завершает все процессы.

MPI_Address Получает адрес расположения в памяти int MPI_Address(void *location, MPI_Aint *address) Входной параметр location Расположение в памяти вызывающей программы (указатель) Выходной параметр address Адрес расположения (целое число) Примечание. Эта подпрограмма предусмотрена как для Фортрана, так и для программистов на C. На многих системах адрес, возвращенный этой подпрограммой, будет тем же, что и производимый C оператором &, поэтому она не требуется в C и может неправильно работать на системах с командами, ориентированными на обаботку слов, и тем более, байтов, или системах с сегментированными адресными пространствами.

MPI_Allgather Собирает данные из всех задач и распределяет их всем задачам int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Входные параметры sendbuf Начальный адрес буфера посылки (указатель) sendcount Число элементов в буфере посылки (целое число) sendtype Тип данных элементов буфера посылки (дескриптор) recvcount Число элементов, полученных от любого процесса (целое число) recvtype Тип данных элементов буфера приема (дескриптор) comm Коммуникатор (дескриптор) Выходной параметр recvbuf Адрес буфера приема (указатель) Примечание. Стандарт MPI (1.0 и 1.1) говорит: j-тый блок данных, посланный из каждого процесса, получает каждый процесс и помещает его в j-том блоке буфера recvbuf. Точнее: блок данных, посланный из j-того процесса, получает каждый процесс и помещает его в j-том блоке буфера recvbuf.

MPI_Allgatherv Собирает данные из всех задач и поставлет их всем задачам int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm) Входные параметры sendbuf Начальный адрес буфера посылки (указатель) sendcount Число элементов в буфере посылки (целое число) sendtype Тип данных элементов буфера посылки (дескриптор) recvcounts Целочисленный массив (длиной, равной размеру группы) содержащий число элементов, которые получены от каждого процесса displs Целочисленный массив (длиной, равной размеру группы).

Pages:     || 2 | 3 | 4 | 5 |   ...   | 8 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.