
Библиотека MPI [Электронный ресурс] (90
..pdfКраткоопишемосновныефункциипри/передачисообщениймабез
блокировки:
int MPI_ISend(void *buf, int count, MPI_Datatype datatype, int dest, int msgtag, MPI_Comm comm, MPI_Request *request);
Параметры: |
|
|
|
|
buf -адресначалабуферапосообщылки |
|
|
ения; |
|
count -числопередаваемыхэлементовсообщ |
|
ении; |
||
datatype -типпередаваемыхэлементов; |
|
|
||
dest -номерпроцесса |
-получателя; |
|
|
|
msgtag -идентифика торсообщения; |
|
|
||
comm -идентификаторгруппы; |
|
|
||
request -идентасификаторпенхвыходной(едачионнойпа |
|
аметр). |
||
Передачасообщения,аналогичная |
|
|
MPI_Send,однаковозвратиз |
|
подпросразуграммыисходитпослеинициализациипроцессаперед ч |
|
|
buf.Это |
|
безож иданияоб |
работкивсообщенияего,находящегосявбуфере |
|
||
означает,чтонельзяповторноиспользоватьданныйбуфердлядругихцелей |
|
|
|
|
безпол учениядополнительинформзавершениианпцииной.сылки |
|
|
||
Окончаниепроцессаперт..тогод(моментачи,когдаможн |
|
|
о |
|
переиспользоватьбуфер |
bufбезопаисенияпортитьедаваемое |
|||
сообще)м жпредноие |
|
елитьспомощьюпараметра |
requestипроцедур |
|
MPI_Waitи MPI_Test. |
|
|
MPI_Sendи MPI_ISend, |
|
Соотправленное, бщениелюбойизпроцедур |
|
|
||
можетбытьпринятолюбойиз цедур |
|
|
MPI_Recvи MPI_IRecv. |
int MPI_IRecv(void *buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_comm comm, MPI_Request *request);
Параметры: |
|
|
|
buf -адресначалабуфераприемасообщениявыходной( п |
|
араметр) |
|
count -максчиэлемемальслоноетов |
|
впринимаемомсообщении |
|
datatype -типэлементовпринимаемогосообщ |
ения |
|
|
source -номерпроцесса |
-отправителя |
|
|
msgtag -идентифпринсообщикатормаемого |
ения |
|
|
comm -идентификаторгруппы |
|
|
|
request -идентасификаторнхронногоприемасообщениявыходной( ) |
|
|
|
Приемсообщения,аналогичный |
|
MPI_Recv,однаковозвратиз |
|
подпросразуграммыисходитпослеинициалпроцессабезизацииема |
|
buf.Окончаниепроцессаприема |
|
ожидаполучениясоовбуферещения |
|
|
|
можнопределитьспомощпараметраю |
|
requestипроцедур |
MPI_Waitи |
MPI_Test. |
|
|
|
|
21 |
|
|
int MPI_Wait( MPI_Request *request, MPI_Status *status);
Параметры: |
|
|
|
request -идентасификаторнхронногоприемаилипередачи; |
|
||
status -параметрысообщениявыходной( |
|
араметр). |
|
Ожидзавершенияпроцедурсинхронных |
|
MPI_ISendили |
|
MPI_IRecv,ассоциированныхидентификатором |
request.Вслучаепри, ма |
||
атрибутыдлинуполученногосообщем жнпределитьобычнымия |
status. |
||
образомсп |
омощьюпараметра |
||
int MPI_WaitAll( int count, MPI_Request *requests, |
|||
Параметры: |
MPI_Status *statuses); |
||
|
|
|
|
count -чидентификаторовсло; |
|
|
|
requests -массивидентификаторасинхронногоприема в |
/передачи; |
||
statuses -параметрысообщенийвыходной( |
|
аметр). |
|
Выполнроцблокедонссатехипор,покаруетсявсеоперации |
|
|
|
обмена,ассоциированныеука |
|
заннымиидентификаторами,небудут |
|
заверш.Есливовродеилинымяойесколькихоперацийобмевозникли |
|
statusesбустановленодет |
|
ошибки,топ шибкилевэлементахмассива |
|
||
соответствующеезначение. |
|
|
int MPI_WaitAny( int count, MPI_Request *requests, int *index, MPI_Status *status);
Параметры: |
|
count -чидентификаторовсло |
|
requests -массивидентификаторасинхронногоприемаилипер в |
едачи |
index -номерзавершеннойоперацииобменавыходной( |
араметр) |
status -параметрысообщенийвыходной( |
аметр) |
Выполнроцблокедонссатехипор,покаруетсякака |
-либооперация |
обмена,ассоциировауказаниден,тификаторамиыминбудетная |
|
завершена.Еслинесколькооперациймогутбытьзавершены,тослучайным |
indexсоде ржитномэлевментар |
образомвыбоднинихрз.Параметрется |
|
массиве requests,содержащидентификаторзавоперациигоршенной. |
|
int MPI_WaitSome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses);
Параметры: |
|
incount -чидентификаторовсло |
|
requests -ма ссивидентификаторасинхронногоприема в |
/передачи |
|
22 |
outcount -чидентификаторовслозавершившоперацийобменахся |
|
|
|||||
|
(выходнойп |
араметр) |
|
|
|
||
indexes -массивномерершившза операцииобменахся |
|
|
|
||||
|
(выхо днойпараметр) |
|
|
|
|||
statuses -парзамвесообщенийршившихсятры( |
выходнойпар |
аметр) |
|
||||
Выполнроцблокедонссатехипор,покаруетсякрайнмерей |
|
|
|
|
|
||
однаизоперобмена, ссоциированныхцийуказанными |
|
|
outcountсодержитчисло |
|
|||
идентификаторами,небудетзавершена.Параметр |
|
|
|
|
|||
завершенныхопер |
|
аций,апервые |
|
outcountэлемен товмассива |
indexes |
||
содержатномэл мраментовссива |
|
|
|
|
requestsсихидентификаторами.Первые |
|
|
outcountэлементовмассива |
|
|
statusesсодепарзжатмвершенныхтры |
|
|
||
операций. |
|
|
|
|
|
|
|
int MPI_Test( MPI_Request *request, int *flag, |
|
|
|||||
Параметры: |
|
MPI_Status *status); |
|
|
|||
|
|
|
|
|
|
|
|
request -идентасификаторнхронногоприемаилипередачи |
|
|
|
||||
flag -признакзавершенностиоперацииобменавыходной( пар |
|
|
аметр) |
|
|||
status -параметрысообщениявыходной( |
|
аметр) |
|
|
|||
Прозавершеннкаасинхрпроцедурстинных |
|
|
MPI_ISendили |
||||
MPI_IRecv,ассоциированных |
идентификатором request.Впараметре |
flag |
|||||
возвращаетзначен1,слоои операцияветствующаязавершена, |
|
|
|
|
|
||
значениевпротивном0 случае.Еслизаве оцедураприемашена,то |
|
|
|
|
|
||
атрибутыдлинуполученногосообщем жнпределитьобычнымия |
|
|
|
|
|
||
образомспомощь |
юпар аметра status. |
|
|
||||
int MPI_TestAll( int count, MPI_Request *requests, |
|
|
|||||
Параметры: |
|
int *flag, MPI_STatus *statuses); |
|
|
|||
|
|
|
|
|
|
|
|
count -чидентификаторовсло |
|
|
|
|
|||
requests -массивидентификаторасинхронногоприемаилипер в |
|
едачи |
|||||
flag -признакзавершенностиопераций |
|
|
обменавыходной( пар |
аметр) |
|
||
statuses -параметрысообщенийвыходной( |
|
аметр) |
|
|
|||
Впараметре |
flagвозвращаетзначение |
1,есливсеоперации, |
|
|
|||
ассоциированныеуказаниде ,тифиымизавершеныуказанием( аторами |
|
statuses)В.про тивнслучаеомзвращается |
|
|
|||
параметровсообщенийвмассиве |
|
|
|
||||
0,аэлементымассива |
|
statusesнеопр еделены. |
|
|
int MPI_TestAny(int count, MPI_Request *requests,
int *index, int *flag, MPI_Status *status);
Параметры:
count -чидентификаторовсло
23
requests -массивидентификаторасинхроннов |
гоприемаилипер |
едачи |
||
index -номерзавершеннойоперацииобменавыходной( |
|
|
|
араметр) |
flag -признакзавершенностиоперацииобменавыходной( пар |
|
|
|
аметр) |
status -параметрысообщениявыходной( |
|
аметр) |
|
|
Есликмоментувызоваподпрхотябыоднизгропераммы |
|
|
|
ацийобмена |
завершилась,топараметре |
flagвозврзнащаетсячение |
1, |
indexсодержит |
|
номерсоответствующегоэлементамассиве |
|
requests,а |
status -параметры |
|
сообщения. |
|
|
|
|
int MPI_TestSome( int incount, MPI_Request *requests, int *outcount, int *indexes, MPI_Status *statuses);
Параметры: |
|
|
incount -чидентификаторовсло |
|
|
requests -массивидентификаторасинхронногоприемаилипер в |
едачи |
|
outcount -чидентификаторовслозавершившоперацийобменахся |
|
|
(выходнойп |
араметр) |
|
indexes -массивномеровза ершившихс |
яоперацииобменавыходной( |
|
параметр) |
|
|
statuses -парзамвеоперацийршивштрывыходной( пархся |
аметр) |
|
Даннаяподпрогрработтакже, иакетмма |
|
MPI_TestSome,за |
исключениемтого,чтов происходзвратнемедленно.Еслниоднаизт |
|
ачение outcountбудетравнонулю. |
указаоперацийнзаных |
вершилась,тозн |
int MPI_Iprobe( int source, int msgtag, MPI_Comm comm, int *flag, MPI_Status *status);
Параметры: |
|
|
|
|
source -номерпроцесса |
-отправителяили |
MPI_ANY_SOURCE |
|
|
msgtag -идентификатожидаемогосообщенияили р |
|
MPI_ANY_TAG |
||
comm -идентификаторгруппы |
|
|
|
|
flag -признакзавершенностиоперацииобменавыходной( пар |
|
|
аметр) |
|
status -параметрыобнаруженсообщениявыхо( ого |
|
днойпараметр) |
||
Получениеинформациипоступленииструктуреожида мого |
|
flagвозвращаетзначение |
1,если |
|
сообезщенлокировки.В я |
|
параметре |
||
сообщениесподходящимиатрибутамиужеможетбытьпрвэтом(нято |
|
|
MPI_Probe),изначение |
0,если |
случаееедействиеполаностьюалогично |
|
|
||
сообщенияуказаннымиатрибутамиещенет. |
|
|
|
|
Объединениезапросовнавзаимод |
|
ействие |
|
|
Процедурыданнгруппыйзволяютснизитьнакладныерасходы, |
|
|
|
|
возникающиерамкаходногопроцессораприбработкеприема/передачи |
|
|
|
|
|
|
24 |
|
|
перемещениинеобходиинформеждупроцессомациисетевымй |
|
|
|
|
контролле.Несколькозапроснаи/илиомпередачемв |
|
|
умогут |
|
объединятьсявместедлятого,чтобыдалееихможнобылзапустить |
|
|
|
|
однойкоманд.Сприемасойобщенияникакнезависитотспособаего |
|
|
|
|
по:сооылки |
бщение,отправленноеспомощьюобъединениязапросовлибо |
|
|
|
обычнымсп |
особ,мобытьжетмприняток |
акобычнымспособом,таки |
|
|
помощьюобъединениязапр |
осов. |
|
|
|
int MPI_Send_Init( void *buf, int count, |
|
|||
|
MPI_Datatype datatype, int dest, int msgtag, |
|||
Параметры: |
MPI_Comm comm, MPI_Request *request); |
|||
|
|
|
|
|
buf -адресначалабуферапосообщылки |
|
ения |
|
|
count -число передаваемыхэлементовсообщ |
ении |
|
||
datatype -типпередаваемыхэлементов |
|
|
||
dest -номерпроцесса |
-получателя |
|
|
|
msgtag -идентификаторсообщения |
|
|
||
comm -идентификаторгруппы |
|
|
||
request -идентасификаторпенхвыходной(едачионнойпа |
|
аметр) |
||
Формизапрование |
осанвыпересылкиолнениеданных.Все |
|
||
параметрыточнотажекак, иуподпрограммы |
|
MPI_ISend,однаков |
||
отличиенееп рненачинсылкадовызовапоется |
|
|
дпрограммы |
|
MPI_StartAll. |
|
|
|
|
int MPI_Recv_Init( void *buf, int count, |
|
|||
|
MPI_Datatype datatype, int source, |
|
||
|
int msgtag, MPI_Comm comm, |
|
||
Параметры: |
MPI_Request *request); |
|
||
|
|
|
|
|
buf -адресначалабуфераприемасообщениявыходной( п |
|
араметр) |
||
count -числопринимаемыхэлементовсообщ |
ении |
|
||
datatype -типпринимаемыхэлементов |
|
|
||
source -номерпроцесса |
-отправителя |
|
||
msgtag -идентификаторсообщения |
|
|
||
comm -иде нтификаторгруппы |
|
|
||
request -идентасификатнхронногоприемавых( па)днаметрй |
|
|
||
Формизапнавыроприемавсолнданние.Всеныхиераметры |
MPI_IReceive,однаковотл |
|
||
точнотажекак, иуподпрограммые |
|
ичиеотнее |
||
реальныйприемненачинаетсядовызоваподпрограммы |
|
MPI_StartAll. |
MPI_Start_All( int count, MPI_Request *requests);
Параметры:
25
count -числозапросовнавзаимоде |
йствие |
|
requests -массивидентификатприема/передачивыходной( ) ров |
||
Запусквс |
ехотложенныхвзаимодействий,ассоциированныхвызовами |
|
подпрограмм MPI_Send_Initи |
MPI_Recv_Initсэлемассиваентамизапросов |
|
requests.Всевзаимодействзапускаютсярежимебезблокировки, х |
|
|
завершениеможнопредобычнымобразомлитьспомощьюпроц |
едур |
|
MPI_Waitи MPI_Test. |
|
|
Совмещенныеприем/передачасообщ ний |
|
|
Некоторыенспритрукциимо |
-передапримочастоеень.няютсяй |
|
Например,обменданссоседямиымипогруппев(группечетноеколичество |
|
|
ветвей!): |
|
|
MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if( rank % 2 ) {
Ветвисчетными/*номерамисначала передаютследующимнеч* вет, нымвя потомпринимают*отпредыдущих
*/
MPI_Send(..., ( rank+1 ) % size ,...); MPI_Recv(..., ( rank+size-1 ) % size ,...);
} else {
Нечв/*етпоступаютныевинаоборот: сначалапринимаютот* предыдущихве, вей потомпередают*следующим.
*/
MPI_Recv(..., ( rank-1 ) % size ,...); MPI_Send(..., ( rank+1 ) % size ,...);
}
Посылка данныхиполучениеподтверждения:
MPI_Send(Посылаем...данные,*/anyRank ,...); /* MPI_Recv(Принимаем..., anyRank ,...); /*
подтверждение*/
Ситуациянастолькораспро,чтовMPIспециальтраненная |
новведены |
двефункции,осуществляющиеодновремепосылкуданхнноых |
- MPI_Sendrecv. |
приемдругих.Перваяизних |
int MPI_Sendrecv( void *sbuf, int scount,
MPI_Datatype stype, int dest, int stag, void *rbuf, int rcount,
26
|
|
MPI_Datatype rtype, int source, MPI_DAtatype |
|||||
Параметры: |
|
rtag, MPI_Comm comm, MPI_Status *status) |
|||||
|
|
|
|
|
|
|
|
sbuf -адресначалабуферапосооылки |
|
бщения |
|
|
|||
scount -числопередаваемыхэлементовсообщ |
|
|
ении |
|
|||
stype -типпередаваемыхэлементов |
|
|
|
|
|||
dest -номерпроцесса |
-получателя |
|
|
|
|||
stag -идентификат орпосылаемогосообщ |
ения |
|
|
||||
rbuf -адресначалабуфераприемасообщениявыходной( п |
|
|
|
араметр) |
|||
rcount -числопринимаемыхэлементовсообщ |
|
ения |
|
||||
rtype -типпринимаемыхэлементов |
|
|
|
|
|||
source -номерпроцесса |
-отправителя |
|
|
|
|||
rtag -идентифпринсооикатормаемого |
|
бщения |
|
|
|||
comm -идентификаторгруппы |
|
|
|
|
|||
status -параметрыпринятогосообщенияв( пархдной |
|
|
|
аметр) |
|||
Даннаяоперацияобъв динзапосылкуяетросемиприем |
|
|
|
|
|||
сообщеПринимающий. отправлпроцессымогутявлятьсяющийодним |
|
|
|
|
MPI_Sendrecv, |
||
итемжепроцессом.Соотправлен, бщение |
|
|
|
ноперацией |
|||
можетбытьпринятообычнымобраз,точнотакжемперация |
|
|
|
|
|
||
MPI_Sendrecvможетпринясообщение, тьправлобычнойопенноерацией |
|
|
|
||||
MPI_Send.Буфераприемапосылкиобязателдолжныбытразлиьно |
|
|
|
чными. |
|||
Следуетучесть,чтоиприем, |
|
|
ипередачаиспользуютодинтотже |
MPI_Sendrecvвыбирает |
|||
коммунпорядок; прикаторередачиданныхма |
|
|
|
|
|||
автомат,прэтомгарантируетсячески,чтоавтоматическийвыборне |
|
|
|
|
|||
приведеткдедлокувзаимной( блокировкеразличныхпроц |
|
|
|
|
ссов). |
||
Другаяфункция |
MPI_Sendrecv_replace помимообщегокоммуникатора |
||||||
используетещеобщийдляприема |
count |
|
-передачибуфер.Неоченьудобното, |
|
|
||
чтопараметр |
получаетдвойноетолкование:этоколич ство |
|
|
|
|||
отпрда,ипредельнаявлянныхемвходнкостьыхбуфера.Покгозания |
|
|
|
|
|||
применению: |
|
|
|
|
|
|
|
принимаемыеданндолжныбытьзаведдлиннееотправляемыхмо |
|
|
|
||||
принимаемыеотпрд должнвляиметьенныеодины |
|
|
|
|
аковыйтип; |
||
отпрдазативляемыенныепринимаемымиаются. |
|
|
|
|
|||
MPI_Sendrecv_replaceтакжегаранвызыетированно |
|
аетдедлока. |
|||||
Чтотако |
едедл?Этвзаимнаяоблокировкапроцессовпри |
|
|
|
|||
использованииразделяемых |
|
|
есурсов. |
|
|
|
|
Вариант1: |
|
-- |
-- Процесс2 |
-- |
|
||
-- Процесс1 |
|
||||||
изпроцессаRecv(2 )изпроцесса1 Recv() |
|
|
|
|
|||
впроцессSend(2 )впроцесс1 ) Send( |
|
|
|
|
|||
Вариант1 |
вызоветдедлок,какойбыинструментарийнеиспользовался: |
|
|
|
|||
функцияприневеуправлениярнетмадотехпор,поканеполучитданные; |
|
|
|
|
|
||
|
|
|
|
27 |
|
|
|
поэтомуфункцияперможетдачиприск тправкеданныхупить;поэтому функцияпр...такдоемасамогоSIG_KILL).
Вариант2:
-- Процесс1 |
-- |
-- Процесс2 |
-- |
||
впроцессSend(2 )впроцесс1 ) Send( |
|
|
|||
изпроцессаRecv(2 )изпроцесса1 Recv() |
|
|
|||
Вариантзаблокир2 процесвтомсл,усфункцияетчаелиыпередачи |
|
|
|||
возвращаетуправлениетолькопосл |
|
етого,какданныепопалив |
|
||
пользовательскийбуфернаприемнстороне.Сквсего,имреетакинно |
|
|
|||
возьметсяреализовыватьперчразделяемуюдачурезпамять/семафоры |
|
|
|||
программист-проблемщик. |
|
|
|||
Однакоприисп льзовзависаMPIвовторомварнинеияанте |
|
|
|||
произойдет. |
MPI_Send,еслинаприемнойстороненетготовности(вызван |
|
|||
MPI_Recv),станетеедожидаться,положитданныевовременныйбуфер |
MPI_Recvбудетвызван, |
||||
ивернетуправлпрограммен медлние.Когданно |
|
|
|||
данонполучитнеыеизпользовательскогобу |
|
феранапрямую,из |
|||
промежуточногосистемного.Буферизация |
|
–делогр ,инемоздкоевсегда |
|||
сильноэк |
ономитвремяособенно( наSMP |
-машинах),затоповышает |
|||
надежн:делаетпрболееграммустьусто |
|
йчивойкошибкампрограммиста. |
|||
MPI_Sendrecvи MPI_Sendrecv_replaceтакжеделаютпрограммуболее |
|||||
устойчивой:ихиспользованиемпрограммистлишаетсявозможности |
|
|
|||
перепутатьварианты12. |
|
|
|
|
|
ЗачемMPIзнатьтиппередаваемыхданных? |
|
|
|||
Стандартныефункциипересылданныхпреобходятсякрасноибез |
|
|
|||
подобнойинформации |
–имтр |
ебуетсязнатьтолькоразмервбайтах.Вместо |
|
||
одноготакогоаргументафункцииMPIполучаютдва:количествоэлементов |
|
MPI_INT,и |
|||
некоторисимволическийпаописгоукатипательзанного( |
|
||||
т.д.см,.табл. Причин1)тому. нескол |
|
ько: |
|
1.MPIпозволяетописывать льзовательскиетипыданных,которые
располагаютсявпамятинеп,разрывамиерывно,илинаоборот,с |
|
перехлестом.Переменнаятакоготипахарактеризуетсянетолько |
|
размером,иэтихарактерисMPIхранивоп сателеики |
ипа. |
2.ПриложениеMPIможетработат ьнагетерогенномвычислительном комп( лЭВМекселективеразнойархитектурой)Одни. же пы данразныхамашинмогутиметьразноепредставлениех,
например: плавающуюарифметикусущеразных3ствуетандарта |
charвте |
|
Windows |
|
(IEEE,типIBM, Cray); |
рминальныхприложениях |
|||
представленальтернатикодироГОСТ,в вкной |
|
|
Unix -кодировкой |
|
KOI-8rвмногоб; числахнапроцессорахйтовыхфирмы |
|
|
intelмладший |
|
байтзан |
имаетмладрес,навсехшийо тальных |
|
–наоборот.Если |
|
приложениерабовгетаетеро |
|
геннойсети,черезсетьзадачи |
|
|
|
|
|
28 |
|

обмениваютсяданныфорXDRате (eXternal Data Representation), |
|
|
принятомвInternetПередотправкойипосле.приемаданныхзадача |
|
|
конвертируетих/изформаXDRЕс ,приеса.этомMPIвеннодолжен |
|
|
знатьнепростоколичеств |
опередаваемыхбайт,ноитипсоде |
ржимого. |
3.ОбязательнымтребованиемкMPIбылаподдержкаязыкаFORTRANв силуегоинерционнойпопулярности.ВэтомязыкетипCHARACTER требуетособращенияого,посколькупеременнаятакоготипа
соднесобственноржиттекст ,аадртекидлинусгота.ФункцияMPI,
получивадресперемен,должизвлечьнееадресойтек та |
|
|
|
|
||
копироватьсамтекст.Этопроиз,еслив оаргументайдетле |
|
- |
||||
опитипасателятоитMPIОшибкаCHARACTERвуказаниитипа |
. |
|
|
|
||
приведет: о |
тправке –кко |
пированиюслужебныхданныхвместо |
||||
текста,приеме |
–кзаписитекстанаместослужебныхданных.Ито, |
|||||
идругприводитк ешибкамвременивыпо |
|
|
|
лнения. |
||
4. ТакиечастоиспользуемыевСтипыданных,какструкт,могутры |
|
|
|
|
||
содержатьвсебенекотороепустпростр |
|
|
|
анс,чтобывсевопля |
||
переменнойтакоготипаразмещалисьпоадресам,кратнымнекоторому |
|
|
|
|
||
четномучислучасто( 2,или8)4 |
|
|
–этоускообркнимяетащение. |
|||
Причинытомучистоаппаратные.Выравниванда астраныхивается |
|
|
|
|||
ключамикомпилятора.Разныезадачи |
|
|
|
однтогои приложения, |
||
выполняющиесянаоднойтойжемашинедаже(наодномтомже |
|
|
|
|||
процессотроены),могутбытьпос азнымвыравниванием,типыс |
|
|
|
|||
одинаковымтекстовымописаниембудутиметьразндвоичное |
|
|
|
|
||
представление. будетMPIвынужденпоза |
|
|
|
ботитьсяправильном |
||
преобразов.На, еременныеримертакоготипаниимогутз нимать9 |
|
|
|
|
||
или16байт: |
|
|
|
|
|
|
typedef struct { char |
c; |
d; |
||||
|
|
double |
||||
|
} CharDouble; |
|
|
|
||
Таблица1Предопред. константытипаэлесообщмленныетов |
|
|
|
ений |
||
|
|
|
|
|
|
|
|
КонстантыMPI |
|
|
|
ТипвC |
|
|
MPI_BYTE |
|
|
|
|
|
|
MPI_CHAR |
|
|
|
signed char |
|
|
MPI_SHORT |
|
|
signed int |
|
|
|
MPI_INT |
|
|
|
signed int |
|
|
MPI_LONG |
|
|
|
signed long int |
|
|
MPI_UNSIGNED_CHAR |
|
unsigned char |
|
||
|
MPI_UNSIGNED_SHORT |
|
unsigned int |
|
||
|
MPI_UNSIGNED |
|
|
unsigned int |
|
|
|
MPI_UNSIGNED_LONG |
|
unsigned long int |
|
||
|
MPI_FLOAT |
|
|
float |
|
|
|
|
|
|
29 |
|
|
|
MPI_DOUBLE |
|
|
double |
|
|
|
MPI_LONG_DOUBLE |
|
long double |
|
||
MPI_BYTE –этоосописательбыйтипа;которыйнеописываеттип |
|
|
||||
данныхдляконкретногоязыкапрограммирвС(ближевсегк ования |
|
|
|
|
|
|
unsigned char)Использование. |
MPI_BYTEознача,чтос детржимое |
|||||
соответствующегомассива |
|
недолжно |
подвергаться никаким |
|||
преобразованиям -инаприе |
мной,инапередающсторонемассивбудетй |
|
|
|||
иметьоднутужедлинуодинаковое |
|
двоичное представление. |
||||
Коллективныефункции |
|
|
|
|
|
|
Подтерминомколле" |
ктивные" MPIподразумеваютсятригруппы |
|
|
|||
функций: |
|
|
|
|
|
функцииколлективногообменаданными;
точкисинхронизации,илибарьеры;
функцииподдержкираспределенныхопераций. Коллективнаяфункцияоднимизаргументовполучаетописа ель
областисвязикоммуникато( |
|
р)Вызов. коллективнойфункцииявляется |
|
корректным,толькоеслипр изведенвсехпроцессов |
|
-абонентов |
|
соответствующейобластисвязи,именноэтимко муникаторомкачестве |
|
|
|
аргументахотядл(однойобластисвязиможимнесколькоеться |
|
|
|
коммуникаторов, |
подставлятьихвместодруганельзя)В.этоми |
|
|
заключаетсяколлективность:либофункциявызываетсявсемколлективом |
|
|
|
процессов,либоник;третьегонедм |
|
ано. |
|
Еслитребуетсяограничиобластьдейсколлективнойьвияфункции |
|
|
|
толькочастьюприсоединенныхк |
коммузадач,илниаобороткатору |
- |
|
расширитьобластьдействия,тонеобходимосоздатьвременную |
|
|
|
группу/областьсвязи/коммуникаторнабазесущес |
твующих. |
|
Функциясинхронизациипроцессов
Этимзанимаетсявсегооднафункция:
int MPI_Barrier( MPI_Comm comm);
Параметр: comm -идентификаторгруппы.
Блокируетработупроцессов,вызвавшихданнуюпроц,дотехпор,дуру |
commтакженевыполнятэту |
покавсеоставшиесяпроцессыгрупп |
|
процедуру. |
MPI_Barrierинструкции |
Гарантирует,чтоквыполнениюследующейза |
|
кажзаприступитдаячаодновреме |
ннос стальными. |
ЭтоединственнаяMPIфункци,вызогарантированноторойвами |
|
синхрввременионизируетсявыполнениеразличныхпроцессов.Некоторые |
|
другиеколлективныефункциизависиотреализациимостигутбладать |
, |
|
30 |