П аралле ль ное п рог рам м ирование
Message Passing Interface С п равочны е м ате риалы Ч асть 1 Д ля студе нтов 3 кур...
24 downloads
236 Views
386KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
П аралле ль ное п рог рам м ирование
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, све де ния о работе с п оль зовате ль ским и топ олог ия м и, инте рком м уникаторам и, информ ационны м и объ е ктам и, кэшируе м ы м и атрибутам и и п оль зовате ль ским и обработчикам и ошибок.
3 П особие адре совано, п ре жде все г о, п рог рам м истам на я зы ках 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).
4
Т аб л и ц а с с ы л ок 5. К онстанты 9. Abort 10. Address 10. Allgather 11. Allgatherv 11. Allreduce 12. Alltoall 12. Alltoallv 13. Barrier 13. Bcast 14. Bsend 15. Bsend_init 15. Buffer_attach 16. Buffer_detach 17. Cancel 17. Comm_compare 18. Comm_create 18. Comm_dup 18. Comm_free 19. Comm_group 19. Comm_rank 20. Comm_remote_group 20. Comm_remote_size 20. Comm_size 21. Comm_split 21. Finalize 22. Finalized 22. Gather 22. Gatherv 23. Get_count 23. Get_elements 24. Get_processor_name 24. Get_version 24. Group_compare 25. Group_difference 25. Group_excl
соде ржит ном е ра страниц п особия
26. Group_free 42. Sendrecv 26. Group_incl 42. Sendrecv_replace 26. Group_intersection 43. Ssend 27. Group_range_excl 43. Ssend_init 27. Group_range_incl 43. Start 28. Group_rank 44. Startall 28. Group_size 44. Status_set_cancelled 28. Group_translate_ranks 44. Status_set_elements 29. Group_union 44. Test 29. Ibsend 45. Test_cancelled 29. Init 45. Testall 31. Init_thread 46. Testany 31. Initialized 46. Testsome 31. Iprobe 47. Type_commit 32. Irecv 47. Type_contiguous 32. Irsend 47. Type_create_darray 33. Isend 48. Type_create_subarray 33. Issend 49. Type_extent 33. Op_create 49. Type_free 34. Op_free 49. Type_get_contents 34. Pack 50. Type_get_envelope 35. Pack_size 51. Type_hvector 35. Pcontrol 52. Type_lb 36. Probe 52. Type_size 36. Recv 52. Type_struct 36. Recv_init 53. Type_ub 37. Reduce 54. Type_vector 37. Reduce_scatter 54. Unpack 38. Request_free 54. Wait 38. Rsend 55. Waitall 39. Rsend_init 55. Waitany 39. Scan 55. Waitsome 40. Scatter 56. Wtick 40. Scatterv 56. Wtime 41. Send 41. Send_init
5
К онс танты
Значе ние констант, оп ре де ле нны х в MPI
Т и пы данны х я зы ка C.
Д анны е тип ы должны исп оль зовать ся толь ко в п рог рам м ах на C (не в Фортране ). Все эти константы им е ют тип MPI_Datatype. MPI_CHAR MPI_BYTE MPI_SHORT MPI_INT MPI_LONG MPI_FLOAT MPI_DOUBLE MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_LONG_DOUBLE С ле дующие тип ы MPI_MINLOC.
char К ак unsigned char short int long float double unsigned char unsigned short unsigned int unsigned long long double (не которы е систе м ы м ог ут не ре ализовы вать ) данны х – для функций MPI MPI_MAXLOC и
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_UB MPI_LB
Д ля MPI_Pack и MPI_Unpack Д ля MPI_Type_struct; индикатор ве рхне й г раницы Д ля MPI_Type_struct; индикатор нижне й г раницы
6
К ом м уни каторы .
Им е ют тип MPI_Comm MPI_COMM_WORLD С оде ржит все п роце ссы MPI_COMM_SELF С оде ржит толь ко вы зы вающий п роце сс
Группы . Им е ют тип MPI_GROUP_EMPTY
MPI_Group Груп п а не , соде ржащая никакихчле нов.
Резул ьтаты операц и й с равнени я MPI_IDENT MPI_CONGRUENT MPI_SIMILAR MPI_UNEQUAL
Иде нтично (Т оль ко для MPI_comm_compare) г руп п ы иде нтичны Т е же сам ы е чле ны , но в различающе м ся п оря дке Различно
К ол л екти вны е операц и и .
Вы зовы колле ктивны х оп е раций (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
7 и 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_IO Н ом е р п роце сса, которы й м оже т де лать ввод вы вод MPI_WTIME_IS_GLOBAL Им е е т значе ние 1, е сли MPI_Wtime г лобаль но синхронизировано.
MPI_TAG_UB MPI_HOST
Пус ты е об ъекты 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
8 Этот ном е р п роце сса м оже т исп оль зовать ся , чтобы п осы лать в никуда или п олучать ниоткуда. П ри п рие м е – п олучить сообще ние от любог о п роце сса. П ри п рие м е – п олучить сообще ние с любы м значе ние м иде нтификатора. М оже т исп оль зовать ся , чтобы указать нижнюю г раницу адре сног о п ространства
Т и пы топол оги и MPI_GRAPH MPI_CART
О бщий г раф Д е картова се тка
MPI с татус MPI_Status тип данны х – структура. Т ри эле м е нта, п ре дназначе нны е для исп оль зования п рог рам м истам и, сле дующие : MPI_SOURCE К то п ослалсообще ние MPI_TAG С каким иде нтификатором сообще ние бы ло п ослано MPI_ERROR Л юбая возвращае м ая ошибка
Спец и ал ьны е MPI ти пы и функц и и Т ип 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_Aint
9
Оши б ки .
MPI_Wtime и Все MPI п одп рог рам м ы (за исключе ние м 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 MPI_ERR_INTERN MPI_ERR_IN_STATUS MPI_ERR_PENDING MPI_ERR_REQUEST MPI_ERR_LASTCODE
У сп е шны й код возврата Н е доп устим ы й указате ль буфе ра Н е доп устим ы й п арам е тр – сче тчик Н е доп устим ы й п арам е тр тип а данны х Н е доп устим ы й п арам е тр иде нтификатора Н е доп устим ы й ком м уникатор Н е доп устим ы й ном е р п роце сса Н е доп устим ы й коре нь П устая г руп п а, п е ре данная функции Н е доп устим ая оп е рация Н е доп устим ая топ олог ия Зап ре ще нны й п арам е тр изм е ре ния Н е доп устим ы й п арам е тр Н е изве стная ошибка С ообще ние усе че но п ри п рие м е Д руг ая ошибка; исп оль зуйте Error_string К од внутре нне й ошибки С м отрите значе ние ошибки в состоя нии Ж дущий зап рос Зап ре ще нны й де скрип тор MPI_Request П осле дний код ошибки – все г да в конце
MPI_Abort
П ре ры вае т вы п олне ние MPI сре ды
int MPI_Abort(MPI_Comm comm, int errorcode)
В ходны е парам етры comm errorcode
К ом м уникатор п ре ры вае м ы х задач К од ошибки для возврата вы звавше й сре де
При м ечани е. Заве ршае т все
п роце ссы MPI, свя занны е с ком м уникатором comm; в боль шинстве систе м заве ршае т все п роце ссы .
10
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.
11
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
recvtype comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ) соде ржащий число эле м е нтов, которы е п олуче ны от каждог о п роце сса Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ) . Эле м е нт i оп ре де ля е т см е ще ние (относите ль но recvbuf), с которы м п ом е стить входя щие данны е из п роце сса i Т ип данны хэле м е нтов буфе ра п рие м а (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль )
MPI_Allreduce
О бъ е диня е т значе ния из все х п роце ссов и расп ре де ля е т ре зуль тат все м п роце ссам
int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
В ходны е парам етры sendbuf count datatype op comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) О п е рация (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Н ачаль ны й адре с буфе ра п рие м а (указате ль )
12
MPI_Alltoall
П осы лае т данны е от все хп роце ссов все м
int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, MPI_Comm comm)
В ходны е парам етры sendbuf sendcount sendtype recvcount recvtype comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов, п осы лае м ы х каждом у п роце ссу (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) Ч исло эле м е нтов, п олуче нны х от любог о п роце сса (це лое число) Т ип данны хэле м е нтов буфе ра п рие м а (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль )
MPI_Alltoallv
П осы лае т данны е от все х п роце ссов все м , со см е ще ние м
int MPI_Alltoallv(void *sendbuf, int *sendcnts, int *sdispls, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
В ходны е парам етры sendbuf sendcounts sdispls
sendtype recvcounts
rdispls
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ц е лочисле нны й м ассив, равны й разм е ру г руп п ы , оп ре де ля ющий число эле м е нтов, п осы лае м ы хкаждом у п роце ссу Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ). Эле м е нт j оп ре де ля е т см е ще ние (относите ль но sendbuf), п о котором у брать исходя щие данны е , п ре дназначе нны е для п роце сса j Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) Ц е лочисле нны й м ассив, равны й разм е ру г руп п ы , оп ре де ля ющий м аксим аль ны е числа эле м е нтов, которы е м ог ут бы ть п олуче ны от каждог о п роце сса Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ). Эле м е нт i оп ре де ля е т см е ще ние (относите ль но recvbuf), п о
recvtype comm
13 котором у разм е стя тся входя щие данны е из п роце сса i Т ип данны хэле м е нтов буфе ра п рие м а (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль )
MPI_Barrier
Блокируе т п роце сс, п ока все п роце ссы не достиг нут э той п одп рог рам м ы .
int MPI_Barrier(MPI_Comm comm)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
При м ечани е.
Блокируе т вы зы вающую п рог рам м у, п ока все чле ны г руп п ы не вы звали эту п одп рог рам м у; возврат в любом п роце ссе п роизойде т толь ко п осле тог о как все чле ны г руп п ы сде лают вы зов.
Ал гори тм .
Е сли не т соотве тствующе й ап п аратной п одде ржки обслуживае м ы м устройством , исп оль зуе тся де ре во-п одобны й или ком бинированны й алг оритм , чтобы разослать сообще ние все м чле нам ком м уникатора. В даль не йше м разработчики ре ализации м ог ут изм е нить алг оритм , чтобы исп оль зовать "блоки" (см . MPI_Bcast).
MPI_Bcast
Рассы лае т сообще ние из п роце сса с ном е ром "коре нь " все м друг им п роце ссам г руп п ы .
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
В ходны е/вы ходны е парам етры buffer count datatype root comm
Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (це лое число) Т ип данны хбуфе ра (де скрип тор) Н ом е р корня широкове щате ль ной п е ре дачи (це лое число) К ом м уникатор (де скрип тор)
Ал гори тм .
П ри отсутствии ап п аратной п одде ржки, эта функция исп оль зуе т де ре воп одобны й алг оритм , чтобы разослать сообще ние блокам п роце ссов. Зате м исп оль зуе тся лине йны й алг оритм , чтобы разослать сообще ние из п е рвог о п роце сса в блоке все м друг им п роце ссам . MPIR_BCAST_BLOCK_SIZE оп ре де ля е т разм е р блоков. Е сли он установле н в 1, функция эквивале нтна исп оль зованию чистог о алг оритм а де ре ва.
14 Е сли он установле н равны м разм е ру г руп п ы или боль шим , это – чисты й лине йны й алг оритм . Значе ние должно корре ктировать ся , чтобы оп ре де лить наиболе е эффе ктивное значе ние на различны х м ашинах.
MPI_Bsend
О сновная п осы лка сообще ния с указанной п оль зовате ле м буфе ризацие й
int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
При м ечани я .
Эта п осы лка обе сп е че на для удобства; она п озволя е т п оль зовате лю п осы лать сообще ния бе з оп асе ния относите ль но тог о, г де они буфе ризованы (п осколь ку п оль зовате ль сам долже н обе сп е чить буфе рное п ространство MPI_Buffer_attach). Ре шая , сколь ко буфе рног о п ространства не обходим о расп ре де лить , п ом ните , что буфе рное п ространство не доступ но для п овторног о исп оль зования п осле дующим MPI_Bsend, е сли Вы не уве ре ны , что сообще ние бы ло п олуче но. Н ап рим е р, сле дующий код не расп ре де ля е т достаточног о буфе рног о п ространства: MPI_Buffer_attach(b, n*sizeof(double)+ MPI_BSEND_OVERHEAD); for (i=0; i<m; i++) { MPI_Bsend(buf, n, MPI_DOUBLE, ...); } п отом у что достаточное буфе рное п ространство п ре дусм отре но толь ко для одиночной п осы лки и цикл м оже т начать вторую MPI_Bsend п ре жде , че м п е рвая вы п олнится , исп оль зуя буфе р. В п рог рам м ах на C Вы м оже те вы нуждать доставку сообще ний п ри п ом ощи MPI_Buffer_detach(&b, &n); MPI_Buffer_attach(b, n); (MPI_Buffer_detach не буде т заве ршать ся , п ока все буфе ризованны е сообще ния не доставле ны .)
15
См . также
MPI_Buffer_attach, MPI_Ibsend, MPI_Bsend_init
MPI_Bsend_init
Форм ируе т де скрип тор для буфе ризованной п осы лки
int MPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло п осланны хэле м е нтов (це лое число) Т ип каждог о эле м е нта (де скрип тор) Н ом е р адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Buffer_attach
П рисое диня е т оп ре де ля е м ы й п оль зовате ле м буфе р к п осы лке
int MPI_Buffer_attach(void *buffer, int size)
В ходны е парам етры buffer size
Н ачаль ны й адре с буфе ра (указате ль ) Разм е р буфе ра в байтах(це лое число)
При м ечани я . Д
анны й разм е р долже н бы ть раве н сум м е разм е ров все х ожидающих обработки Bsend, которы е Вы п ре дп олаг ае те им е ть , п люс не сколь ко соте н байтов для каждой Bsend, которую Вы де лае те . Д ля це ле й вы числе ния разм е ра Вы должны исп оль зовать MPI_Pack_size. Д руг им и словам и, в коде MPI_Buffer_attach(buffer, size); MPI_Bsend(..., count=20, datatype=type1, ...); ... MPI_Bsend(..., count=40, datatype=type2, ...); значе ние size п ри вы зове MPI_Buffer_attach должно п ре восходить значе ние , вы числе нное п ри п ом ощи:
16 MPI_Pack_size(20, type1, comm, &s1); MPI_Pack_size(40, type2, comm, &s2); size = s1 + s2 + 2 * MPI_BSEND_OVERHEAD; MPI_BSEND_OVERHEAD дае т м аксим аль ное количе ство п ространства, которое м оже т исп оль зовать ся в буфе ре BSEND п одп рог рам м ам и. Это значе ние находится в mpi.h.
См . также MPI_Buffer_detach, MPI_Bsend
MPI_Buffer_detach
У даля е т суще ствующий буфе р (для исп оль зования в MPI_Bsend и т.п .)
int MPI_Buffer_detach(void *bufferptr, int *size)
В ы ходны е парам етры buffer size
Н ачаль ны й адре с буфе ра (указате ль ) Разм е р буфе ра в байтах(це лое число)
При м ечани е. П
ричина тог о, что MPI_Buffer_detach возвращае т адре с и разм е р отсое диня е м ог о буфе ра, состоит в том , чтобы п озволить вложе нны м библиоте кам зам е ня ть и восстанавливать буфе р. Н ап рим е р, рассм отрите int size, mysize, idummy; void *ptr, *myptr, *dummy; MPI_Buffer_detach(&ptr, &size); MPI_Buffer_attach(myptr, mysize); ... ... библиотечный код ... ... MPI_Buffer_detach(&dummy, &idummy); MPI_Buffer_attach(ptr, size); Это п одобно де йствию Unix signal routine и им е е т те же сам ы е силь ны е (это п росто) и слабы е стороны (э то работае т толь ко для вложе нног о исп оль зования ). О братите вним ание : для тог о, чтобы работал данны й п одход, MPI_Buffer_detach должна возвратить MPI_SUCCESS даже ког да не им е е тся никаког о отсое диня е м ог о буфе ра. В этом случае возвращае тся разм е р, равны й нулю.
17
MPI_Cancel
О тм е ня е т зап рос свя зи
int MPI_Cancel(MPI_Request *request)
В ходной парам етр request
Зап рос свя зи (де скрип тор)
При м ечани е.
О тм е на бы ла ре ализована толь ко для зап росов п рие м а; для зап росов п осы лки это – п устая оп е рация . Ве роя тне е все г о, исп оль зование MPI_Cancel ожидае тся в схе м ах м уль ти-буфе ризации, г де сп е куля тивно де лаются вы зовы MPI_Irecv. К ог да вы числе ние заве ршае тся , не которы е из этих зап росов п рие м а м ог ут оставать ся ; исп оль зование MPI_Cancel п озволя е т п оль зовате лю отм е ня ть эти не удовле творе нны е зап росы . О тм е на оп е рации п осы лки нам ног о боле е трудна, п осколь ку п осы лка обы чно буде т, п о крайне й м е ре частично, вы п олне на (информ ация относите ль но иде нтификатора сообще ния и разм е ра, ном е р п роце сса источника обы чно п осы лаются адре сату не м е дле нно). MPICH п одде ржит эту возм ожность п ри вы п уске сле дующих ве рсий; однако п оль зовате ли уве дом ля ются , что отм е на п осы лки, будучи локаль ной оп е рацие й, ве роя тно, обойде тся дорог о (обы чно п ородит одно или боле е внутре нних сообще ний).
Пус ты е дес кри пторы .
С п е цификация MPI 1.1 в разде ле п о не п розрачны м объ е ктам зап ре щае т исп оль зование п устог о де скрип тора в каче стве п арам е тра. Т е кст из стандарта: п устой п арам е тр де скрип тора – ошибочны й входной п арам е тр вы зовов MPI, е сли исключе ние я вно не установле но в те ксте оп ре де ле ния функции. Т акое исключе ние доп устим о для де скрип торов объ е ктов зап росов в вы зовах Wait и Test (разде лы «Communication Completion» and «Multiple Completions»). В п ротивном случае , п устой де скрип тор м оже т бы ть п е ре дан толь ко функции, которая расп ре де ля е т новы й объ е кт и возвращае т ссы лку на не г о в де скрип торе .
MPI_Comm_compare
С равнивае т два ком м уникатора
int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
В ходны е парам етры comm1 comm2
К ом м уникатор 1 (де скрип тор) К ом м уникатор 2 (де скрип тор)
18
В ы ходной парам етр result
Ц е лое число, равное MPI_IDENT, е сли конте ксты и г руп п ы одинаковы ; MPI_CONGRUENT, е сли различны конте ксты , но иде нтичны г руп п ы ; MPI_SIMILAR, е сли различны конте ксты , но п одобны г руп п ы ; в п ротивном случае – MPI_UNEQUAL
При м ечани е. Исп оль зование
MPI_COMM_NULL в каче стве одног о из п арам е тров MPI_Comm_compare я вля е тся ошибкой.
MPI_Comm_create
С оздае т новы й ком м уникатор
int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *comm_out)
В ходны е парам етры comm group
К ом м уникатор (де скрип тор) Груп п а, которая я вля е тся п одм ноже ством (де скрип тор)
г руп п ы
comm
В ы ходной парам етр comm_out
Н овы й ком м уникатор (де скрип тор)
См . также MPI_Comm_free
MPI_Comm_dup
Д ублируе т суще ствующий ком м уникатор со все й кэ шируе м ой информ ацие й
int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *comm_out)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр newcomm
К оп ия comm (де скрип тор)
См . также MPI_Comm_free
MPI_Comm_free
П ом е чае т объ е кт ком м уникатора для освобожде ния
int MPI_Comm_free(MPI_Comm *commp)
19
В ходной парам етр comm
К ом м уникатор, которы й буде т разруше н (де скрип тор)
Пус ты е дес кри пторы .
С п е цификация MPI 1.1 в разде ле п о не п розрачны м объ е ктам зап ре щае т освобожде ние п устог о ком м уникатора (см . п рим е чание к разде лу MPI_Cancel).
MPI_Comm_group
Вы бирае т г руп п у, свя занную с данны м ком м уникатором
int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
В ходной парам етр comm
К ом м уникатор
В ы ходной парам етр group
Груп п а в ком м уникаторе
При м ечани е. Исп оль зование
MPI_COMM_NULL в каче стве п арам е тра MPI_Comm_group я вля е тся ошибкой. Ранние ве рсии MPICH п озволя ют исп оль зовать MPI_COMM_NULL в этой функции. В инте ре сах п одде ржки м обиль ности п рикладны х п рог рам м разработчики ре ализации изм е нили п ове де ние MPI_Comm_group для устране ния этог о наруше ния стандарта MPI.
MPI_Comm_rank
О п ре де ля е т ном е р вы зы вающе г о п роце сса в ком м уникаторе
int MPI_Comm_rank(MPI_Comm comm, int *rank)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр rank
Н ом е р вы зы вающе г о п роце сса в г руп п е comm (це лое число)
ком м уникатора
20
MPI_Comm_remote_group
Вы бирае т удале нную г руп п у, свя занную с данны м инте рком м уникатором
int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
В ходной парам етр comm
К ом м уникатор (долже н бы ть инте рком м уникатором )
В ы ходной парам етр group
У дале нная г руп п а ком м уникатора
MPI_Comm_remote_size
О п ре де ля е т разм е р удале нной г руп п ы , свя занной с инте рком м уникатором
int MPI_Comm_remote_size(MPI_Comm comm, int *size)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр size
Ч исло п роце ссов в г руп п е comm (це лое число)
MPI_Comm_size
О п ре де ля е т разм е р г руп п ы , свя занной с ком м уникатором
int MPI_Comm_size(MPI_Comm comm, int *size)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр size
Ч исло п роце ссов в г руп п е ком м уникатора comm (це лое число)
При м ечани е. MPI_COMM_NULL не п арам е тр этой функции.
рассм атривае тся как доп устим ы й
21
MPI_Comm_split
С оздае т новы е ком м уникаторы , основы вая сь на цве тах и ключах (split –разбие ние )
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *comm_out)
В ходны е парам етры comm color key
К ом м уникатор (де скрип тор) К онтроль над назначе ние м п одм ноже ства (не отрицате ль ное це лое число) К онтроль над назначе ние м ном е ра (це лое число)
В ы ходной парам етр newcomm
Н овы й ком м уникатор (де скрип тор)
При м ечани е.
color
долже н
бы ть
не отрицате ль ны м
или
MPI_UNDEFINED.
Ал гори тм . Исп оль зуе м ы й в настоя ще е
вре м я алг оритм , п о м не нию разработчиков, им е е т ря д не эффе ктивны х м е ст, которы е м ог ут бы ть устране ны . Вот то, что п ока сде лано: 1) Из цве тов и ключе й форм ируе тся таблица (им е е т также п оле «сле дующий»). 2) Т аблицы все х п роце ссов объ е диня ются с исп оль зование м MPI_Allreduce. 3) Д ля все х создавае м ы х ком м уникаторов разм е щаются два конте кста. О дни и те же два конте кста м ог ут исп оль зовать ся для все х созданны х ком м уникаторов, п осколь ку ком м уникаторы не будут п е ре кры вать ся . 4) Е сли локаль ны й п роце сс им е е т цве т MPI_UNDEFINED, м ожно возвратить NULL comm. 5) Эле м е нты таблицы , которы е соотве тствуют цве ту локаль ног о п роце сса, сортируются п о ключу / ном е ру. 6) Груп п а создае тся из отсортированног о сп иска, а ком м уникатор создае тся из этой г руп п ы и п ре дварите ль но разм е ще нны х конте кстов.
См . также MPI_Comm_free
MPI_Finalize
Заве ршае т вы п олне ние сре ды MPI
int MPI_Finalize()
При м ечани е.
Все п роце ссы должны п е ре д вы ходом вы звать эту п од-
22 п рог рам м у. Ч исло п роце ссов, п родолжающих работать п осле вы зова этой п одп рог рам м ы , не оп ре де ле но; лучше все г о п осле вы зова MPI_Finalize не вы п олня ть нам ног о боле е че м return rc.
MPI_Finalized
У казы вае т, вы зы валась ли MPI_Finalize
int MPI_Finalized(int *flag)
В ы ходной парам етр flag
Флажок – true, е сли MPI_Finalize вы звалась , и false – иначе .
MPI_Gather
С обирае т вм е сте п роце ссов
значе ния из г руп п ы
int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
В ходны е парам етры sendbuf sendcount sendtype recvcount recvtype root comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) Ч исло эле м е нтов для любог о одиночног о п рие м а (це лое число, им е юще е значе ние толь ко в корне ) Т ип данны х эле м е нтов буфе ра recv (значим ы й толь ко в корне ) (де скрип тор) Н ом е р п олучающе г о п роце сса (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль , значим ы й толь ко в корне )
MPI_Gatherv
С обирае т в оп ре де ле нны е все хп роце ссов в г руп п е
м е ста из
int MPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm)
В ходны е парам етры sendbuf sendcount sendtype
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор)
recvcounts
displs
recvtype root comm
23 Ц е лочисле нны й м ассив (разм е ром , равны м длине г руп п ы ) соде ржащий число эле м е нтов, которы е п олуче ны от каждог о п роце сса (значим ы й толь ко в корне ) Ц е лочисле нны й м ассив (разм е ром , равны м длине г руп п ы ). Эле м е нт i оп ре де ля е т см е ще ние относите ль но recvbuf, с которы м нужно п ом е стить входя щие данны е из i п роце сса (значим ы й толь ко в корне ) Т ип данны х эле м е нтов буфе ра recv (значим ы й толь ко в корне ) (де скрип тор) Н ом е р п олучающе г о п роце сса (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль , значим ы й толь ко в корне )
MPI_Get_count
П олучае т число эле м е нтов "ве рхне г о уровня "
int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count)
В ходны е парам етры status datatype
С остоя ние , возвраще нное оп е рацие й п рие м а (статус) Т ип данны хэле м е нта буфе ра п рие м а (де скрип тор)
В ы ходной парам етр count
Ч исло п олуче нны хэле м е нтов (це лое число)
При м ечани е. Е сли разм е р тип а данны х – ноль , эта п одп рог рам м а возвратит count = нулю. Е сли количе ство данны х в status – не точны й м ножите ль разм е ра тип а данны х datatype (п ри этом count не бы лбы це лы м ), взам е н возвращае тся count = MPI_UNDEFINED.
MPI_Get_elements
Возвращае т число основны х эле м е нтов в тип е данны х
int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *elements)
В ходны е парам етры status datatype
С остоя ние , возвраще нное оп е рацие й п рие м а (статус) Т ип данны х, исп оль зуе м ы й оп е рацие й п рие м а (де скрип тор)
24
В ы ходной парам етр count
Ч исло п олуче нны хосновны х эле м е нтов (це лое число)
MPI_Get_processor_name
П олучае т им я п роце ссора
int MPI_Get_processor_name(char *name, int *resultlen)
В ы ходны е парам етры name resultlen
У никаль ны й сп е цификатор для фактиче ског о (в п ротивоп оложность виртуаль ном у) узла. Д лина им е ни (в сим волах)
При м ечани е.
Возвраще нное им я должно иде нтифицировать сп е цифиче скую часть ап п аратны х сре дств; точны й форм ат оп ре де ля е тся ре ализацие й. Это им я м оже т бы ть , а м оже т и не бы ть те м же , что и возвращае м ое п ри п ом ощи gethostname, uname или sysinfo.
MPI_Get_version
П олучае т ве рсию MPI
int MPI_Get_version(int *version, int *subversion)
В ы ходны е парам етры version subversion
С таршая ве рсия MPI (1 или 2) М ладшая ве рсия MPI.
При м ечани е.
О п ре де ле нны е значе ния MPI_VERSION и MPI_SUBVERSION соде ржат ту же сам ую информ ацию. Эта п одп рог рам м а п озволя е т Вам п рове рить , соотве тствуе т ли библиоте ка ве рсии, оп ре де ле нной в файле mpi.h.
MPI_Group_compare
С равнивае т две г руп п ы
int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
В ходны е парам етры group1 group2
1 г руп п а (де скрип тор) 2 г руп п а (де скрип тор)
В ы ходной парам етр result
Ц е лое число, которое я вля е тся MPI_IDENT, е сли п оря док и чле ны обе их г руп п одинаковы , MPI_SIMILAR, е сли толь ко чле ны одинаковы , и MPI_UNEQUAL – иначе
25
MPI_Group_difference
Д е лае т г руп п у из разности двухг руп п
int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *group_out)
В ходны е парам етры group1 group2
П е рвая г руп п а (де скрип тор) Вторая г руп п а (де скрип тор)
В ы ходной парам етр newgroup
Груп п а - разность (де скрип тор)
См . также MPI_Group_free
MPI_Group_excl
П роизводит г руп п у, п е ре уп оря дочивая суще ствующую г руп п у и п риним ая толь ко не п е ре числе нны е чле ны int MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
В ходны е парам етры group n ranks
Груп п а (де скрип тор) Ч исло эле м е нтов в м ассиве ranks (це лое число) М ассив це лочисле нны х ном е ров в г руп п е group, которы е не должны п оя вить ся в новой г руп п е
В ы ходной парам етр newgroup
Н овая г руп п а, п олуче нная , как оп исано вы ше , с сохране ние м п оря дка, оп ре де ле нног о г руп п ой group (де скрип тор)
При м ечани е.
В настоя ще е вре м я , кажды й из исключае м ы х ном е ров долже н бы ть де йствите ль ны м ном е ром п роце сса в г руп п е и все эле м е нты должны бы ть различны м и, иначе – функция ошибочна. Это ог раниче ние ре ализации – вре м е нное .
См . также MPI_Group_free
26
MPI_Group_free
О свобождае т г руп п у
int MPI_Group_free(MPI_Group *group)
В ходной парам етр group
Груп п а (де скрип тор)
При м ечани е.
На
вы ходе
group
устанавливае тся
в
MPI_GROUP_NULL.
MPI_Group_incl
П роизводит г руп п у, п е ре уп оря дочивая суще ствующую г руп п у и п риним ая толь ко п е ре числе нны е чле ны int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *group_out)
В ходны е парам етры group n ranks
Груп п а (де скрип тор) Ч исло эле м е нтов в м ассиве ranks (и разм е р newgroup) (це лое число) Н ом е ра п роце ссов в г руп п е group, которы е должны п оя вить ся в newgroup (м ассив це лы х чисе л)
В ы ходной парам етр newgroup
Н овая г руп п а, п олуче нная , как оп исано вы ше , в п оря дке , оп ре де ля е м ом м ассивом ranks (де скрип тор)
При м ечани е.
Ре ализация в настоя ще е вре м я не п рове ря е т сп исок ном е ров, чтобы г арантировать отсутствие дубликатов.
См . также MPI_Group_free
MPI_Group_intersection
П роизводит г руп п у как п е ре се че ние двухсуще ствующихг руп п
int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *group_out)
В ходны е парам етры group1 group2
П е рвая г руп п а (де скрип тор) Вторая г руп п а (де скрип тор)
27
В ы ходной парам етр newgroup
Груп п а - п е ре се че ние (де скрип тор)
См . также MPI_Group_free
MPI_Group_range_excl
П роизводит г руп п у, исключая диап азоны п роце ссов из суще ствующе й г руп п ы
int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup)
В ходны е парам етры group n ranges
Груп п а (де скрип тор) Ч исло эле м е нтов (трое к) в м ассиве ranges (це лое число) О дном е рны й м ассив це лочисле нны х трое к вида [п е рвы й ном е р, п осле дний ном е р, шаг ], указы вающих ном е ра в г руп п е п роце ссов group, которы е будут исключе ны из вы ходной г руп ы newgroup.
В ы ходной парам етр newgroup
Н овая г руп п а, п олуче нная , как оп исано вы ше , с сохране ние м п оря дка в г руп п е group (де скрип тор)
См . также MPI_Group_free и п рим е чание
к MPI_Group_excl
MPI_Group_range_incl
С оздае т новую г руп п у из диап азонов ном е ров в суще ствующе й г руп п е
int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup)
В ходны е парам етры group n ranges
Груп п а (де скрип тор) Ч исло трое к в м ассиве ranges (це лое число) О дном е рны й м ассив це лочисле нны х трое к вида [п е рвы й ном е р, п осле дний ном е р, шаг ], индицирующих ном е ра в г руп п е group или п роце ссы , которы е будут включе ны в newgroup
В ы ходной парам етр newgroup
Н овая г руп п а, п олуче нная , как оп исано вы ше , в п оря дке , оп ре де ле нном диап азонам и ranges (де скрип тор)
При м ечани е.
Ре ализация в настоя ще е вре м я не п рове ря е т сп исок диа-
28 п азонов, чтобы включае м ы е ном е ра бы ли де йствите ль ны м и п роце ссам и в г руп п е .
См . также MPI_Group_free
MPI_Group_rank
Возвращае т ном е р те куще г о п роце сса в заданной г руп п е
int MPI_Group_rank(MPI_Group group, int *rank)
В ходной парам етр group
Груп п а (де скрип тор)
В ы ходной парам етр rank
Н ом е р вы зы вающе г о п роце сса в г руп п е , или MPI_UNDEFINED, е сли п роце сс не я вля е тся е е чле ном (це лое число)
MPI_Group_size
Возвращае т разм е р г руп п ы
int MPI_Group_size(MPI_Group group, int *size)
В ходной парам етр group
Груп п а (де скрип тор)
В ы ходной парам етр size
Ч исло п роце ссов в г руп п е (це лое число)
MPI_Group_translate_ranks
Т ранслируе т ном е ра п роце ссов в одной г руп п е в ихном е ра в друг ой г руп п е
int MPI_Group_translate_ranks(MPI_Group group_a, int n, int *ranks_a, MPI_Group group_b, int *ranks_b)
В ходны е парам етры group1 n ranks1 group2
1 г руп п а (де скрип тор) Ч исло ном е ров в м ассивахranks1 и ranks2 (це лое число) М ассив де йствите ль ны х ном е ров в group1 (ноль или боле е ном е ров) 2 г руп п а (де скрип тор)
29
В ы ходной парам етр ranks2
М ассив соотве тствующих ном е ров в group2, MPI_UNDEFINED, ког да соотве тствия не суще ствуе т.
MPI_Group_union
П роизводит г руп п у, две г руп п ы
объ е диня я
int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *group_out)
В ходны е парам етры group1 group2
П е рвая г руп п а (де скрип тор) Вторая г руп п а (де скрип тор)
В ы ходной парам етр newgroup
Груп п а - объ е дине ние (де скрип тор)
См . также MPI_Group_free
MPI_Ibsend
Н ачинае т не блокирующую буфе ризированную п осы лку
int MPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Init
Инициализируе т вы п олне ние сре ды MPI
int MPI_Init(int *argc, char ***argv)
В ходны е парам етры argc
У казате ль на число п арам е тров
argv
30 У казате ль на ве ктор п арам е тров
Парам етры ком андной с троки .
MPI не оп ре де ля е т п арам е тры ком андной строки, но п озволя е т ре ализации MPI исп оль зовать их. Расп е чаты вае т состоя ние оче ре де й сообще ний, ког да вы зы вае тся MPI_Finalize. Вы вод м оже т бы ть труде н для де кодирования и п ре дназначе н для це ле й отладки. -mpiversion Расп е чаты вае т ве рсию ре ализации (не MPI), включая п арам е тры , которы е исп оль зовались п ри вы боре конфиг урации. -mpinice nn У ве личивае т nice value до nn (п онижая п риорите т п рог рам м ы до nn). nn долже н бы ть п оложите ль ны м (кром е корня ). Н е все систе м ы п одде рживают этот п арам е тр; те , что не п одде рживают – иг норируют е г о. -mpedbg Зап ускае т отладчик в окне xterm п ри возникнове нии ошибки (либо обнаруже нной MPI, либо – п ри обы чном фаталь ном сиг нале ). Это работае т толь ко, е сли MPICH бы л конфиг урирован с п арам е тром -mpedbg. -mpimem Е сли MPICH бы л п острое н с -DMPIR_DEBUG_MEM, исп оль зование арг ум е нта п риводит к п рове рке все х оп е раций malloc и free (внутри MPICH) на наличие п ризнаков уще рба областя м расп ре де ле ния п ам я ти. -mpidb options Активизируе т различны е оп ции отладки. Н е которы е тре буют, чтобы MPICH бы л п острое н со сп е циаль ны м и оп ция м и. О ни п ре дназначе ны для отладки MPICH, не для отладки п рог рам м п оль зовате ля .
-mpiqueue
При м ечани я .
Н а вы ходе из этой п одп рог рам м ы все п роце ссы будут им е ть коп ии сп иска п арам е тров. С тандарт MPI этог о не тре буе т, и де йствите ль но п е ре носим ы е коды не должны на это п олаг ать ся . Д анная особе нность обе сп е че на как се рвис ре ализации. С тандарт MPI не оп ре де ля е т, чт о п рог рам м а м оже т де лать п е ре д MPI_Init и п осле MPI_Finalize. В MPICH ре ализации Вы должны де лать как м ожно м е нь ше . В частности, избе г айте че г о-либо, что изм е нит вне шне е состоя ние п рог рам м ы , нап рим е р, откры тие файлов, чте ние стандартног о ввода или зап ись в стандартны й вы вод. С тандарт MPI тре буе т докум е нтирования все х исп оль зуе м ы х ап п аратны х сиг налов. MPICH ре ализация не п осре дстве нно не исп оль зуе т сиг налы , но не которы е из них м ог ут исп оль зовать ся п рог рам м ны м обе сп е че ние м , над которы м MPICH надстрое на. О братите вним ание , что е сли Вы исп оль зуе те п рог рам м ное обе сп е че ние , нуждающе е ся в те х же сам ы х сиг налах, Вы м оже те обнаружить , что не им е е тся никаког о сп особа исп оль зовать такое п рог рам м ное обе сп е че ние с MPI ре ализацие й. С иг налы , которы е вы зы вают
31 наиболь шие п робле м ы для п рикладны х п рог рам м , включают SIGIO, SIGALRM и SIGPIPE. Н ап рим е р, исп оль зование SIGIO и SIGPIPE м оже т вы ве сти из строя X11 п одп рог рам м ы .
MPI_Init_thread
Инициализируе т вы п олне ние сре ды MPI
int MPI_Init_thread(int *argc, char ***argv, int required, int *provided)
В ходны е парам етры argc argv required
У казате ль на число п арам е тров У казате ль на ве ктор п арам е тров Ж е лате ль ны й урове нь п одде ржки п отока
В ы ходной парам етр provided
О бе сп е чивае м ы й урове нь п одде ржки п отока
Парам етры ком андной с троки .
MPI не оп ре де ля е т п арам е тры ком андной строки, но п озволя е т MPI ре ализации исп оль зовать их. С м . MPI_Init для оп исания п арам е тров ком андной строки, п одде ржанны х MPI_Init и MPI_Init_thread.
При м ечани е.
В настоя ще е вре м я MPICH наклады вае т на MPI_Init_thread те же сам ы е ог раниче ния , что и на MPI_Init (см . оп исание MPI_Init). К ог да MPICH п олность ю п одде ржит MPI-2, это ог раниче ние буде т сня то (как тре буе тся стандартом MPI-2).
MPI_Initialized
У казы вае т, вы зы валась ли MPI_Init
int MPI_Initialized(int *flag)
В ы ходной парам етр flag
Флажок true, е сли MPI_Init вы звалась , и false – в п ротивном случае .
MPI_Iprobe
Н е блокирующий те ст для сообще ния
int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status)
В ходны е парам етры source
Н ом е р п роце сса-источника или MPI_ANY_SOURCE (це лое число)
tag comm
32 Значе ние иде нтификатора MPI_ANY_TAG (це лое число) К ом м уникатор (де скрип тор)
сообще ния
или
В ы ходной парам етр flag status
(Л ог иче ский) О бъ е кт состоя ния (статус)
MPI_Irecv
Н ачинае т не блокирующий п рие м
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype source tag comm
Н ачаль ны й адре с буфе ра п рие м а (указате ль ) Ч исло эле м е нтов в буфе ре п рие м а (це лое число) Т ип данны хэле м е нта буфе ра п рие м а (де скрип тор) Н ом е р п роце сса-источника (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Irsend
Н ачинае т не блокирующую г отовую п осы лку
int MPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
33
MPI_Isend
Н ачинае т не блокирующую п осы лку
int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Issend
Н ачинае т не блокирующую синхронную п осы лку
int MPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Op_create
С оздае т оп ре де ля е м ы й п оль зовате ле м де скрип тор ком бинационной функции
int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)
34
В ходны е парам етры function commute
О п ре де ля е м ая п оль зовате ле м функция (функция ) true, е сли ком м утативная ; false иначе .
В ы ходной парам етр op
О п е рация (де скрип тор)
При м ечани е. О п ре де ле ние
тип а функции п оль зовате ля :
typedef void (MPI_User_function)(void *a, void *b, int *len, MPI_Datatype*); г де оп е рация – это b[i] = a[i] op b [i], для i =0, ..., len-1. У казате ль тип а данны х, п е ре давае м ы й MPI п одп рог рам м е колле ктивног о вы числе ния (т.е . MPI_Reduce, MPI_Allreduce, MPI_Scan или MPI_Reduce_scatter) п е ре дае тся также и оп ре де ле нной п оль зовате ле м п одп рог рам м е .
См . также MPI_Op_free
MPI_Op_free
О свобождае т оп ре де ля е м ы й п оль зовате ле м де скрип тор ком бинационной функции
int MPI_Op_free(MPI_Op *op)
В ходной парам етр op
О п е рация (де скрип тор)
При м ечани е. Н а вы ходе op устанавливае тся в MPI_OP_NULL. Пус ты е дес кри пторы . С п е цификация MPI 1.1 в разде ле п о не п розрачны м объ е ктам зап ре щае т исп оль зование п устог о де скрип тора в каче стве п арам е тра (см . п рим е чание к разде лу MPI_Cancel).
См . также MPI_Op_create
MPI_Pack
У п аковы вае т тип данны х в не п ре ры вную п ам я ть
int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outcount, int *position, MPI_Comm comm)
В ходны е парам етры inbuf incount
Н ачало входног о буфе ра (указате ль ) Ч исло входны х эле м е нтов данны х (це лое число)
35 datatype outcount position comm
Т ип входны х эле м е нтов данны х(де скрип тор) Разм е р вы ходног о буфе ра, в байтах(це лое число) Т е кущая п озиция в буфе ре , в байтах(це лое число) К ом м уникатор для уп акованног о сообще ния (де скрип тор)
В ы ходной парам етр outbuf
Н ачало вы ходног о буфе ра (указате ль )
См . также MPI_Unpack, MPI_Pack_size
MPI_Pack_size
Возвращае т ве рхнюю г раницу п ространства, не обходим ог о для уп аковки сообще ния
int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size)
В ходны е парам етры incount datatype comm
П арам е тр-сче тчик для вы зова уп аковки (це лое число) П арам е тр тип а данны хдля вы зова уп аковки (де скрип тор) П арам е тр ком м уникатора для вы зова уп аковки (де скрип тор)
В ы ходной парам етр size
Ве рхня я г раница разм е ра уп акованног о сообще ния в байтах (це лое число)
При м ечани е.
Д окум е нт MPI-стандарта оп исы вае т это в те рм инах MPI_Pack, но это п рим е ним о как к MPI_Pack, так и к MPI_Unpack. Т о е сть значе ние size – м аксим ум , которы й не обходим или MPI_Pack или MPI_Unpack.
MPI_Pcontrol
У п равле ние п рофилирование м
int MPI_Pcontrol(int level)
В ходной парам етр level
У рове нь п рофилирования
При м ечани е.
Эта п одп рог рам м а обе сп е чивае т общий инте рфе йс для уп равле ния п рофилирование м . Инте рп ре тация уровня и любы х друг их п арам е тров оставле на библиоте ке п рофилирования .
36
MPI_Probe
Блокирующий те ст для сообще ния
int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
В ходны е парам етры source tag comm
Н ом е р п роце сса-источника или MPI_ANY_SOURCE (це лое число) Значе ние иде нтификатора или MPI_ANY_TAG (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_Recv
О сновной п рие м сообще ния
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status)
В ходны е парам етры count datatype source tag comm
М аксим аль ное число эле м е нтов в буфе ре п рие м а (це лое число) Т ип данны хэле м е нта буфе ра п рие м а (де скрип тор) Н ом е р п роце сса-источника (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра п рие м а (указате ль ) О бъ е кт состоя ния (статус)
При м ечани е.
П арам е тр count указы вае т м аксим аль ную длину сообще ния ; фактиче ский разм е р м оже т бы ть оп ре де ле н п ри п ом ощи MPI_Get_count.
MPI_Recv_init
Форм ируе т де скрип тор для п рие м а
int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)
37
В ходны е парам етры buf count datatype source tag comm
Н ачаль ны й адре с буфе ра п рие м а (указате ль ) К оличе ство п олуче нны х эле м е нтов (це лое число) Т ип каждог о эле м е нта (де скрип тор) Н ом е р п роце сса-источника или MPI_ANY_SOURCE (це лое число) Иде нтификатор сообще ния или MPI_ANY_TAG (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
См . также MPI_Start, MPI_Request_free
MPI_Reduce
П риводит значе ния из все х п роце ссов к одиночном у значе нию
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
В ходны е парам етры sendbuf count datatype op root comm
Адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) О п е рация п риве де ния (де скрип тор) Н ом е р корне вог о п роце сса (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль , значим ы й толь ко в корне )
Ал гори тм . Ре ализация
в настоя ще е вре м я исп оль зуе т п ростой алг оритм
де ре ва.
MPI_Reduce_scatter
О бъ е диня е т значе ния и рассе ивае т ре зуль таты
int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcnts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
38
В ходны е парам етры sendbuf recvcounts
datatype op comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ц е лочисле нны й м ассив, оп ре де ля ющий число эле м е нтов ре зуль тата, расп ре де ля е м ое каждом у п роце ссу. М ассив долже н бы ть иде нтиче н во все х вы зы вающихп роце ссах. Т ип данны хэле м е нтов входног о буфе ра (де скрип тор) О п е рация (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Н ачаль ны й адре с буфе ра п рие м а (указате ль )
MPI_Request_free
О свобождае т объ е кт зап роса свя зи
int MPI_Request_free(MPI_Request *request)
В ходной парам етр request
Зап рос свя зи (де скрип тор)
При м ечани я . Эта п одп рог рам м а обы чно исп оль зуе тся
для освобожде ния п остоя нны х зап росов, созданны х MPI_Recv_init, MPI_Send_init и т.п . О днако е е м ожно исп оль зовать и для освобожде ния зап роса, созданног о MPI_Irecv, MPI_Isend и т.п .; в случае таког о исп оль зования к зап росу не м ог ут п рим е ня ть ся п одп рог рам м ы те стирования / ожидания . Разре шае тся освободить активны й зап рос. О днако зап рос, однажды освобожде нны й, Вы не м оже те исп оль зовать в п одп рог рам м ах ожидания или те стирования (нап рим е р, MPI_Wait).
См . также MPI_Isend, MPI_Irecv, MPI_Issend, MPI_Ibsend, MPI_Irsend, MPI_Recv_init, MPI_Send_init, MPI_Ssend_init, MPI_Rsend_init, MPI_Wait, MPI_Test, MPI_Waitall, MPI_Waitany, MPI_Waitsome, MPI_Testall, MPI_Testany, MPI_Testsome
MPI_Rsend
О сновная г отовая п осы лка сообще ния
int MPI_Rsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
В ходны е парам етры buf count
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (не отрицате ль ное це лое число)
datatype dest tag comm
39 Т ип данны х эле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
MPI_Rsend_init
Форм ируе т де скрип тор для г отовой п осы лки
int MPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло п осы лае м ы хэле м е нтов (це лое число) Т ип эле м е нтов (де скрип тор) Н ом е р адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
См . также MPI_Start, MPI_Request_free, MPI_Send_init
MPI_Scan
Вы числя е т разве ртку (scan) (частичны е п риве де ния -ре дукции) данны хдля совокуп ности п роце ссов
int MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
В ходны е парам етры sendbuf count datatype op comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов во входном буфе ре (це лое число) Т ип данны хэле м е нтов входног о буфе ра (де скрип тор) О п е рация (де скрип тор) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Н ачаль ны й адре с буфе ра п рие м а (указате ль )
40
MPI_Scatter
П осы лае т данны е из одной задачи все м осталь ны м задачам в г руп п е
int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm)
В ходны е парам етры sendbuf sendcount sendtype recvcount recvtype root comm
Адре с буфе ра п осы лки (указате ль , значим ы й толь ко в корне ) Ч исло эле м е нтов, п осланны х каждом у п роце ссу (це лое число, значим ое толь ко в корне ) Т ип данны х эле м е нтов буфе ра п осы лки (значим ы й толь ко в корне ) (де скрип тор) Ч исло эле м е нтов в буфе ре п рие м а (це лое число) Т ип данны хэле м е нтов буфе ра п рие м а (де скрип тор) Н ом е р п осы лающе г о п роце сса (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль )
MPI_Scatterv
Рассе ивае т буфе р п о частя м все м задачам в г руп п е
int MPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm)
В ходны е парам етры sendbuf sendcounts
displs
sendtype recvcount recvtype
Адре с буфе ра п осы лки (указате ль , значим ы й толь ко в корне ) Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ), оп ре де ля ющий числа эле м е нтов, п осы лае м ы х каждом у п роце ссору Ц е лочисле нны й м ассив (длиной, равной разм е ру г руп п ы ). Эле м е нт i оп ре де ля е т см е ще ние (относите ль но sendbuf), п о котором у брать исходя щие данны е для п роце сса i Т ип данны хэле м е нтов буфе ра п осы лки (де скрип тор) Ч исло эле м е нтов в буфе ре п рие м а (це лое число) Т ип данны хэле м е нтов буфе ра п рие м а (де скрип тор)
root comm
41 Н ом е р п осы лающе г о п роце сса (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр recvbuf
Адре с буфе ра п рие м а (указате ль )
MPI_Send
Вы п олня е т основную п осы лку сообще ния
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
При м ечани е.
Эта п одп рог рам м а м оже т блокировать п роце сс, п ока сообще ние не п риня то.
См . также MPI_Isend, MPI_Bsend
MPI_Send_init
Форм ируе т де скрип тор для стандартной п осы лки
int MPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло п осы лае м ы хэле м е нтов (це лое число) Т ип эле м е нтов (де скрип тор) Н ом е р адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
42
См . также MPI_Start, MPI_Startall, MPI_Request_free
MPI_Sendrecv
П осы лае т и п олучае т сообще ние
int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status)
В ходны е парам етры sendbuf sendcount sendtype dest sendtag recvcount recvtype source recvtag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (це лое число) Т ип эле м е нтов в буфе ре п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор п осы лки (це лое число) Ч исло эле м е нтов в буфе ре п рие м а (це лое число) Т ип эле м е нтов в буфе ре п рие м а (де скрип тор) Н ом е р п роце сса-источника (це лое число) Иде нтификатор п рие м а (це лое число) К ом м уникатор (де скрип тор)
В ы ходны е парам етры recvbuf status
Н ачаль ны й адре с буфе ра п рие м а (указате ль ) О бъ е кт состоя ния (статус). Это относится к оп е рации п рие м а.
MPI_Sendrecv_replace
П осы лка и п рие м , исп оль зующие одиночны й буфе р
int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest, int sendtag, int source, int recvtag, MPI_Comm comm, MPI_Status *status)
В ходны е парам етры count datatype dest sendtag source recvtag
Ч исло эле м е нтов в буфе ре п осы лки и п рие м а (це лое число) Т ип эле м е нтов в буфе ре п осы лки и п рие м а (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор п осы лае м ог о сообще ния (це лое число) Н ом е р п роце сса-источника (це лое число) Иде нтификатор п риним ае м ог о сообще ния (це лое число)
comm
К ом м уникатор
43 (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра п осы лки и п рие м а (указате ль ) О бъ е кт состоя ния (статус)
MPI_Ssend
О сновная синхронная п осы лка сообще ния
int MPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло эле м е нтов в буфе ре п осы лки (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра п осы лки (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
MPI_Ssend_init
Форм ируе т де скрип тор для синхронной п осы лки
int MPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
В ходны е парам етры buf count datatype dest tag comm
Н ачаль ны й адре с буфе ра п осы лки (указате ль ) Ч исло п осы лае м ы хэле м е нтов (це лое число) Т ип каждог о эле м е нта (де скрип тор) Н ом е р п роце сса-адре сата (це лое число) Иде нтификатор сообще ния (це лое число) К ом м уникатор (де скрип тор)
В ы ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Start
Инициализируе т свя зь с п остоя нны м де скрип тором зап роса
int MPI_Start(MPI_Request *request)
44
В ходной парам етр request
Зап рос свя зи (де скрип тор)
MPI_Startall
С тартуе т совокуп ность зап росов
int MPI_Startall(int count, MPI_Request array_of_requests[])
В ходны е парам етры count array_of_requests
Д лина сп иска (це лое число) М ассив зап росов (м ассив де скрип торов)
MPI_Status_set_cancelled
У станавливае т не п розрачную часть MPI_Status так, чтобы MPI_Test_cancelled возвратилфлажок int MPI_Status_set_cancelled(MPI_Status *status, int flag)
В ходны е парам етры status flag
С остоя ние , свя зы вае м ое со сче тчиком (статус) true указы вае т, что зап рос бы лотм е не н (лог иче ский)
MPI_Status_set_elements
У станавливае т не п розрачную часть MPI_Status так, чтобы MPI_Get_elements возвратил сче тчик int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count)
В ходны е парам етры status datatype count
С остоя ние , свя зы вае м ое со сче тчиком (статус) Т ип данны х, свя занны й со сче тчиком (де скрип тор) Ч исло эле м е нтов, свя зы вае м ое с состоя ние м (це лое число)
MPI_Test
Т е ст заве рше ния п осы лки или п рие м а
int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
В ходной парам етр request
Зап рос свя зи (де скрип тор)
45
В ы ходной парам етр flag status
true, е сли оп е рация заве ршилась (лог иче ский) О бъ е кт состоя ния (статус)
При м ечани е.
О братите вним ание на статус для оп е рации п осы лки. П ри оп е рация х п осы лки е динстве нное исп оль зование состоя ния – для MPI_Test_cancelled или в случае ошибки, ког да буде т установле но п оле состоя ния MPI_ERROR.
MPI_Test_cancelled
Т е ст, оп ре де ля ющий бы л ли отм е не н зап рос
int MPI_Test_cancelled(MPI_Status *status, int *flag)
В ходной парам етр status
О бъ е кт состоя ния (статус)
В ы ходной парам етр flag
(Л ог иче ский)
MPI_Testall
Т е ст заве рше ния все х п ре дварите ль но инициализированны х свя зе й
int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag, MPI_Status array_of_statuses[])
В ходны е парам етры count array_of_requests
Д лина сп исков (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходны е парам етры flag array_of_statuses
При м ечани я .
(Л ог иче ский) М ассив объ е ктов состоя ния (м ассив статусов)
flag раве н true толь ко, е сли все зап росы заве ршились . Иначе , флажок – false и ни array_of_requests, ни array_of_statuses не изм е ня ются . П ри оп е рация х п осы лки е динстве нное исп оль зование состоя ния – для MPI_Test_cancelled или в случае ошибки, ког да буде т установле но п оле состоя ния MPI_ERROR. С тандарт MPI не оп ре де ля е т, каков ре зуль тат м ног ократны х п одп рог рам м заве рше ния п ри возникнове нии ошибки. Н ап рим е р, MPI_WAITALL: долж-
46 на ли п одп рог рам м а ждать заве рше ния или сбоя все х зап росов или заве ршать ся не м е дле нно (не м е дле нно п о оп ре де ле нию MPI, что означае т не зависим ость от де йствий друг их п роце ссов MPI)? MPICH вы брал не м е дле нны й возврат (локаль ны й в те рм инах MPI) и исп оль зование класса ошибки MPI_ERR_PENDING (п ре дставле нны й в MPI 1.1) чтобы указать , которы е из зап росов не заве ршились . В боль шинстве случае в, толь ко один зап рос с ошибкой буде т обнаруже н кажды м вы зовом MPI п одп рог рам м ы , которая п рове ря е т м ног ократны е зап росы . Зап росы , которы е не бы ли обработаны (из-за ошибки в одном из зап росов), будут отм е че ны установкой их п оле й MPI_ERROR в значе ние MPI_ERR_PENDING.
MPI_Testany
Т е ст заве рше ния любой из п ре дварите ль но инициализированны х свя зе й
int MPI_Testany(int count, MPI_Request array_of_requests[], int *index, int *flag, MPI_Status *status)
В ходны е парам етры count array_of_requests
Д лина сп иска (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходны е парам етры index flag status
Инде кс оп е рации, которая заве ршилась или MPI_UNDEFINED е сли ни одна не заве ршилась (це лое число) true, е сли одна изоп е раций заве ршилась (лог иче ский) О бъ е кт состоя ния (статус)
MPI_Testsome
Т е ст заве рше ния каких-либо из указанны хсвя зе й
int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount, int array_of_indices[], MPI_Status array_of_statuses[])
В ходны е парам етры incount array_of_requests
Д лина array_of_requests (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходны е парам етры outcount array_of_indices
Ч исло заве ршившихся зап росов (це лое число) М ассив инде ксов оп е раций, которы е заве ршились
array_of_statuses
47 (м ассив це лы х чисе л) М ассив объ е ктов состоя ния для оп е раций, которы е заве ршились (м ассив статусов)
MPI_Type_commit
Ре г истрируе т тип данны х
int MPI_Type_commit(MPI_Datatype *datatype)
В ходной парам етр datatype
Т ип данны х(де скрип тор)
MPI_Type_contiguous
С оздае т не п ре ры вны й тип данны х
int MPI_Type_contiguous(int count, MPI_Datatype old_type, MPI_Datatype *newtype)
В ходны е парам етры count oldtype
С че тчик п овторе ний (не отрицате ль ное це лое число) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_create_darray
С оздае т тип данны х, соотве тствующий расп ре де ле нном у м ног ом е рном у м ассиву
int MPI_Type_create_darray(int size, int rank, int ndims, int *array_of_gsizes, int *array_of_distribs, int *array_of_dargs, int *array_of_psizes, int order, MPI_Datatype oldtype, MPI_Datatype *newtype)
В ходны е парам етры Разм е р г руп п ы п роце ссов (п оложите ль ное це лое число) Н ом е р п роце сса в г руп п е (не отрицате ль ное це лое число) Разм е рность м ассива, а также разм е рность се тки п роце ссов (п оложите ль ное це лое число) array_of_gsizes Ч исло эле м е нтов тип а oldtype в каждом изм е ре нии г лобаль ног о м ассива (м ассив п оложите ль ны хце лы х чисе л) array_of_distribs Расп ре де ле ние м ассива в каждом изм е ре нии (м ассив п оложе ний)
size rank ndims
array_of_dargs array_of_psizes order oldtype
48 Д истрибутивны й п арам е тр в каждом изм е ре нии (м ассив п оложите ль ны х це лы хчисе л) Разм е р се тки п роце ссов в каждом изм е ре нии (м ассив п оложите ль ны хце лы х чисе л) Флаг п оря дка хране ния м ассива (состоя ние ) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_create_indexed_block
С оздае т инде ксированны й тип данны х с блокам и п остоя нног о разм е ра
int MPI_Type_create_indexed_block(int count, int blocklength, int array_of_displacements[], MPI_Datatype old_type, MPI_Datatype *newtype)
В ходны е парам етры Ч исло блоков, а также число эле м е нтов в array_of_displacements blocklength Ч исло эле м е нтов в каждом блоке (це лое число) array_of_displacements С м е ще ние каждог о блока в м ножите ля х old_type (м ассив це лы х чисе л) old_type С тары й тип данны х(де скрип тор)
count
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_create_subarray
С оздае т тип данны х, оп исы вающий п одм ассив м ног ом е рног о м ассива
int MPI_Type_create_subarray(int ndims, int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype)
В ходны е парам етры Разм е рность м ассива (п оложите ль ное це лое число) Ч исло эле м е нтов тип а oldtype в каждом изм е ре нии п олног о м ассива (м ассив п оложите ль ны х це лы х чисе л) array_of_subsizes Ч исло эле м е нтов тип а oldtype в каждом изм е ре нии п одм ассива (м ассив п оложите ль ны хце лы хчисе л)
ndims array_of_sizes
array_of_starts order oldtype
49 Н ачаль ны е координаты п одм ассива в каждом изм е ре нии (м ассив не отрицате ль ны хце лы х чисе л) Флажок п оря дка хране ния м ассива С тары й тип данны х(де скрип тор)
В ы ходной парам етр Н овы й тип данны х (де скрип тор)
newtype
MPI_Type_extent
Возвращае т п ротя же нность тип а данны х
int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
В ходной парам етр datatype
Т ип данны х(де скрип тор)
В ы ходной парам етр extent
П ротя же нность тип а данны х(це лое число)
MPI_Type_free
О свобождае т тип данны х
int MPI_Type_free(MPI_Datatype *datatype)
В ходной парам етр datatype
Т ип данны х, которы й буде т освобожде н (де скрип тор)
При м ечани е.
С тандарт MPI зая вля е т (в разде ле о «не п розрачны х объ е ктах»), что MPI обе сп е чивае т не которы е п ре доп ре де ле нны е не п розрачны е объ е кты и п ре доп ре де ле нны е статиче ские де скрип торы для этих объ е ктов. Т акие объ е кты не м ог ут бы ть разруше ны . Т аким образом , освобожде ние п ре доп ре де ле нног о тип а данны х я вля е тся ошибкой. Т от же сам ы й разде л п оя сня е т, что освобожде ние нуле вог о тип а данны х – также я вля е тся ошибкой.
MPI_Type_get_contents
Возвращае т фактиче ские п арам е тры , исп оль зованны е в вы зове п ри создании тип а данны х
int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses, int max_datatypes, int *array_of_integers, MPI_Aint *array_of_addresses, MPI_Datatype *array_of_datatypes)
50
В ходны е парам етры datatype max_integers max_addresses max_datatypes
Иском ы й тип данны х(де скрип тор) Ч исло эле м е нтов в array_of_integers (не отрицате ль ное це лое число) Ч исло эле м е нтов в array_of_addresses (не отрицате ль ное це лое число) Ч исло эле м е нтов в array_of_datatypes (не отрицате ль ное це лое число)
В ы ходны е парам етры С оде ржит це лочисле нны е п арам е тры , исп оль зуе м ы е п ри п острое нии тип а данны х(м ассив це лы х чисе л) array_of_addresses С оде ржит адре сны е п арам е тры , исп оль зуе м ы е п ри п острое нии тип а данны х(м ассив це лы х чисе л) array_of_datatypes С оде ржит п арам е тры тип ов данны х, исп оль зуе м ы е п ри п острое нии тип а данны х(м ассив де скрип торов) array_of_integers
MPI_Type_get_envelope
Возвращае т информ ацию относите ль но ном е ра и тип а входны х п арам е тров, исп оль зованны хп ри вы зове , которы й создалтип данны х int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses, int *num_datatypes, int *combiner)
В ходной парам етр datatype
Иском ы й тип данны х(де скрип тор)
В ы ходны е парам етры num_integers num_addresses num_datatypes combiner
Ч исло входны х це лы х чисе л, исп оль зуе м ы х п ри вы зове , создающе м combiner (не отрицате ль ное це лое число) Ч исло входны х адре сов, исп оль зуе м ы х п ри вы зове , создающе м combiner (не отрицате ль ное це лое число) Ч исло входны х тип ов данны х, исп оль зуе м ы х п ри вы зове , создающе м combiner (не отрицате ль ное це лое число) Combiner (состоя ние )
51
MPI_Type_hindexed
С оздае т инде ксированны й тип данны х со см е ще ния м и в байтах
int MPI_Type_hindexed(int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_type, MPI_Datatype *newtype)
В ходны е парам етры count blocklens indices old_type
Ч исло блоков, а также число эле м е нтов в indices и blocklens Ч исло эле м е нтов в каждом блоке (м ассив не отрицате ль ны х це лы х чисе л) Байтовое см е ще ние каждог о блока (м ассив MPI_Aint) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_hvector
С оздае т ве кторны й (п роре же нны й) тип данны хсо см е ще ние м в байтах
int MPI_Type_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype *newtype)
В ходны е парам етры count blocklength stride old_type
Ч исло блоков (не отрицате ль ное це лое число) Ч исло эле м е нтов в каждом блоке (не отрицате ль ное це лое число) Ч исло байтов м е жду началом каждог о блока (це лое число) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_indexed
С оздае т инде ксированны й тип данны х
int MPI_Type_indexed(int count, int blocklens[], int indices[], MPI_Datatype old_type, MPI_Datatype *newtype)
52
В ходны е парам етры count blocklens indices old_type
Ч исло блоков, а также число эле м е нтов в indices и blocklens Ч исло эле м е нтов в каждом блоке (м ассив не отрицате ль ны х це лы х чисе л) С м е ще ние каждог о блока в м ножите ля х old_type (м ассив це лы х чисе л) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Type_lb
Возвращае т нижнюю г раницу тип а
int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
В ходной парам етр datatype
Т ип данны х(де скрип тор)
В ы ходной парам етр displacement С м е ще ние нижне й г раницы от начала в байтах(це лое число)
MPI_Type_size
Возвращае т число байтов, заня ты х зап ися м и в тип е данны х
int MPI_Type_size(MPI_Datatype datatype, int *size)
В ходной парам етр datatype
Т ип данны х(де скрип тор)
В ы ходной парам етр size
Разм е р тип а данны х(це лое число)
MPI_Type_struct
С оздае т структурны й тип данны х
int MPI_Type_struct(int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_types[], MPI_Datatype *newtype)
В ходны е парам етры count blocklens indices
Ч исло блоков (це лое число), а также число эле м е нтов в м ассивахold_types, indices и blocklens Ч исло эле м е нтов в каждом блоке (м ассив) С м е ще ние в байтахкаждог о блока (м ассив)
old_types
53 Т ип эле м е нтов в каждом блоке (м ассив де скрип торов объ е ктов тип ов данны х)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
При м ечани я . Е сли ве рхня я
г раница установле на я вно с исп оль зование м MPI тип а MPI_UB, соотве тствующий инде кс долже н бы ть п оложите ль ны м . С тандарт MPI соде ржит не оп ре де ле нны е утве ржде ния относите ль но доп олне ния и вы равнивания ; это бы ло вы звано же лание м разре шить п ростое оп ре де ле ние структур для п осы лки ихв количе стве , боль ше м одной. Н ап рим е р, struct { int a; char b; } foo; м оже т им е ть sizeof(foo) > sizeof(int) + sizeof(char); нап рим е р, sizeof(foo) = 2 * sizeof(int). П е рвоначаль ная ве рсия MPI стандарта оп ре де лила п ротя же нность тип а данны х как включающую ве личину epsilon, которая разре шит ре ализации сде лать п ротя же нность MPI тип а данны х для этой структуры равной 2*sizeof(int). Н о п осколь ку различны е систе м ы м ог ли бы оп ре де ля ть различны е зап олне ния , бы ло м ног о дискуссий MPI Форум а относите ль но п равиль ног о значе ния epsilon, и одно из п ре дложе ний бы ло оп ре де лить epsilon как ноль . И хотя это п ре дложе ние не вошло в заключите ль ны й докум е нт, данная п одп рог рам м а не добавля е т никаког о зап олне ния , так как не обходим ое е г о количе ство оп ре де ля е тся трансля тором , исп оль зуе м ы м п оль зовате ля м и для форм ирования их кода, а не трансля тором , исп оль зуе м ы м для создания MPI библиоте ки. С ле дующие ве рсии MPICH м ог ут п ре дусм отре ть какие -либо е сте стве нны е оп ре де лите ли зап олне ния (нап рим е р, м ножите ль разм е ра сам ог о боль шог о чле на), но п оль зовате ля м не сове туют зависе ть от этог о. Вм е сто этог о, е сли Вы оп ре де ля е те структурны й тип данны х и же лае те п осы лать или п олучать е г о м ног ократно, Вы должны я вно включить эле м е нт MPI_UB как п осле дний чле н структуры . Н ап рим е р, сле дующий код м оже т исп оль зовать ся для структуры foo: blen[0]=1; indices[0]=0; oldtypes[0]=MPI_INT; blen[1]=1; indices[1]=&foo.b-&foo; oldtypes[1]=MPI_CHAR; blen[2]=1; indices[2]=sizeof(foo); oldtypes[2]=MPI_UB; MPI_Type_struct(3, blen, indices, oldtypes, &newtype);
MPI_Type_ub
Возвращае т ве рхнюю г раницу тип а
int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
54
В ходной парам етр datatype
Т ип данны х(де скрип тор)
В ы ходной парам етр displacement С м е ще ние ве рхне й г раницы от начала в байтах(це лое число)
MPI_Type_vector
С оздае т ве кторны й (п роре же нны й) тип
int MPI_Type_vector(int count, int blocklen, int stride, MPI_Datatype oldtype, MPI_Datatype *newtype)
В ходны е парам етры count blocklen stride oldtype
Ч исло блоков (не отрицате ль ное це лое число) Ч исло эле м е нтов в каждом блоке (не отрицате ль ное це лое ) Ч исло эле м е нтов м е жду началам и каждог о блока (це лое число) С тары й тип данны х(де скрип тор)
В ы ходной парам етр newtype
Н овы й тип данны х (де скрип тор)
MPI_Unpack
Расп аковы вае т тип данны х из не п ре ры вной п ам я ти
int MPI_Unpack(void *inbuf, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, MPI_Comm comm)
В ходны е парам етры inbuf insize position outcount datatype comm
Н ачало входног о буфе ра (указате ль ) Разм е р входног о буфе ра в байтах(це лое число) Т е кущая п озиция в байтах(це лое число) Ч исло эле м е нтов, которы е будут расп акованы (це лое число) Т ип данны хкаждог о эле м е нта вы ходны х данны х(де скрип тор) К ом м уникатор для уп акованног о сообще ния (де скрип тор)
В ы ходной парам етр outbuf
Н ачало вы ходног о буфе ра (указате ль )
См . также MPI_Pack, MPI_Pack_size
MPI_Wait
Ж де т заве рше ния п осы лки или п рие м а
int MPI_Wait(MPI_Request *request, MPI_Status *status)
55
В ходной парам етр request
Зап рос (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_Waitall
Ж де т заве рше ния все хуказанны х свя зе й
int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[])
В ходны е парам етры count array_of_requests
Д лина сп исков (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходной парам етр array_of_statuses
М ассив объ е ктов состоя ния (м ассив статусов)
MPI_Waitany
Ж де т заве рше ния любы х из указанны х п осы лок или п рие м ов
int MPI_Waitany(int count, MPI_Request array_of_requests[], int *index, MPI_Status *status)
В ходны е парам етры count array_of_requests
Д лина сп иска (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходны е парам етры index status
Инде кс де скрип тора заве ршивше йся оп е рации (це лое число в диап азоне от 0 до count-1). О бъ е кт состоя ния (статус)
При м ечани е.
Е сли все зап росы – MPI_REQUEST_NULL, index возвращае тся как MPI_UNDEFINED, а status – как п устое состоя ние .
MPI_Waitsome
Ж де т заве рше ния каких-либо из указанны хсвя зе й
int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount, int array_of_indices[], MPI_Status array_of_statuses[])
56
В ходны е парам етры incount array_of_requests
Д лина array_of_requests (це лое число) М ассив зап росов (м ассив де скрип торов)
В ы ходны е парам етры outcount array_of_indices array_of_statuses
Ч исло заве рше нны х зап росов (це лое число) М ассив инде ксов оп е раций, которы е заве ршились (м ассив це лы х чисе лв диап азоне от 0 до incount-1) М ассив объ е ктов состоя ния для оп е раций, которы е заве ршились (м ассив статусов)
При м ечани я .
П усты е зап росы иг норируются ; е сли все зап росы п усты е , outcount возвращае тся установле нны м в MPI_UNDEFINED.
MPI_Wtick
Возвращае т MPI_Wtime
разре шающую
сп особность
double MPI_Wtick()
В озвращ аем ое значени е Значе ние в се кундах разре шающе й сп особности MPI_Wtime
MPI_Wtime
Возвращае т п роше дше е вре м я на вы зы вающе м п роце ссоре
double MPI_Wtime()
В озвращ аем ое значени е Вре м я в се кундах, начиная с п роизволь ног о вре м е ни в п рошлом .
При м ечани е.
Исп оль зуйте MPI_Wtick для оп ре де ле ния разре ше ния MPI_Wtime. Е сли атрибут MPI_WTIME_IS_GLOBAL оп ре де ле н и true, значе ние синхронизировано п о все м п роце ссам в MPI_COMM_WORLD.
См . также MPI_Wtick, MPI_Attr_get
С оставите ль : Фе ртиков Вадим Вале рие вич Ре дактор: Бунина Т .Д .
П аралле ль ное п рог рам м ирование
Message Passing Interface С п равочны е м ате риалы Ч асть 2 Д ля студе нтов 3 курса дне вног о отде ле ния С оставите ль : Фе ртиков В.В.
2
В ведени е П е ре д Вам и вторая часть п особия , п ре дставля юще г о сп равочны е м ате риалы п о исп оль зованию MPI (Message Passing Interface, Инте рфе йса с п е ре даче й сообще ний) в це ля х создания п е ре носим ы х п аралле ль ны х п риложе ний. П особие адре совано, п ре жде все г о, п рог рам м истам на я зы ках C и C++, вы бравшим в каче стве инструм е нтария п аралле ль ног о п рог рам м ирования наиболе е п ре дставите ль ную ре ализацию стандарта – п аке т MPICH (MPI CHameleon). П аке т расп ространя е тся Арг оннской националь ной лабораторие й С Ш А, г оловной орг анизацие й п рое кта MPI, и считае тся базовой ре ализацие й стандарта. П особие состоит из двух часте й. Д анная вторая часть буде т п оле зна п рог рам м исту, накоп ивше м у уже не которы й оп ы т создания MPI-п риложе ний, и соде ржит све де ния , не обходим ы е для даль не йше г о сове рше нствования . С ре ди них – оп исание архите ктурно-не зависим ог о инте рфе йса для работы с файлам и, я вля юще г ося часть ю ре ализации новой сп е цификации MPI-2, све де ния о работе с п оль зовате ль ским и топ олог ия м и, инте рком м уникаторам и, информ ационны м и объ е ктам и, кэшируе м ы м и атрибутам и и п оль зовате ль ским и обработчикам и ошибок. Н ачинающих MPI-п рог рам м истов м ы отсы лае м к части п е рвой, соде ржаще й наиболе е часто исп оль зуе м ы й м ате риал п о основны м функция м , константам и тип ам данны х, оп ре де ля е м ы х MPI и ре ализованны х MPICH. Т ак же как и в п е рвой части, ниже п риводится таблица ссы лок на страницы п особия , п озволя ющая ускорить п оиск нужной информ ации, руководствуя сь п риня той в MPI нотацие й зап иси иде нтификаторов.
3
Т аб л и ц а с с ы л ок
соде ржит ном е ра страниц п особия
4. Attr_delete 14. File_get_view 24. File_write_all_end 4. Attr_get 14. File_iread 25. File_write_at 4. Attr_put 15. File_iread_at 25. File_write_at_all 5. Cart_coords 15. File_iread_shared 26. File_write_at_all_begin 5. Cart_create 15. File_iwrite 24. File_write_at_all_end 6. Cart_get 16. File_iwrite_at 26. File_write_ordered 6. Cart_map 16. File_iwrite_shared 27. File_write_ordered_begin 7. Cart_rank 17. File_open 27. File_write_ordered_end 7. Cart_shift 17. File_preallocate 27. File_write_shared 7. Cart_sub 17. File_read 28. Graph_create 8. Cartdim_get 18. File_read_all 28. Graph_get 8. Comm_test_inter 18. File_read_all_begin 29. Graph_map 8. DUP_FN 18. File_read_all_end 29. Graph_neighbors 8. Dims_create 19. File_read_at 29. Graph_neighbors_count 9. Errhandler_create 19. File_read_at_all 30. Graphdims_get 9. Errhandler_free 20. File_read_at_all_begin 30. Info_create 9. Errhandler_get 20. File_read_at_all_end 30. Info_delete 10. Errhandler_set 20. File_read_ordered 30. Info_dup 10. Error_class 21. File_read_ordered_begin 31. Info_free 10. Error_string 21. File_read_ordered_end 31. Info_get 11. File_close 21. File_read_shared 31. Info_get_nkeys 11. File_delete 22. File_seek 31. Info_get_nthkey 11. File_get_amode 22. File_seek_shared 32. Info_get_valuelen 11. File_get_atomicity 22. File_set_atomicity 32. Info_set 12. File_get_byte_offset 22. File_set_info 32. Intercomm_create 12. File_get_group 23. File_set_size 34. Intercomm_merge 12. File_get_info 23. File_set_view 32. Keyval_create 13. File_get_position 23. File_sync 35. Keyval_free 13. File_get_position_shared 23. File_write 35. NULL_COPY_FN 13. File_get_size 24. File_write_all 35. NULL_DELETE_FN 14. File_get_type_extent 24. File_write_all_begin 35. Topo_test
4
MPI_Attr_delete
У даля е т значе ние атрибута, свя занное с ключом
int MPI_Attr_delete(MPI_Comm comm, int keyval)
В ходны е парам етры comm keyval
К ом м уникатор, к котором у п рисое дине н атрибут (де скрип тор) Значе ние ключа удаля е м ог о атрибута (це лое число)
MPI_Attr_get
Возвращае т значе ние атрибута ключа
int MPI_Attr_get(MPI_Comm comm, int keyval, void *attr_value, int *flag)
В ходны е парам етры comm keyval
К ом м уникатор, к котором у п рисое дине н атрибут (де скрип тор) Значе ние ключа (це лое число)
В ы ходны е парам етры attr_value flag
Значе ние атрибута, е сли флажок = true true, е сли значе ние атрибута бы ло извле че но; false, е сли с ключом никакой атрибут не свя зан
MPI_Attr_put
С охраня е т значе ние атрибута, свя занног о с ключом
int MPI_Attr_put(MPI_Comm comm, int keyval, void *attr_value)
В ходны е парам етры К ом м уникатор, к котором у атрибут буде т п рисое дине н (де скрип тор) keyval Значе ние ключа, как возвращае м ое MPI_KEYVAL_CREATE (це лое число) attribute_val Значе ние атрибута
comm
При м ечани я .
Значе ния п остоя нны х атрибутов MPI_TAG_UB, MPI_HOST, MPI_IO и MPI_WTIME_IS_GLOBAL не м ог ут бы ть изм е не ны . Т ип значе ния атрибута – указате ль (void*). Е сли атрибут уже п ре дставле н, буде т вы звана функция удале ния , оп ре де ле нная п ри создании соотве тствующе г о ключа.
См . также MPI_Attr_get, MPI_Keyval_create, MPI_Attr_delete
5
MPI_Cart_cords
О п ре де ля е т координаты п роце сса в де картовой топ олог ии п о данном у ном е ру в г руп п е
int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords)
В ходны е парам етры comm rank maxdims
К ом м уникатор с де картовой структурой (де скрип тор) Н ом е р п роце сса внутри г руп п ы comm (це лое число) Д лина ве ктора coords в вы зы вающе й п рог рам м е (це лое число)
В ы ходной парам етр coords
Ц е лочисле нны й м ассив (разм е ром ndims) соде ржащий де картовы координаты сп е цифицированног о п роце сса (це лое число)
MPI_Cart_create
С оздае т новы й ком м уникатор с п рисое дине нной информ ацие й топ олог ии
int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_cart)
В ходны е парам етры comm_old ndims dims periods
reorder
Входной ком м уникатор (де скрип тор) Ч исло изм е ре ний (разм е рность ) де картовой се тки (це лое число) Ц е лочисле нны й м ассив разм е ром ndims, оп ре де ля ющий количе ства п роце ссов в каждом изм е ре нии Л ог иче ский м ассив разм е ром ndims, оп ре де ля ющий для каждог о изм е ре ния я вля е тся ли се тка п е риодиче ской (true) или не т (false) Ранжирование м оже т бы ть п е ре уп оря доче но (true) или не т (false) (лог иче ский)
В ы ходной парам етр comm_cart
К ом м уникатор с новой де картовой топ олог ие й (де скрип тор)
Ал гори тм . руе тся .
Информ ация в п арам е тре reorder в настоя ще е вре м я иг нори-
6
MPI_Cart_get
Возвращае т информ ацию о де картовой топ олог ии, свя занной с ком м уникатором
int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, int *coords)
В ходны е парам етры comm maxdims
К ом м уникатор с де картовой структурой (де скрип тор) Д лина ве кторов dims, periods и coords в вы зы вающе й п рог рам м е (це лое число)
В ы ходны е парам етры dims periods coords
Ч исло п роце ссов для каждог о де картовог о изм е ре ния (м ассив це лы х чисе л) П е риодичность (true/false) для каждог о де картовог о изм е ре ния (лог иче ский м ассив) К оординаты вы зы вающе г о п роце сса в де картовой структуре (м ассив це лы х чисе л)
MPI_Cart_map
О тображае т п роце сс на информ ацию о де картовой топ олог ии
int MPI_Cart_map(MPI_Comm comm_old, int ndims, int *dims, int *periods, int *newrank)
В ходны е парам етры comm ndims dims periods
Входной ком м уникатор (де скрип тор) Ч исло изм е ре ний де картовой структуры (це лое число) Ц е лочисле нны й м ассив разм е ром ndims, оп ре де ля ющий количе ства п роце ссов в каждом координатном нап равле нии Л ог иче ский м ассив разм е ром ndims, оп ре де ля ющий сп е цификации п е риодичности в каждом координатном нап равле нии
В ы ходной парам етр newrank
П е ре уп оря доче нны й ном е р вы зы вающе г о п роце сса; либо MPI_UNDEFINED, е сли вы зы вающий п роце сс не п ринадле жит се тке (це лое число)
7
MPI_Cart_rank
О п ре де ля е т ном е р п роце сса в ком м уникаторе п ри данном де картовом расп оложе нии
int MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)
В ходны е парам етры comm coords
К ом м уникатор с де картовой структурой (де скрип тор) Ц е лочисле нны й м ассив (разм е ром ndims), оп ре де ля ющий де картовы координаты п роце сса
В ы ходной парам етр rank
Н ом е р заданног о п роце сса (це лое число)
MPI_Cart_shift
Возвращае т см е ще нны е ном е ра источника и адре сата п ри заданны х нап равле нии и ве личине сдвиг а
int MPI_Cart_shift(MPI_Comm comm, int direction, int displ, int *source, int *dest)
В ходны е парам етры comm direction disp
К ом м уникатор с де картовой структурой (де скрип тор) К оординатное изм е ре ние для сдвиг а (це лое число) С м е ще ние (> 0: сдвиг вве рх, < 0: сдвиг вниз) (це лое число)
В ы ходны е парам етры rank_source Н ом е р п роце сса-источника (це лое число) rank_dest Н ом е р п роце сса-адре сата (це лое число)
При м ечани е.
П арам е тр нап равле ния находится в диап азоне [0, n-1] для n-м е рной де картовой п е тли.
MPI_Cart_sub
Д е лит ком м уникатор на п одг руп п ы , которы е форм ируют де картовы п одсе ти м е нь ше й разм е рности
int MPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *comm_new)
В ходны е парам етры comm К ом м уникатор с де картовой структурой (де скрип тор) remain_dims i-ты й эле м е нт remain_dims оп ре де ля е т, сохраня е тся ли i-тое изм е ре ние в п одсе тке (true) или не т (false) (лог иче ский ве ктор)
8
В ы ходной парам етр newcomm
К ом м уникатор, соде ржащий п одсе ть , которая включае т вы зы вающий п роце сс (де скрип тор)
MPI_Cartdim_get
Возвращае т информ ацию о де картовой топ олог ии, свя занную с ком м уникатором
int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
В ходной парам етр comm
К ом м уникатор с де картовой структурой (де скрип тор)
В ы ходной парам етр ndims
Ч исло изм е ре ний де картовой структуры (це лое число)
MPI_Comm_test_inter
П рове ря е т, я вля е тся ли comm инте рком м уникатором
int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр flag
(Л ог иче ский)
MPI_Dims_create
С оздае т разде л (division) п роце ссов в де картовой се тке
int MPI_Dims_create(int nnodes, int ndims, int *dims)
В ходны е парам етры nnodes ndims
Ч исло узлов в се тке (це лое число) Ч исло де картовы хизм е ре ний (це лое число)
В ходной/вы ходной парам етр dims
Ц е лочисле нны й м ассив разм е ром ndims, оп ре де ля ющий количе ства узлов в каждом изм е ре нии
MPI_DUP_FN
Готовая функция коп ирования атрибутов
9
MPI_Errhandler_create
С оздае т драйве р ошибок
int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler)
В ходной парам етр function
О п ре де ля е м ая п оль зовате ле м п роце дура обработки ошибок
В ы ходной парам етр errhandler
MPI драйве р ошибок (де скрип тор)
При м ечани е.
С тандарт MPI зая вля е т, что ре ализация м оже т де лать вы ходное значе ние (errhandler) п росто адре сом функции. О днако сп е цифика работы MPI_Errhandler_free де лае т это не возм ожны м , п осколь ку от не е тре буе тся установить значе ние п арам е тра в MPI_ERRHANDLER_NULL. К ром е тог о, фактиче ский драйве р ошибок долже н оставать ся , п ока не освобожде ны все ком м уникаторы , которы е е г о исп оль зуют.
MPI_Errhandler_free
О свобождае т драйве р ошибок
int MPI_Errhandler_free(MPI_Errhandler *errhandler)
В ходной парам етр errhandler
MPI драйве р ошибок (де скрип тор). MPI_ERRHANDLER_NULL на вы ходе .
MPI_Errhandler_get
У станавливае тся
в
П олучае т драйве р ошибок для ком м уникатора
int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
В ходной парам етр comm
К ом м уникатор, из которог о тре буе тся п олучить драйве р ошибок (де скрип тор)
В ы ходной парам етр errhandler
MPI драйве р ошибок, в те кущий м ом е нт свя занны й с ком м уникатором (де скрип тор)
При м ечани е о реал и зац и и . С тандарт MPI бы лне я се н в том , тре буе т ли эта п одп рог рам м а, чтобы п оль зовате ль вы зы вал MPI_Errhandler_free п о
10 одном у разу для каждог о вы зова данной п одп рог рам м ы , чтобы освободить драйве р ошибок. П осле не которы х де батов MPI Форум добавил я вное утве ржде ние , что п оль зовате ли должны вы звать MPI_Errhandler_free, ког да возвращае м ое данной п одп рог рам м ой значе ние боль ше не нужно. Т акое п ове де ние п одобно друг им MPI п одп рог рам м ам для п олуче ния объ е ктов; нап рим е р, MPI_Comm_group тре буе т, чтобы п оль зовате ль вы звал MPI_Group_free, ког да г руп п а, возвраще нная MPI_Comm_group боль ше не нужна.
MPI_Errhandler_set
У станавливае т драйве р ошибок для ком м уникатора
int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
В ходны е парам етры comm errhandler
К ом м уникатор, для которог о устанавливае тся драйве р ошибок (де скрип тор) Н овы й MPI драйве р ошибок для ком м уникатора (де скрип тор)
MPI_Error_class
П ре образуе т код ошибки в класс ошибки
int MPI_Error_class(int errorcode, int *errorclass)
В ходной парам етр errorcode
К од ошибки, возвраще нны й MPI п одп рог рам м ой
В ы ходной парам етр errorclass
К ласс ошибки, свя занны й с errorcode
MPI_Error_string
Возвращае т строку для данног о кода ошибки
int MPI_Error_string(int errorcode, char *string, int *resultlen)
В ходной парам етр errorcode
К од ошибки, возвраще нны й MPI п одп рог рам м ой или MPI класс ошибки
В ы ходны е парам етры string resultlen
Т е кст, которы й соотве тствуе т errorcode Д лина строки
11
При м ечани е.
возвращае м ы е MPI К оды ошибок – значе ния , п одп рог рам м ам и. О ни м ог ут бы ть п ре образованы в классы ошибок п одп рог рам м ой MPI_Error_class.
MPI_File_close
Закры вае т файл
int MPI_File_close(MPI_File *fh)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
MPI_File_delete
У даля е т файл
int MPI_File_delete(char *filename, MPI_Info info)
В ходны е парам етры filename info
Им я удаля е м ог о файла (строка) Информ ационны й объ е кт (де скрип тор)
MPI_File_get_amode
Возвращае т ре жим файлу
доступ а
к
int MPI_File_get_amode(MPI_File fh, int *amode)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр amode
Ре жим доступ а (це лое число)
MPI_File_get_atomicity
Возвращае т атом арны й ре жим
int MPI_File_get_atomicity(MPI_File fh, int *flag)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр flag
true, е сли ре жим атом арны й, false, е сли не т (лог иче ский)
12
MPI_File_get_byte_offset
Возвращае т абсолютную п озицию байта в файле , соотве тствующую см е ще нию в тип ах эле м е нта, относите ль но те куще г о п ре дставле ния . int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp)
В ходны е парам етры fh offset
Д е скрип тор файла (де скрип тор) С м е ще ние (не отрицате ль ное це лое число)
В ы ходной парам етр disp
Абсолютная п озиция байта см е ще ния (не отрицате ль ное це лое число)
MPI_File_get_group
Возвращае т г руп п у п роце ссов, которы е откры ли файл
int MPI_File_get_group(MPI_File fh, MPI_Group *group)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр group
Груп п а, которая откры ла файл(де скрип тор)
MPI_File_get_info
Возвращае т п одсказки (hints) для файла, которы е фактиче ски исп оль зуются MPI
int MPI_File_get_info(MPI_File fh, MPI_Info *info_used)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр info_used
Информ ационны й объ е кт (де скрип тор)
13
MPI_File_get_position
Возвращае т те кущую п озицию индивидуаль ног о указате ля файла, изм е ре нную в е диницах тип а эле м е нта, относите ль но те куще г о п ре дставле ния . int MPI_File_get_position(MPI_File fh, MPI_Offset *offset)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр offset
С м е ще ние индивидуаль ног о указате ля файла (не отрицате ль ное це лое число)
MPI_File_get_position_shared
Возвращае т те кущую п озицию разде ля е м ог о указате ля файла в е диницах тип а эле м е нта относите ль но те куще г о п ре дставле ния int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр offset
С м е ще ние разде ля е м ог о указате ля файла (не отрицате ль ное це лое число)
MPI_File_get_size
Возвращае т разм е р файла
int MPI_File_get_size(MPI_File fh, MPI_Offset *size)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходной парам етр size
Разм е р файла в байтах(не отрицате ль ное це лое число)
14
MPI_File_get_type_extent
Возвращае т п ротя же нность тип а данны хв файле
int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent)
В ходны е парам етры fh datatype
Д е скрип тор файла (де скрип тор) Т ип данны х(де скрип тор)
В ы ходной парам етр extent
П ротя же нность тип а данны х(не отрицате ль ное це лое число)
MPI_File_get_view
Возвращае т п ре дставле ние файла
int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходны е парам етры disp etype filetype datarep
С м е ще ние (не отрицате ль ное це лое число) Т ип данны хэле м е нта (де скрип тор) Т ип файла (де скрип тор) П ре дставле ние данны х(строка) (data representation)
MPI_File_iread
Н е блокирующе е чте ние , исп оль зующе е индивидуаль ны й указате ль файла
int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf
Н ачаль ны й адре с буфе ра (указате ль )
request
15 зап роса (де скрип тор)
О бъ е кт
MPI_File_iread_at
Н е блокирующе е чте ние , зующе е я вное см е ще ние
исп оль -
int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh offset count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf request
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт зап роса (де скрип тор)
MPI_File_iread_shared
Н е блокирующе е чте ние , исп оль зующе е разде ля е м ы й указате ль файла
int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf request
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт зап роса (де скрип тор)
MPI_File_iwrite
Н е блокирующая зап ись , исп оль зующая индивидуаль ны й указате ль файла
int MPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh buf
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль )
16 count datatype
Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр request
О бъ е кт зап роса (де скрип тор)
MPI_File_iwrite_at
Н е блокирующая зап ись , исп оль зующая я вное см е ще ние
int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh offset buf count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр request
О бъ е кт зап роса (де скрип тор)
MPI_File_iwrite_shared
Н е блокирующая зап ись , исп оль зующая разде ля е м ы й указате ль файла
int MPI_File_iwrite_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
В ходны е парам етры fh buf count datatype
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр request
О бъ е кт зап роса (де скрип тор)
17
MPI_File_open
О ткры вае т файл
int MPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh)
В ходны е парам етры comm filename amode info
К ом м уникатор (де скрип тор) Им я откры вае м ог о файла (строка) Ре жим доступ а к файлу (це лое число) Информ ационны й объ е кт (де скрип тор)
В ы ходной парам етр fh
Д е скрип тор файла (де скрип тор)
MPI_File_preallocate
Ре зе рвируе т п ространство сохране ния для файла
int MPI_File_preallocate(MPI_File fh, MPI_Offset size)
В ходны е парам етры fh size
Д е скрип тор файла (де скрип тор) Ре зе рвируе м ы й разм е р (не отрицате ль ное це лое число)
MPI_File_read
Ч те ние с исп оль зование м индивидуаль ног о указате ля файла
int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
18
MPI_File_read_all
К олле ктивное чте ние , исп оль зующе е индивидуаль ны й указате ль файла
int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_all_begin
Н ачинае т разде ль ное колле ктивное чте ние , исп оль зующе е индивидуаль ны й указате ль файла int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр buf
Н ачаль ны й адре с буфе ра (указате ль )
MPI_File_read_all_end
Заве ршае т разде ль ное колле ктивное чте ние , исп оль зующе е индивидуаль ны й указате ль файла int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
19
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_at
Ч те ние с исп оль зование м я вног о см е ще ния
int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh offset count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_at_all
К олле ктивное чте ние , исп оль зующе е я вное см е ще ние
int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh offset count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
20
MPI_File_read_at_all_begin
Н ачинае т разде ль ное колле ктивное чте ние , исп оль зующе е я вное см е ще ние
int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh offset count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр buf
Н ачаль ны й адре с буфе ра (указате ль )
MPI_File_read_at_all_end
Заве ршае т разде ль ное колле ктивное чте ние , исп оль зующе е я вное см е ще ние
int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_ordered
К олле ктивное чте ние , исп оль зующе е разде ля е м ы й указате ль файла
int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
21
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_ordered_begin
Н ачинае т разде ль ное колле ктивное чте ние , исп оль зующе е разде ля е м ы й указате ль файла int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр buf
Н ачаль ны й адре с буфе ра (указате ль )
MPI_File_read_ordered_end
Заве ршае т разде ль ное колле ктивное чте ние , исп оль зующе е разде ля е м ы й указате ль файла int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_read_shared
Ч те ние с исп оль зование м разде ля е м ог о указате ля файла
int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh count
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число)
22 datatype
Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_seek
М одифицируе т индивидуаль ны й указате ль файла
int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence)
В ходны е парам етры fh offset whence
Д е скрип тор файла (де скрип тор) С м е ще ние файла (це лое число) Ре жим м одификации (состоя ние )
MPI_File_seek_shared
М одифицируе т указате ль файла
разде ля е м ы й
int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence)
В ходны е парам етры fh offset whence
Д е скрип тор файла (де скрип тор) С м е ще ние файла (це лое число) Ре жим м одификации (состоя ние )
MPI_File_set_atomicity
У станавливае т ре жим
атом арны й
int MPI_File_set_atomicity(MPI_File fh, int flag)
В ходны е парам етры fh flag
Д е скрип тор файла (де скрип тор) true, чтобы установить атом арны й ре жим , false, чтобы установить не атом арны й ре жим (лог иче ский)
MPI_File_set_info
У станавливае т новы е значе ния для п одсказок (hints), свя занны х с файлом
int MPI_File_set_info(MPI_File fh, MPI_Info info)
23
В ходны е парам етры fh info
Д е скрип тор файла (де скрип тор) Информ ационны й объ е кт (де скрип тор)
MPI_File_set_size
У станавливае т разм е р файла
int MPI_File_set_size(MPI_File fh, MPI_Offset size)
В ходны е парам етры fh size
Д е скрип тор файла (де скрип тор) Разм е р усе кае м ог о или расширя е м ог о файла (не отрицате ль ное це лое число)
MPI_File_set_view
У станавливае т п ре дставле ние (view) файла
int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, char *datarep, MPI_Info info)
В ходны е парам етры fh disp etype filetype datarep info
Д е скрип тор файла (де скрип тор) С м е ще ние (не отрицате ль ное це лое число) Т ип данны хэле м е нта (де скрип тор) Т ип файла (де скрип тор) П ре дставле ние данны х(строка) Информ ационны й объ е кт (де скрип тор)
MPI_File_sync
Заставля е т все п ре ды дущие зап иси бы ть п е ре м е ще нны м и на устройство хране ния
int MPI_File_sync(MPI_File fh)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
MPI_File_write
Зап ись , исп оль зующая индивидуаль ны й указате ль файла
int MPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh
Д е скрип тор файла (де скрип тор)
24 buf count datatype
Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_File_write_all
К олле ктивная зап ись , исп оль зующая индивидуаль ны й указате ль файла
int MPI_File_write_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh buf count datatype
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_File_write_all_begin
Н ачинае т разде ль ную колле ктивную зап ись , исп оль зующую индивидуаль ны й указате ль файла int MPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh buf count datatype
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
MPI_File_write_all_end Заве ршае т разде ль ную колле ктивную зап ись , исп оль зующую индивидуаль ны й указате ль файла int MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status)
25
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_write_at
Зап ись , исп оль зующая я вное см е ще ние
int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh offset buf count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_File_write_at_all
К олле ктивная зап ись , исп оль зующая я вное см е ще ние
int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh offset buf count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
26
MPI_File_write_at_all_begin
Н ачинае т разде ль ную колле ктивную зап ись , исп оль зующую я вное см е ще ние
int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh offset buf count datatype
Д е скрип тор файла (де скрип тор) С м е ще ние файла (не отрицате ль ное це лое число) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
MPI_File_write_at_all_end
Заве ршае т разде ль ную колле ктивную зап ись , исп оль зующую я вное см е ще ние
int MPI_File_write_at_all_end(MPI_File fh, void *buf, MPI_Status *status)
В ходны е парам етры fh buf
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль )
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_File_write_ordered
К олле ктивная зап ись , исп оль зующая разде ля е м ы й указате ль файла
int MPI_File_write_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh buf count datatype
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
27
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_File_write_ordered_begin
Н ачинае т разде ль ную колле ктивную зап ись , исп оль зующую разде ля е м ы й указате ль файла int MPI_File_write_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
В ходны е парам етры fh count datatype
Д е скрип тор файла (де скрип тор) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число) Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр buf
Н ачаль ны й адре с буфе ра (указате ль )
MPI_File_write_ordered_end
Заве ршае т разде ль ную колле ктивную зап ись , исп оль зующую разде ля е м ы й указате ль файла int MPI_File_write_ordered_end(MPI_File fh, void *buf, MPI_Status *status)
В ходной парам етр fh
Д е скрип тор файла (де скрип тор)
В ы ходны е парам етры buf status
Н ачаль ны й адре с буфе ра (указате ль ) О бъ е кт состоя ния (статус)
MPI_File_write_shared
Зап ись , исп оль зующая разде ля е м ы й указате ль файла
int MPI_File_write_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
В ходны е парам етры fh buf count
Д е скрип тор файла (де скрип тор) Н ачаль ны й адре с буфе ра (указате ль ) Ч исло эле м е нтов в буфе ре (не отрицате ль ное це лое число)
28 datatype
Т ип данны хэле м е нта буфе ра (де скрип тор)
В ы ходной парам етр status
О бъ е кт состоя ния (статус)
MPI_Graph_create
С оздае т новы й ком м уникатор, к котором у п рисое диня е тся информ ация о топ олог ии
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, int reorder, MPI_Comm *comm_graph)
В ходны е парам етры comm_old nnodes index edges reorder
Входной ком м уникатор бе з топ олог ии (де скрип тор) Ч исло узлов в г рафе (це лое число) М ассив це лы х чисе л, оп исы вающихсте п е ни узлов М ассив це лы х чисе л, оп исы вающихре бра г рафа Ранжирование м оже т бы ть п е ре уп оря доче но (true) или не т (false) (лог иче ский)
В ы ходной парам етр comm_graph К ом м уникатор с добавле нной топ олог ие й г рафа (де скрип тор)
Ал гори тм . В настоя ще е
MPI_Graph_get
вре м я информ ация reorder иг норируе тся .
Возвращае т информ ацию о топ олог ии г рафа, свя занной с ком м уникатором
int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int *index, int *edges)
В ходны е парам етры comm maxindex maxedges
К ом м уникатор со структурой г рафа (де скрип тор) Д лина ве ктора index в вы зы вающе й п рог рам м е (це лое число) Д лина ве ктора edges в вы зы вающе й п рог рам м е (це лое число)
В ы ходной парам етр index edges
М ассив це лы х чисе л, соде ржащих структуру г рафа (п одробности см . в оп ре де ле нии MPI_GRAPH_CREATE) М ассив це лы х чисе л, соде ржащих структуру г рафа
29
MPI_Graph_map
О тображае т п роце сс на информ ацию о топ олог ии г рафа
int MPI_Graph_map(MPI_Comm comm_old, int nnodes, int *index, int *edges, int *newrank)
В ходны е парам етры comm nnodes index edges
Входной ком м уникатор (де скрип тор) Ч исло узлов г рафа (це лое число) Ц е лочисле нны й м ассив, оп ре де ля ющий структуру г рафа, см . MPI_GRAPH_CREATE Ц е лочисле нны й м ассив, оп ре де ля ющий структуру г рафа
В ы ходной парам етр newrank
П е ре уп оря доче нны й ном е р вы зы вающе г о п роце сса; MPI_UNDEFINED, е сли вы зы вающий п роце сс не п ринадле жит г рафу (це лое число)
MPI_Graph_neighbors
Возвращае т сосе де й узла, свя занног о с топ олог ие й г рафа
int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int *neighbors)
В ходны е парам етры comm rank maxneighbors
К ом м уникатор с топ олог ие й г рафа (де скрип тор) Н ом е р п роце сса в г руп п е comm (це лое число) Разм е р м ассива neighbors (це лое число)
В ы ходной парам етр neighbors
Н ом е ра п роце ссов, которы е я вля ются сосе дя м и заданног о п роце сса (м ассив це лы х чисе л)
MPI_Graph_neighbors_count
Возвращае т число сосе де й узла, свя занног о с топ олог ие й г рафа
int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
В ходны е парам етры comm
К ом м уникатор с топ олог ие й г рафа (де скрип тор)
30 rank
Н ом е р п роце сса в г руп п е comm (це лое число)
В ы ходной парам етр nneighbors
Ч исло сосе де й заданног о п роце сса (це лое число)
MPI_Graphdims_get
Возвращае т информ ацию о топ олог ии г рафа, свя занной с ком м уникатором
int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
В ходной парам етр comm
К ом м уникатор для г руп п ы со структурой г рафа (де скрип тор)
В ы ходной парам етр nnodes nedges
Ч исло узлов в г рафе (це лое число) Ч исло ре бе р в г рафе (це лое число)
MPI_Info_create
С оздае т новы й информ ационны й объ е кт
int MPI_Info_create(MPI_Info *info)
В ы ходной парам етр info
Информ ационны й объ е кт (де скрип тор)
MPI_Info_delete
У даля е т п ару [ключ, значе ние ] из информ ации
int MPI_Info_delete(MPI_Info info, char *key)
В ходны е парам етры info key
Информ ационны й объ е кт (де скрип тор) К люч (строка)
MPI_Info_dup
Возвращае т дубликат информ ационног о объ е кта
int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo)
В ходной парам етр info
Информ ационны й объ е кт (де скрип тор)
В ы ходной парам етр newinfo
Д убликат информ ационног о объ е кта (де скрип тор)
31
MPI_Info_free
О свобождае т информ ационны й объ е кт
int MPI_Info_free(MPI_Info *info)
В ходной парам етр info
Информ ационны й объ е кт (де скрип тор)
MPI_Info_get
Возвращае т значе ние , свя занное с ключом
int MPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag)
В ходны е парам етры info key valuelen
Информ ационны й объ е кт (де скрип тор) К люч (строка) Д лина п арам е тра value (це лое число)
В ы ходны е парам етры value flag
Значе ние (строка) true, е сли ключ оп ре де ле н, false, е сли не т (буле в)
MPI_Info_get_nkeys
Возвращае т число оп ре де ле нны х на те кущий м ом е нт ключе й в информ ации
int MPI_Info_get_nkeys(MPI_Info info, int *nkeys)
В ходной парам етр info
Информ ационны й объ е кт (де скрип тор)
В ы ходной парам етр nkeys
Ч исло оп ре де ле нны х ключе й (це лое число)
MPI_Info_get_nthkey
Возвращае т n-ны й оп ре де ле нны й ключ в информ ации
int MPI_Info_get_nthkey(MPI_Info info, int n, char *key)
В ходны е парам етры info n
Информ ационны й объ е кт (де скрип тор) Н ом е р ключа (це лое число)
32
В ы ходной парам етр keys
К люч (строка)
MPI_Info_get_valuelen
Возвращае т длину значе ния , свя занног о с ключом
int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag)
В ходны е парам етры info key
Информ ационны й объ е кт (де скрип тор) К люч (строка)
В ы ходны е парам етры valuelen flag
Д лина значе ния (це лое число) true, е сли ключ оп ре де ле н, false, е сли не т (буле в)
MPI_Info_set
Д обавля е т п ару [ключ, значе ние ] к информ ации
int MPI_Info_set(MPI_Info info, char *key, char *value)
В ходны е парам етры info key value
Информ ационны й объ е кт (де скрип тор) К люч (строка) Значе ние (строка)
MPI_Intercomm_create
С оздае т инте рком м уникатор из двухинтраком м уникаторов
int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm *comm_out)
В ходны е парам етры local_comm Л окаль ны й (интра) ком м уникатор local_leader Н ом е р лиде ра в local_comm (часто 0) peer_comm У дале нны й ком м уникатор remote_leader Н ом е р удале нног о лиде ра в peer_comm (часто 0) tag Иде нтификатор сообще ния , исп оль зуе м ог о п ри п острое нии инте рком м уникатора; е сли п роизве де но не сколь ко вы зовов MPI_Intercomm_create, они должны исп оль зовать различны е иде нтификаторы (точне е , должно г арантировать ся , что локаль ны е и удале нны е лиде ры исп оль -
33 зуют различны е иде нтификаторы для каждог о MPI_Intercomm_create).
В ы ходной парам етр comm_out
С озданны й инте рком м уникатор
При м ечани е.
С тандарт MPI 1.1 соде ржит два взаим но исключающих ком м е нтария относите ль но входны х интраком м уникаторов. О дин г оворит, что их соотве тствующие г руп п ы не должны п е ре се кать ся ; друг ой, что лиде ры м ог ут бы ть одним и те м же п роце ссом . П осле не которог о обсужде ния MPI Форум ом бы ло ре ше но, что г руп п ы не должны п е ре се кать ся . О братите вним ание , что данная п одп рог рам м а не я вля е тся п ричиной таког о вы бора; скоре е , друг ие оп е рации на инте рком м уникаторах (п одобны е MPI_Intercomm_merge) не им е ют см ы сла для п е ре се кающихся г руп п .
Ал гори тм 1) Разм е стить конте кст п осы лки, конте ксты inter-coll и intra-coll. 2) П ослать "send_context" и сп исок lrank_to_grank из г руп п ы local_comm, е сли я –local_leader. 3) Е сли я – локаль ны й лиде р, ждать заве рше ния заре г истрированны х п осы лок и п рие м ов. Ре г истрируе тся п рие м информ ации удале нной г руп п ы и ожидае тся е г о заве рше ние . 4) Разослать информ ацию, п олуче нную от удале нног о лиде ра. 5) С оздать инте рком м уникатор с исп оль зование м им е юще йся те п е рь информ ации. Инте рком м уникатор образуе тся с тре м я уровня м и ком м уникаторов. Инте рком м уникатор, возвращае м ы й п оль зовате лю, "колле ктивны й" инте рком м уникатор, которы й м оже т исп оль зовать ся для бе зоп асной свя зи м е жду локаль ной и удале нной г руп п ам и, и колле ктивны й интраком м уникатор, которы й м оже т исп оль зовать ся для разм е ще ния новы х конте кстов во вре м я оп е раций merge и dup. Д ля образованног о в ре зуль тате инте рком м уникатора comm _out: comm _out = инте рком м уникатор comm _out –> comm _coll = "колле ктивны й" инте рком м уникатор comm _out –> comm _coll –> comm _coll = бе зоп асны й колле ктивны й интраком м уникатор
См .
также
MPI_Intercomm_merge, MPI_Comm_remote_group, MPI_Comm_remote_size
MPI_Comm_free,
34
MPI_Intercomm_merge
С оздае т интраком м уникатор из инте рком м уникатора
int MPI_Intercomm_merge(MPI_Comm comm, int high, MPI_Comm *comm_out)
В ходны е парам етры comm high
Инте рком м уникатор Исп оль зуе тся , чтобы уп оря дочить г руп п ы из двух интраком м уникаторов внутри comm п ри создании новог о ком м уникатора.
В ы ходной парам етр comm_out
С озданны й интраком м уникатор
Ал гори тм 1) Разм е стить два конте кста. 2) Л иде ры локаль ной и удале нной г руп п обм е ниваются значе ния м и high. 3) О п ре де лить значе ние high. 4) О бъ е динить две г руп п ы и образовать интраком м уникатор.
См . также MPI_Intercomm_create, MPI_Comm_free
MPI_Keyval_create
Ге не рируе т новы й ключ атрибута
int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn, int *keyval, void *extra_state)
В ходны е парам етры copy_fn delete_fn extra_state
callback функция коп ирования для keyval callback функция удале ния для keyval О п ре де ля е м ое п оль зовате ле м состоя ние для callback функций
В ы ходной парам етр keyval
Значе ние ключа для будуще г о доступ а (це лое число)
При м ечани я . Значе ния каторов).
ключе й г лобаль ны (доступ ны для все х ком м уни-
35
MPI_Keyval_free
О свобождае т ключ атрибута атрибута кэша ком м уникатора
для
int MPI_Keyval_free(int *keyval)
В ходной парам етр keyval
О свобождае м ое це лочисле нное значе ние ключа (це лое число)
См . также MPI_Keyval_create
MPI_NULL_COPY_FN
П ре доп ре де ле нная функция коп ирования атрибутов, исп оль зуе тся п ри отсутствии не обходим ости коп ировать атрибуты
MPI_NULL_DELETE_FN
Функция исп оль зуе тся , чтобы не удаля ть атрибуты
В ходны е парам етры comm keyval attr extra_state
К ом м уникатор Значе ние ключа Атрибут О п ре де ля е м ое п оль зовате ле м функция м п оль зовате ля
При м ечани е.
состоя ние для п ре доставле ния
С м . обсужде ние MPI_Keyval_create для исп оль зования
этой функции.
MPI_Topo_test
О п ре де ля е т тип топ олог ии (е сли е сть ) свя занной с ком м уникатором
int MPI_Topo_test(MPI_Comm comm, int *top_type)
В ходной парам етр comm
К ом м уникатор (де скрип тор)
В ы ходной парам етр top_type
Т ип топ олог ии ком м уникатора comm (указате ль ).
См . также MPI_Graph_create, MPI_Cart_create
36
С оставите ль : Фе ртиков Вадим Вале рие вич Ре дактор: Бунина Т .Д .