int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Status*status)
OUT buf – xabarni qabul qiluvchi bufer manzili;
count - qabul qilingan xabardagi elementlarning maksimal soni;
datatype- qabul qilingan xabar elementlarining turi;
source - jo'natuvchi jarayonning raqami;
msgtag - qabul qilingan xabarning identifikatori;
OUT status – qabul qilingan xabar parametrlari.
Blokirovkalash pastki dastur qaytgandan so'ng xabarning barcha elementlari qabul qilinishini va bufer bufiga joylashtirilishini ta'minlaydi.
Yuboruvchi jarayonning raqami sifatida siz oldindan belgilangan doimiy MPI_ANY_SOURCE ni ishlatishingiz mumkin - bu holda xabar istalgan raqamli jarayondan qabul qilinadi. Qabul qilingan xabarning identifikatori(tag) sifatida siz MPI_ANY_TAG konstantasini belgilashingiz mumkin - bu holda istalgan identifikatordagi xabar qabul qilinadi.
Agar jarayon boshqa jarayonga ikkita xabar yuborsa va ikkala xabar ham bir xil MPI_Recv chaqiruviga mos kelsa, birinchi yuborilgan xabar avval qabul qilinadi.
Xabar statusi
Qabul qilingan xabarning atributlarini status massivining elementlaridan aniqlash mumkin.
status parametri - MPI_SOURSE (haqiqiy xabar darajasi), MPI_TAG (haqiqiy teg) va MPI_ERROR (xato kodi) maydonlari bilan oldindan belgilangan MPI_Status turidagi strukturadir.
Qabul qilish jarayonining raqami aniq ko'rsatilishi kerak.
Agar bitta jarayon bitta MPI_Recv ga mos keladigan ikkita xabarni boshqa jarayonga yuborsa, birinchi xabar birinchi bo'lib qabul qilinadi.Agar xabar turli jarayonlar tomonidan yuborilgan bo'lsa, unda qabul qilish tartibi aniqlanmagan.
Bir tomondan, biz MPI_Recv ga xabar kutilayotgan vazifaning raqamini va uning identifikatorini ko’rsatamiz; va boshqa tomondan, biz ularni status strukturasida MPI dan olamizmi? Buning sababi, MPI_Recv joker argumentlar bilan chaqirilishi mumkin ("har qanday narsani/har kimdan qabul qilish") va bunday ma'lumotlarni qabul qilishdan so'ng, dastur status tuzilmasidan MPI_SOURCE va MPI_TAG maydonlarini o'qish orqali haqiqiy raqam/identifikatorni o'rganadi.
Bir tomondan, biz MPI_Recv ga xabar kutilayotgan vazifaning raqamini va uning identifikatorini ko’rsatamiz; va boshqa tomondan, biz ularni status strukturasida MPI dan olamizmi? Buning sababi, MPI_Recv joker argumentlar bilan chaqirilishi mumkin ("har qanday narsani/har kimdan qabul qilish") va bunday ma'lumotlarni qabul qilishdan so'ng, dastur status tuzilmasidan MPI_SOURCE va MPI_TAG maydonlarini o'qish orqali haqiqiy raqam/identifikatorni o'rganadi.
MPI_ERROR maydoni odatda tekshirilishi shart emas - MPI tomonidan o'rnatilgan standart xato ishlov beruvchisi muvaffaqiyatsizlikka uchragan taqdirda MPI_Recv dan qaytishdan oldin dasturning bajarilishini to'xtatadi. Shunday qilib, MPI_Recv dan qaytgandan so'ng, status.MPI_ERROR maydoni faqat 0 ga teng bo'lishi mumkin (MPI_SUCCESS);
MPI_Status turida kiruvchi xabarning haqiqiy uzunligini yozib oladigan maydon mavjud emas. Uzunlikni shunday topish mumkin ↓