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
Достарыңызбен бөлісу: |