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

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

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

МИНРОБРНАУКИССИИ

ФЕДЕРАЛЬНОЕГОСУДАРСТВЕННОЕБЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОУЧРЕЖДЕНИЕВЫСШЕГО

ПРОФЕССИОНАЛЬНОГООБРАЗОВАНИЯ

«САМАРСКИЙГОСУДАРСТВЕННЫЙАЭРОКОСМИЧЕСКИЙ УНИВЕРСИМЕНАКАДЕМИКАС.П.КОРОЛЕВАТЕТ

(НАЦИССЛЕДООНАЛЬНЫЙУНИВЕРСИТЕТ)»АТЕЛЬСКИЙ

С. Б. Попов

Библиотека MPI

Учебноепособие

Самара

2011

Автор: ПОПОВСергейБорисович

Учебноепосодизложениебиержатлекционногоматтериаламы

 

 

"Библиотека MPI" покурсу«

Параллельноепрограммирование

» и

предназначенодля бакалавров

четвертогокурсафакультетаинформатики

 

направления 010400.62 «Прикладнаяматематикаинформатика

».

2

СОДЕРЖАНИЕ

КраткаяхарактербиблMPIиостиекиа

4

MPIдляязыкаFORTRAN

8

ОбщиепроцедурыMPI

9

Органприема/передачизацияданныхмежот процессамиельнымиу

13

Коллективныефункции

30

Коммуникаторы,группыобластисвязи

36

3

Краткаяхарактери

 

стикабиблиотекиMPI

 

 

 

MPI (message passing interface) -библиотекафункций,предназначенная

 

дляподдержкиработыпараллельныхпроцессовтерминахпередачи

 

 

сообщений.

 

 

 

 

 

MPIпредоставляетпрограммистуединыймеханизмвзаимодействия

 

 

процессоввнутрипараллельн

 

огоприложениянезависотмаш монной

 

архитектумногопроцессорныеоднопроце( или общейсорныеили

 

 

локальнойпамятью),взаимнраспветвейонагол(одномпроцессорежения

 

 

илинара

 

зных)и API (

applications programmers interface,т.е.интерфейс

 

разработчикаприложен)операцсистемы.Программаонной,

 

 

испоMPI,легчеьзующаяотлаживаесужается( просдлясовершениясяор

 

 

стереотошибокприпараллельномпныхпрограммировании)быстрее

 

 

переноснадругиеплав(идеалетформыся,простойпер

 

екомпиляцией).

 

 

МинимальновсоставвходятMPI:библиотекапрограммирования

 

 

(заголовочныеибиблиотечныефайлыдляязС,С++ковFORTRAN)

 

 

загрузчикприл.Доженийполнительновключаются:профилирующий

 

 

варбиблиотекиантиспользуется( настадиитестипарованияаллельного

 

 

приложениядляопределенияоптимальностираспараллел);загрузчиванияк

X-Windowипроч.

 

сграфичсетевыминтерфеским

 

йсомдля

bin,

 

СтруктуракаталогпривычнаMPIользователям

-программистам:

include,

lib, man,

src,

...Минаборимальныйфункцийпроств

освоении

позволяетбыстронаписнадежноботающуютьпрограмму.Использование

 

 

жевсегоарсеналафункцийMPIпозволитполучитьбыстроработающую

 

 

программуприсохранениинаде

 

жности.

 

 

 

Несколькокомпьюмогутвзаимодействоватьеровдругдругомодним

 

 

изтр

ехсп

особов:

 

Unixсуществуютсредствадляработыней

 

1. черезобщуюпамять,в

 

 

 

(разныедля

BSDATT-клонов Unix);

 

 

2. черезскоросвнутсетьримашиннуюмногопроцессорных

 

 

 

вычислительныхси

стем;

TCP/IP.

 

3.

черезсеть,какправило,работающуюпротоколу

 

 

 

ПрограммныйинструментMPIразрабкакстандартдлярийтывался

 

 

многопроцессвнутримашиннойВС,объединенскор снысетьюной, х

 

 

ноMPIможетработтакженалюбоготьзеизтрехспсоединенийсобов.

 

 

Темменее,перваядакцияMPIстанстевартомла

 

силедующего

 

ограничения:всепроцессы,сообщающиесямеждусобойпосредством

 

 

функцMPI,начинзакйаснчиваютоеыполнениеодновременно.Это

 

 

 

 

 

 

4

 

 

немешаетиспользовапараллельныхMPIкакдляеетприл,ножений

 

 

системымассовогообслуживанияклие(

 

нт-серверныеприложенияпроч.)

 

