204-guruh Abduvaliyev Asqarali
MPI_Isend, MPI_Irecv, MPI_Iprobe, MPI_Wait, MPI_Waitall, MPI_Test, MPI_Testall funksiyalarini barchasiga alohida alohida dastur tuzib qay holatlarda va qanday ishlatilishini tushintirib bering.
Quyidagi kod C++ da MPI_Isend() va MPI_Irecv() funksiyalarini ishlatadigan to'liq dasturni ko'rsatadi. Dastur yagona xabar jo'natuvchisi va qabul qiluvchisi (rank 0 va rank 1) orasida xabar almashishni o'rganadi:
Bu dasturda yagona xabar jo'natuvchisi (rank 0) massivni to'ldiradi va uni MPI_Isend() orqali o'zi ichiga jo'natadi. Rank 1 processor esa MPI_Irecv() orqali messagingni qabul qiladi, qayta ko'rib chiqib, uni o'ziga yozadi va uni MPI_Isend() yordamida qayta jo'natadi. Va buning natijasida yagona xabar jo'natuvchisi uni qabul qiladi, qayta ko'rib chiqib va uni chiqaradi.
Kod natijasi:
MPI_Irecv()
Bu method ansixron tarzda ma’lumot qabul qilish uchun ishlatilinadi. MPI_Irecv methodi quyidagicha bo’ladi:
Int MPI_Irecv(void*buf, int count, MPI_Datatype datatype, int source, int msgtag, MPI_Comm comm, MPI_Request*request)
request: asinxron xabarni qabul qilish identifikatori. Xabarni qabul qilish MPI_Recv ga o'xshaydi, lekin pastki dasturdan qaytish buferda xabar qabul qilinishini kutmasdan, qabul qilish jarayoni ishga tushirilgandan so'ng darhol sodir bo'ladi.
Bu misolda 1 jarayondan 2 – jarayonga ma’lumot yuborilmoqda va MPI_Irecv bilan qabul qilinmoqda va dastur ma’lumotni ansixron tarzda muvofaqiyatli qabul qilib olmoqda. Natija konsilda chiqarildi.
MPI_Iprobe()
MPI_Iprobe funksiyasi MPI komunikatsiyalari orqali xabar olishni tekshirish uchun ishlatiladi. MPI_Iprobe ishlatilishi quyidagicha:
Int MPI_Iprobe( int source, int msgtag, MPI_Comm comm, int*flag, MPI_Status*status)
Misol uchun:
MPI_Testall()
MPI_Test va MPI_Testall funksiyalari, MPI_Isend va MPI_Irecv kabi asinkron komandalarni tekshirish uchun ishlatiladigan funksiyalar hisoblanadi.
MPI_Testall funksiyasi esa berilgan hamma so'rovlarning javoblari keldimi kelmaganimi aniqlab chiqadi. Bu quyidagi kabi ishlatiladi:
int MPI_Testall (int count, MPI_Request *array_of_requests, int *flag, MPI_Status *array_of_statuses)
Bu yerda yerda request aloqa jarayonini identifikatori, flag agar aloqa hodisasi tugallangan bo’lsa TRUE aks holda fals qaytaradi, status aloqa jarayoni (xabar) holati. count aloqa hodisalari soni.
Misol uchun:
Do'stlaringiz bilan baham: |