Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Библиотека MPI [Электронный ресурс] (90

..pdf
Скачиваний:
5
Добавлен:
15.11.2022
Размер:
546.43 Кб
Скачать

Краткоопишемосновныефункциипри/передачисообщениймабез

блокировки:

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]