приходитсяразрабатыватьнабазестарогоинструмент

ария.

 

ПроблемаустраненавMPI

 

-2:онгарантировстанетстандартомдля но

 

систем,взаимодействующихпотипуНе2исключено. ,чтосистемы13

 

 

типовсовремепотеряютинем

 

ересдляпрограммистовбудут

 

использоватьсятолькокакинтерфейсмеждуаппарат

 

уройиMPI

-2.

Существуетточказре,чтонизкоуровневыеяпересылкичерез

 

 

разделяемуюпамятьисемафорыпредпримененияочтительнеетаких

 

 

библи,какMPI,почтотомуработаек

 

ютбыс.Наэтможнореепривести

 

следующиевозраж

ения:

 

 

1.Вхораспаошораллелилнасобственножвзаиноммодействие

междуветвямипересылки( данныхсинхрон)тратизациются

 

небольшаядолявремени

–несколькопр общцентоввр гомени

 

работы.Таки

образом,замедлениепересылок,нап,вдваимер,неза

 

означаетобщегопаденпроизводительностиявдвое

–онапонизитсяа

несколькопроцент.Зачапонижениестуюкпроизводительности

 

являетсяприемлемымлихвойоправдываетсяпрочими

 

соображениями.

 

2.MPI –этоизначальнобыстрыйинструмент.Дляповышенияскорости

немиспользуютсяприемы,которыхприкладныепрограммисты

 

зачастуюпростонезадумываются.Н

апример:

встроеннаябуферпозволяизбежазациязадприотржектправкеь данных –управление впередающуюветвьвозвращается

немедл,дажеслив твьнно

-получательещенеподготов

иласьк

приему;

multi-threading),выносябольшую

