Комунікації точка-точка. Неблокуючі (асинхронні) передачі в MPI. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Комунікації точка-точка. Неблокуючі (асинхронні) передачі в MPI.



Особливiстю неблокуючої (асинхронної) передачi повiдомлень є те, що виконання про- грами не призупиняється для виконання прийому чи передачi даних. Такий спосiб передачi є бiльш складним для програмування, але при правильному застосуваннi може в значнiй мiрi зменшити втрату ефективностi паралельних обчислень через повiльну (у порiвнян- нi зi швидкiстю процесору) передачу даних. Неблокуюча передача повiдомлень дозволяє сумiщати в часi вiдправку чи прийом повiдомлень та обчислення. MPI забезпечує можли- вiсть неблокуючої передачi даних мiж двома задачами.Назва неблокуючих аналогiв для вiдповiдних блокуючих функцiй створюється з назви вiдповiдної функцiї шляхом додаван- ня префiксу «I» (вiд англ. immediate).Неблокуючi функцiї приймають тi ж самi параметри, що i блокуючi, i ще один додатковий параметр request з типом MPI_Request. У функцiї прийому MPI_Irec v вiдсутнiй параметр status. В параметрi request передається дескри- птор запиту вiдправки або прийому. Цей дескриптор можна передати функцiям MPI_Wait або MPI_Waitall для того, щоб дочекатись завершення передачi. Усi буфери, що вико- ристовуються в неблокуючих передачах стають недоступними користувачу пiсля запуску передачi чи прийому iнформацiї. Буфери стануть знову доступними пiсля виконання фун- кцiй MPI_Wait або MPI_Waitall для цих передач

int MPI_Isend(void buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm,

MPI_Request request);

int MPI_Irecv(void buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request request);

• buf – покажчик буфера вiдправки; розмiр буфера має бути не менший, нiж count елементiв. Пiсля виконання функцiї буфер буде тимчасово недоступний.

• count – розмiр буфера, кiлькiсть елементiв, що будуть вiдправленi/прийнятi

• datatype – тип комiрки буфера.

• dest/source – ранг задачi, з якою здiйснюється обмiн даними.

• msgtag – iдентифiкатор повiдомлення. Обране користувачем цiле число вiд 0 до MPI_TAG_UB. 1

• comm – комунiкатор, в рамках якого вiдбувається взаємодiя.

• request – покажчик на змiнну типу MPI_Request, в яку буде записано дескриптор передачi.

 

8. Точки синхронізації. Функція MPI_Bcast.

Пiд термiном "колективнi"в MPI маються на увазi три групи функцiй:

• функцiї колективного обмiну даними;

• точки синхронiзацiї, або бар’єри;

• функцiї пiдтримки розподiлених операцiй. Виклик колективної функцiї є коректним, тiльки якщо зроблений зi всiх процесiв-абонентiв вiдповiдної областi зв’язку, i саме з цим комунiкатором як аргумент (хоча для однiєї областi зв’язку може бути декiлька комунiкаторiв, пiдставляти їх замiсть один одного не можна). У цьому i полягає колективнiсть: або функцiя викликається всiм колективом процесiв, або нiким; третього бути не може.

 

Цим займається лише одна функцiя:

int MPI_Barrier(MPI_Comm comm); -зупиняє виконання поточного завдання до тих пiр, поки не буде викликана з усiх iнших процесiв, пiд’єднаних до вказаного коммуникатора. Гарантує, що до виконання наступної за MPI_Barrier iнструкцiї кожна задача почне одночасно з iншими. Це єдина в MPI функцiя, викликами якої гарантовано синхронiзується виконання рi- зних процесiв! Деякi iншi колективнi функцiї залежно вiд реалiзацiї можуть володiти, або нi властивiстю одночасно повертати управлiння всiм процесам; але для них ця вла- стивiсть є побiчною i необов’язковою – якщо Вам потрiбна синхроннiсть, використовуй- те MPI_Barrier.

 

