5-Topshiriq. “Nuqta-nuqta” kommunikatsiyalar: “estafeta tayoqchasi” sxemasi 1. MPI qo‘llab-quvvatlashi bilan Microsoft Visual Studio 2022 da mpi_baton loyihasini yarating (1-topshiriqqa qarang).
2. MPI_Init va MPI_Finalize funksiyalariga murojaatni dastur kodiga kiriting.
3. Har bir jarayonning nomerini rank o‘zgaruvchisiga yozing.
4. Dasturdagi parallel jarayonlar sonini size o‘zgaruvchisiga yozing.
5. Butun sonli o‘zgaruvchi bufni e’lon qilish orqali xabar yarating.
6. “Estafeta tayoqchasi” jarayonining aloqa sxemasida, jarayondan jarayonga (“estafeda tayoqchasi”) izchil xabar uzatilishini ta’minlash uchun jarayon avval xabarni qabul qilishini kutishi va keyin uni keyingi jarayonga o‘tkazishi kerak. Lekin barcha jarayonlar xabarni qabul qilish operatsiyasini chaqirish bilan boshlana olmaydi, chunki MPI_Send va MPI_Recv blokirovkalash operatsiyalaridan foydalanilganda, barcha jarayonlar ishlamay qoladigan va dastur hech qachon tugamaydigan tupik (deadlock) holati yuzaga keladi. Shunga ko‘ra, xabarni uzatishni boshlaydigan jarayon aniqlanadi, ya’ni, birinchi harakat xabar yuborish operatsiyasini bajarishdir – bu 0 nomerli jarayondir. Buni quyidagicha amalga oshirish mumkin:
If operatoridan foydalanib, dasturda kodning ikkita bo‘limini tanlang: 0 nomerli jarayon va boshqa jarayonlar uchun:
0-jarayon bo‘limida buf o‘zgaruvchiga 0 qiymatni o‘rnating. 1-jarayonga buf yuborish uchun MPI_Send-dan foydalaning. Keyin MPI_Recv-ga murojaatq qiling va size-1 nomerli jarayondan xabarni kuting.
Boshqa jarayonlar bo‘limida MPI_Recv funksiyasiga murojaat qilib, rank-1 nomerli jarayondan xabar kuting. Xabarni olgandan so‘ng, buf o‘zgaruvchisining qiymatini bir birlikka oshiring va uni keyingi jarayonga yuboring: size-1 bo‘lgan jarayon uchun bu 0, qolganlari uchun rank+1 bo‘ladi.
7. Barcha jarayonlar uchun printf yordamida ekranga buf o‘zgaruvchining qiymatini chop eting.
8. Ilovangizni kompilyatsiya qiling va ishga tushiring. To‘g‘ri natija ekranda chop qilinganligiga ishonch hosil qiling.