MPIиспользуетмногопоточность(

частьсвоейрабпотыоки

(threads)снизкпри;оритетом

 

буферизациямногопоточност

ьсводяткминегативноеимуму

 

влияниенеизбежныхпростоприпернасылкахв

 

 

производительностьприкладнойпрогра

ммы;

 

напередачуданныхтипаодин"

-всем"затрачиваетсявремя,

 

пропорционнечислуучаствующветвей,логарльноеэтогоихфму

 

 

числа.

 

 

3.Переноспрогнадрплаугиеаммнтформыребупереиписываният повотладНезамениморной. качествдляпрограммы,к торойе предстопользоватьсяшикругурокомулюдей.Следуетучитотывать обстоят,чтоужпоявляютсяельствомашины,накоторыхизсредств межпрогрвзаиместьмтольконогодействияMPI.

4.MPIнестрахуетниотоднойизтиповыхошибок,допускаемыхпри параллельномпрограммировании, использованбиблиотекиэтой уменьшаетихвероят.Функциирабосразделяемойостпамятьюыис семафорамислишк омэлементапримитивны, .Ве безоятность ошибкиреалсихпомощзоватьнужноепрограммедействиею

5

стреумительноеньшаетсростомколичестваин ;трукцийя

 

 

 

вероятностьнайтиош

бкупуотладкиемблизканулю,потомучто

 

отладочноесредствовноситзадер

жкуввыполноднвеитемвейхние

 

самымпозволяетноработамальнодругимвеперестают( ьви

 

 

 

конкурзасовместноиспользуемыеровдать

 

нные).

 

Документация

 

 

 

 

Полезнораспечататьдлясправочныхцелейзаголовочныефайлы

 

 

mpi.h

библиотекиизподкаталога

 

includeConvex MPIтакфайлодин:

WinMPICHихтри:

mpi.h описания( константтипов),

 

mpi_errno.h коды(

ошибокихоп) сания

 

binding.h прототипы( функций)В.случаедля

 

Windowsпечататьрекомендуетсянеоригиналы,копии,изкоторых

 

 

 

вычищенывсед та

 

ли,относящиесякреализациинапример,(

 

 

_declspec(dllimport)ит.д.)Далеепо. текстунеприводятсяпрототипы

 

функций,описанпеременных,типовкоя

 

 

нстант.

 

Manual pages –ещеоднохорподспорье.шееБолеетальную

 

 

информац:спецификац,учебникрю ию

 

 

азличныереализацииMPIможно

 

найтисервере

NetLib (http://www.netlib.org/mpi)Здесь. следуетособо

 

отметитькнигу

MPI:

The complete

referenceиздательства

MIT Press,

имеющуюсянаэтомса

йте.

 

 

 

Соглашениятерминах

 

 

 

 

Параллельноеприложениесостоитизнес

 

 

кольких процессовветвей(,

потоков, задач)

,выполдняющихся.овреРазныпроцессымогутнно

 

 

 

выполнятьсякакнаразныхпроцессорах,такинаодномитомже

 

 

 

–для

программыэтонеиграетли,посковобоихлмеханизмучаяхькуобмена

 

 

номерпроцесса

 

даннымиодинаков.С

 

аждымпотокомсвязывается

-целое

неотрчи,являющеесяцательноеуникальныматрибутомпроце

 

 

 

сса.

Пробменивцесдругсдругомыданнымивютсявиде

 

 

 

сообщений.

Атрибутамисообщения

 

являютсяномерпроцесса

 

-отправителя,номер

процесса-получателяиидентификаторсообщения.Длянихзаведена

 

 

 

структура MPI_Status,содетриполя:жащая

 

MPI_Source номер(процесса

отправителя),

MPI_Tag идентификатор( сообщения),

MPI_Error код(

оши);могутбытькидополнительныеполя.

 

 

 

 

Идентификаторсообщения(msgt

 

ag) -атрибутсообщения,являющийся

 

целымнеотрчи,лежащимсломцательнымвдиапазонеотдо032767.

 

 

 

 

Идентификаторыпозволяютпрограммебиблиотекесвязиотличать

 

 

 

 

сообщениядруготдруга.

 

 

 

 

 

Длясовместногопроведениятехилииныхрасчетовпроцессывнутри

 

 

 

приложениябъединяютсяв

группы.

Группымогутбытьвложенными.

 

Внутригруппывсепроцессыпронумер.Каждыйпроцессузнатьваныжет

 

 

 

 

убиблиотекисвязиномервнутрийгруппызависиотномераости

 

 

 

выполнитьсоответствующуючастьрасчетов.Скаждойгру

 

 

 

ппой

ассоциировансвой

коммуникатор.Поэтомуприосущпересылкиствлени

 

 

 

 

6

 

 

необходимоуказатьидентификаткоторойгруппы,внутрипроизводится

 

 

 

этапере.Впроцессыеылкасодевгрсуппепредопределеннымжатся

 

 

 

идентификатором MPI_COMM_WORLD.

 

 

Термин"

процесс"используетсятакжев

Unix,издесьнетпутаницы:в

MPIпроцессзапусирабкаоетсябычныйктаетпроцесс

 

 

 

Unix,связанный

черезMPIсостальнымипроцессами,входящприложение.Востальномми

 

 

 

 

процслсчедуетссыизолитатьдруготдругаованными:них

 

Unix-процессов).

разные

областикода,стекаданныхсм(.описание

 

 

 

Категориифункц:блокирующие,локальныей,колле

 

 

 

ктивные

Блокирующие –останавлблок( )выипроцессаруваолнениеютдо

 

 

техпор,покапроиоперацимизводимаянебудетвыполнена.

 

 

 

 

Неблокирующиефункциивозвращаютуправлнем, едленноние

 

 

 

выполнениеопер

ациипродолжаетсявфоновомрежи;завершением

 

 

операциинадопр

 

оследитьособо.Неблокируюфункциивозвращиеают

request),спомощью

идентификаторопер

ациипосылки -приемасообщения(

которогопозднеемо

жнопроверитьзавершениеоперации.Доэтого

 

 

завершспеременнмассивамииния,котобылрыегументами

 

 

 

 

неблокирующейфу, ичегокцииделатьнел

 

 

ьзя.

 

 

Локальные –неинициируютпересылокданныхмеждуве. вями

 

 

 

Большинствоинформационныхфункц

 

ийявляеокальными,т..копиися

 

системныхданныхужехранятсявкаждойветви.Функцияпередачи

 

 

 

 

MPI_Sendифункциясинхронизации

MPI_Barrierнеявляютсяокальными,

посколькупроизводятпересылСледует. заметить,что,кпримеру,функция

 

 

 

 

приема MPI_Recv парная( для

MPI_Send)являетсяокальн:онавсеглишьой

 

пассивнождетпоступлда,ничегонпытаясьыхнияобщитьдругим

 

 

 

 

ветвям.

 

 

 

 

 

 

Коллективные –должныбытьвызвсемианыетвями

 

 

-абонентамитого

коммуникатоедается,котоперимыйвкачествергумент

 

 

 

а.Несоблюдение

этогоправошибкамводитланастадиивыпрограолнения

 

 

 

ммы.

ПривMPIнотаязаписиция

 

 

 

 

 

Регистрбукв:важС,ниграетнроливFO

 

 

 

RTRAN.

 

Всеидентификаторыначинаютсяпрефикса

 

 

MPI_.Этоправилобез

исключений.Нерекомендуетсяза

 

водитьпользоваиден,тельсификаторыие

MPID_, MPIR_и

начинающиесяэтойприставки,такжеприставок

 

 

 

PMPI_,которыеисповльзуютсяужебныхц

 

елях.

 

Еслиидентификатсконструиизнескслова, рнемьких, ан

 

: MPI_Get_count, MPI_Comm_rank.

какправило,разделяютсяподчерками

 

 

Иногразндиспользуетсяалитель:

 

 

MPI_Sendrecv, MPI_Alltoall.

Порядоксловсоставидентификаторевыбиомпо инципуаетсяот"

MPI_,потомназваниекатегории(

Type,

общегокчастному":сначалапрефикс

 

 

Comm, Group, Attr, Errhandlerит.д.),потомназваниеоперации(

 

MPI_Errhandler_create,

MPI_Errhandler_set,

Наиболеечасто...).

 

 

 

 

 

7

 

 

употребляемыефункциивыпадаютизэтойсхемы:ониимеютанти"

 

-

методичес",нокоротстереотипныекиеназвания,например

MPI_Barrier,

или MPI_Unpack.

 

 

Имеконинеизменяемыхстант( пользоватпеременных) лем

MPI_COMM_WORLD,

записываютсяполностьюзаглавныбуквами: и

 

MPI_FLOAT.Вименахфункцийперваязапрефиксомбуква

-заглавная,

остальныем

аленькие:

MPI_Send, MPI_Comm_size.

MPIдляязыкаFORT

RAN

Изложимвсжатомвидеосновныеотличияособреализациинности

 

MPIдляязыкаFORTRANСихучетпро,граммистыпишущие.наязыке

 

FORTRAN,смогутпристкизудальнейшегочениюпитьматериала.

 

РегсимволовстрисходномтекстедляFORTRANзначенияне

меет.

MPI_Comm_rankи MPI_COMM_RANKдлянего,вотличиеС,является

однитемжеимдентификат

 

ором.

Вначалеисхотекстадолжнаногобытьстрока include 'mpif.h'

Этотфайлсодержитописанияпеременныхконстант.

Все,чтовСявляетсяфункциями, F ORTRANсделаноподпрограммами. ВСкошибкидMPI возвращаетсяпользовательскойпрограммекаккод завершенфункц; FORTRANкиоияшибкидвозвращается

дополнительномпараметре:

С:

errcode = MPI_Comm_rank( MPI_COMM_WORLD, &rank );

FORTRAN:

CALL MPI_COMM_RANK ( MPI_COMM_WORLD, rank, ierror )

ВсепараметвFORTRANпернеыедаютсяпозначению,поссылке.

 

 

Соо,твет,амгдеСиственнопользуетсясим"&"дляычисления

 

 

адресапереме,в FORTRANненадонойписатьничего.Это

 

rank

иллюстрипримедля рует

редыдущегопункта,гдевпеременную

функция/подпрограммазаписномервываетзвавшеезад.Т,гдчимей

 

 

MPIтребузнатьместонахождениетсявпамятитакихданных,которые

 

 

поссылкенепернадашьп,( конструированииимер

 

MPI_ADDRESS.

пользовательскихтипов),ис

пользуетсяподпрограмма

ВFORTRANнетструктур.Там,гдевСдляописаданвMPIнияых применяетсяструкту,в FORTRANприменяетацелочисленныйя массив,размерномячкоторогоераекописанысимвольными константами.

ВСпишем:

MPI_Status status;переменнаятипаструктура/*/

8

MPI_Probe( MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status );

/*тепроверяемерьполязаполненнойструктуры*/

== 1 )

{ ... }

if(

status.MPI_SOURCE

if(

status.MPI_TAG ==

tagMsg1 )

{ ... }

ВFORTRAN ,соответственно:

INTEGER status(MPI_STATUS_SIZE) CALL MPI_PROBE( MPI_ANY_SOURCE,

MPI_ANY_TAG, MPI_COMM_WORLD, status )

IF( status(MPI_SOURCE) .EQ. 1 ) ....

IF( status(MPI_TAG) .EQ. tagMsg1 ) ...

итакдалее...

 

 

 

 

Имятипа

-структурыпереходитвразме

 

рмассива,дополняясь

суффиксом _SIZE,аименаполейпереходятвиндексыячееквэтом

 

целочисленноммассиве.

 

mpiccиспользуются

Длякомпиляциикомпоновкивместокоманды

 

команды

mpif77или

mpif90дляFORTRAN77и FORTRAN90

соответственно.Этоскриптыком(

 

андныефайлы),котпорыесле

соответствующейнастройкиокруженияпут(библиотекам.п.)

 

вызываютстандартныекомпиляторыFO

RTRAN.

ОбщиепроцедурыMPI

 

 

 

Сущнесколькофункцийтвует,которыеиспользуютсявлюбом,даже

 

 

самомкороткомприложенииMPIЗани.

 

маютонстолькоеисобственноя

передачданных,сколькообеспечй

 

ением.

 

MPI_Init -инициализацияпараллельнойчастиприложе.Реальнияа

 

инициализациядлякаждогоприлвыполняжбеодногониялер,аезатся

 

 

еслиMPIужебылинициализирован,тоникак

 

иедействвыполняютсяне и

происхнемедленныйвозвратдитизподпрограммы.ВсеоставшиесяMPI

 

-

процедурымогутбытьвызваныолькопослевызова

 

 

MPI_Init.

int MPI_Init( int* argc, char*** argv);

Функциипередаюадреаргументов,с сяандартнополучаемых

 

 

программойотоперациосистемыхрапараметрынкоманднойящих

 

 

строки.ВконецкоманднойстрокипрограммыMPI

 

-загрузчикmpirun

добавляетрядинформпар,коационныхметровребуютсяорые

 

MPI_Init.

Этоп каз ываетсяпримере3.1.

 

 

- MPI_SUCCESS,иначе -

Возвращает:случаеусп

 

ешноговыполнения

кошибкид.Тожесамое( возивсеращаютостальныефункции,

 

 

рассмвдатриваемые

нномпособии.)

 

 

 

 

9

 

MPI_Finalize -завершениепараллельнойчастиприложения.Все

 

MPI_Init,

последуобращенияк юMPIбымщие

 

-процедурам,втомчисле

к

запрещвызова.Кмоменту

MPI_Finalizeнекоторымпроцвс ссом

 

действия,требующобменеегоучастсообщениямия,должныбыть

 

 

 

 

завершены.

 

 

 

 

 

int MPI_Finalize( void );

 

 

 

MPI_Abort –аварийноезакрытбибл.Вызываетсяиотеки,если

 

 

 

пользовательскаяпрограммазавершпопричошвремениетсянебок

 

 

 

выполне,связаMPI:нныхия

 

 

 

 

void MPI_Abort(MPI_Comm comm, int error );

 

 

ВызовMPIизлюбойзадачиAbortпринудительнозавершаетработу

comm.Еслиуказанописате

 

всехзадач,подскобластиединенныхсвязи

 

ль

MPI_COMM_WORLD,будетзавершеновсеприложениевсе(егозадачи)

 

 

 

целиком,что,п

-видимому,являетсянаиболееправильреше. нымием

 

 

 

Испкользуйтешибкид

MPI_ERR_OTHER,еслинезнаете,как

 

 

охарактеризоватьошибкуклассификацииMPI.

 

 

 

 

Двеследующиеинф

ормационныхфункции:сообщаютразмергруппы

 

 

(тоестьобщееколичествозадач,подсообластидиненныхсвязи)

 

 

 

 

порядковыйномервызывающейзад

ачи:

 

 

 

int MPI_Comm_size( MPI_Comm comm, int* size);

 

comm.

Определениеобщегочислапараллельныхпроцессовгруппе

 

 

 

Параметры:

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

size -размергруппывыходной(

 

параметр).

 

 

 

 

 

int MPI_Comm_rank( MPI_comm comm, int* rank);

 

 

Определениеномерапроцессавгруппе

 

comm.Значение,возвращаемое

 

поадресу

&rank,лежитвдиапазонеотдо0

size_of_group-1.Параметры:

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

rank –номервызывающегопроцесса

 

 

группе comm выходной( пар

аметр).

 

 

 

double MPI_Wtime(void)

 

 

 

Функциявозвращаастроновсекундахемтвещественноея(ическое

 

 

 

число),прошедшеенекотомомв ро.Гарнташломго

 

 

антируется,что

этотмоментнебудетизменензавремясуществованияпроцесса.

MPI_Init,

MPI_Finalize,

MPI_Comm_size,

Использование

MPI_Comm_rankи MPI_Abortпокда,впрлеезано

имере1.

 

 

Пример1

/*

Простейшаяприемопередача* :

*MPI_Send, MPI_Recv

Завершениепо* ошибке:

*MPI_Abort

*/

#include <mpi.h> #include <stdio.h>

10

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