MPI_ANY_SOURCE, MPI_ANY_TAG MPI_Get_Count, MPI_Probe,MPI_Wtime. - 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 ↓
Do'stlaringiz bilan baham: |