Основнi особливостi i вiдмiнностi вiд комунiкацiй типу "точка-точка":

• на прийом i/або передачу працюють одночасно ВСI завдання-абоненти вказаного ко- мунiкатора; • колективна функцiя виконує одночасно i прийом, i передачу; вона має велику кiлькiсть параметрiв, частина яких потрiбна для прийому, а частина для передачi; в рiзних завданнях та чи iнша частина iгнорується;

• як правило, значення ВСIХ параметрiв (за винятком адрес буферiв) повиннi бути iдентичними у всiх завданнях;

• MPI призначає iдентифiкатор для повiдомлень автоматично; крiм того, повiдомлен- ня передаються не по комунiкатору, що вказується, а по тимчасовому комунiкатору- дуплiкату; тим самим, потоки даних колективних функцiй надiйно iзолюються один вiд одного та вiд потокiв, створених функцiями "точка-точка". int MPI_Bcast(void buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm); | розсилає вмiст буфера з задачi, що має у зазначенiй обастi зв’язку номер root, в усi iншi:

Пiсля виходу з функцiї MPI_Bcast вмiст буфера buffer, процесу root буде скопiйова- ний в локальний бефер кожного процесу комунiкатора comm. Значення параметрiв count, datatype, root та comm повиннi бути однаковi для всiх процесiв.

9. Колективні функції MPI_Gather, MPI_Scatter

Основнi особливостi i вiдмiнностi вiд комунiкацiй типу "точка-точка":

• на прийом i/або передачу працюють одночасно ВСI завдання-абоненти вказаного ко- мунiкатора; • колективна функцiя виконує одночасно i прийом, i передачу; вона має велику кiлькiсть параметрiв, частина яких потрiбна для прийому, а частина для передачi; в рiзних завданнях та чи iнша частина iгнорується;

• як правило, значення ВСIХ параметрiв (за винятком адрес буферiв) повиннi бути iдентичними у всiх завданнях;

• MPI призначає iдентифiкатор для повiдомлень автоматично; крiм того, повiдомлен- ня передаються не по комунiкатору, що вказується, а по тимчасовому комунiкатору- дуплiкату; тим самим, потоки даних колективних функцiй надiйно iзолюються один вiд одного та вiд потокiв, створених функцiями "точка-точка". int MPI_Gather(const void sendbuf, int sendcount, MPI_Datatype sendtype, void recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);

int MPI_Scatter(const void sendbuf, int sendcount, MPI_Datatype sendtype, void recvbuf, int recvcount, MPI_Datatype recvtype, int root,

Зворотня по своїй дiї до MPI_Gather, вона здiйснює розсилку з ма- сиву sendbuf процесу root до всiх iнших прпоцесiв комунукатора, включаючии процес root. Можна сказати, що масив sendbuf дiлиться на рiвнi частини, за кiлькiстю процесiв, кожна з яких складається з sendcount елементiв типу sendtype, пiсля чого i частина вiдсилається i процесу. Результат, розмiру recvcount, в кожному процесi росташований в recvbuf.

 

10. Операцiя згортки. Функція MPI_Reduce.

 

int MPI_Reduce(void sendbuf, void recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root,

MPI_Comm comm);

Операцiя згортки. Задача з номером root отримує данi вiд усiх задач i виконує над даними операцiю op.

• sendbuf – покажчик буфера вiдправки.

• count – кiлькiсть елементiв в буферi.

• datatype – тип елементiв в буферi.

• op – операцiя згортки даних.

• root – ранг задачi, яка отримає результат згортки.

• comm – комунiкатор, в рамках якого вiдбувається взаємодiя.

• recvbuf – покажчик буферу прийому (вказує тiльки задача з рангом root, для iнших допустимо NULL).

В MPI є декiлька вбудованих операцiй для згортки. MPI також дозволяє програмiсту визначати власнi операцiї згортки

 



Поделиться:


Последнее изменение этой страницы: 2017-01-20; просмотров: 313; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.009 с.)