Оқулық Қазақстан Республикасы Білім және ғылым министрлігі бекіткен Алматы, 2011


int MPI_Send(void *buf, int count, MPI_Datatype



Pdf көрінісі
бет84/121
Дата31.08.2022
өлшемі2,81 Mb.
#38343
түріОқулық
1   ...   80   81   82   83   84   85   86   87   ...   121
Байланысты:
duisembiev-parallel-esep

int MPI_Send(void *buf, int count, MPI_Datatype 
datatype, int dest, int msgtag, MPI_Comm comm) 

buf – жіберілетін хабарламасы бар буфердің басталу адресі; 

count - хабарламадағы жіберілетін элементтер саны, 

datatype - жіберілетін элементтер типтері; 

dest -процесс-қабылдаушының нӛмірі; 

msgtag - хабарлама идентификаторы;

comm - коммуникатор идентификаторы. 
Нӛмірі dest болатын процеске, типтері datatype және count 
элементтерден тұратын, идентификаторы msgtag хабарламасының 
бұғаттайтын посылкасы. Жіберілетін хабарламаның барлық элементтері buf 
буферінде қатар орналасқан. Хабарламадағы жіберілетін элементтер саны, 
яғни count мәні нӛлге тең болуы мүмкін. Хабарламаны ӛзіне де жіберуге 
рұқсат етіледі. Жіберілетін элементтер типі datatype алдын ала анықталған 
тұрақтылар типтері кӛмегімен кӛрсетілуі керек,
мысалы, 
MPI_INT,
 
MPI_LONG,
 
MPI_SHORT,
 
MPI_LONG_DOUBLE, MPI_CHAR, 
MPI_UNSIGNED_CHAR, MPI_FLOAT
немесе енгізілген туынды 
типтермен. Fortran және С тілдерінің әрбір деректер типі үшін ӛзінің 
тұрақтысы бар. Алдын ала анықталған типтер аттарының толық тізімін mpi.h
файлынан табуға болады. 
Бұғатталу, 
бағыныңқы 
бағдарламадан 
қайтарылған 
барлық 
параметрлерді қайталап пайдаланудың дұрыстығына кепілдік береді. Бұл 
дегеніміз, жіберілетін хабарламаны бүлдірем деп қорықпай, берілген 
функциядан қайтарылғаннан кейін кезкелген функция шақыруына қатысатын 
айнымалыларды пайдалануға болады деген сӛз. Бұл кепілдікті іске асырудың 
тәсілін таңдау: аралық буферге кӛшіру немесе dest процесіне тікелей 
жіберу, MPI құрастырушыларына қалдырылады. 


161 
Арнайы айта кету керек, MPI_Send функциясынан қайтарылу, 
хабарлама dest процесімен қабылдап алынғанын болмаса хабарлама 
MPI_Send жүктеген процесс орындалып жатқан процессорлық элементті 
тастап шыққанын білдірмейді. Мұнда тек берілген функция шақыруында 
пайдаланылған айнымалыларды ғана қауіпсіз ӛзгертуге болатынына кепілдік 
беріледі. 
Осындай анықталмағандық, әрине пайдаланушыларды қанағаттандыра 
қоймайды. Сондықтан, хабарламаны жіберу мүмкіндіктерін кеңейту үшін, 
қосымша үш функция енгізілген және олардың ӛз ерекшеліктері бар. 
MPI_Bsend
- буферленуімен хабарламаны жіберу. Егер жіберілген 
хабарлама процесс-қабылдаушымен әлі инициалданбаған болса, онда 
хабарлама буферге жазылады және функциядан жылдам қайтарылып 
алынады. Берілген функцияның орындалуы оған сәйкес хабарлама 
қабылдаушы функция шақыруына ешқандай тәуелсіз емес. Солай бола тұра, 
егер буферге орын жеткіліксіз болса, онда функция қателік кодын қайтаруы 
(беруі) мүмкін.
MPI_ssend
- синхрондалуымен хабарламаны жіберу. Жіберілген 
хабарлама процесс-қабылдаушымен инициалданған жағдайда ғана берілген 
функциядан шығу орындалады. Сонымен, синхрондалуымен хабарламаны 
жіберудің аяқталуы буферді қайта пайдалану мүмкіндігі туралы ғана емес, 
сонымен қатар бағдарламада процесс-қабылдаушының хабарламаны 
қабылдау нүктесіне жеткендігнің кепілдігі туралы да айтады. Егер 
хабарламаны қабылдау бұғатталумен де орындалатын болса, онда 
MPI_ssend
функциясы бұғаттау шақыруларының семантикасын сақтайды. 
MPI_Rsend
дайындығымен хабарламаны жіберу. Берілген функцияны 
сол жағдайда ғана пайдалануға болады, егер процесс-қабылдаушы жіберілген 
хабарламаны қабылдауды инициалдап қойған болса. Кері жағдайда 
функцияны шақыру қателік болып есептеледі және оның орындалу нәтижесі 
анықталмаған. MPI_Rsend процедурасын шақыру алдында хабарламаны 
қабылдауды инициалдау кепілдігін, процестерді айқын және айқын емес 
синхрондау жүргізетін операциялар кӛмегімен беруге болады (мысалы, 
MPI_BARRIER
, немесе MPI_SSEND). Жалпы алғанда, кӛп жағдайда 
MPI_Rsend 
функциясы, жіберуді ұйымдастырудың қосымша шығындарын 
азайта отырып, жіберуші және қабылдаушы арасындағы арақатынас 
протоколын қысқартады. 
Пайдаланушы жіберілетін процесте, MPI_ВSEND процедурасын 
шақыру кезінде хабарламаны буферлеу үшін пайдаланылатын арнайы массив 
тағайындауы керек. 
MPI_BUFFER_ATTACH(BUF, SIZE, 
IERR)  BUF(*) 


162 
INTEGER SIZE, IERR 


Достарыңызбен бөлісу:
1   ...   80   81   82   83   84   85   86   87   ...   121




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет