int MPI_Waitall (int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses) ro'yxatdagi faol deskriptorlar bilan bog‘langan barcha almashinuvlar tugaguniga qadar bloklaydi va barcha operatsiyalar holatini qaytaradi. Ikkala massiv ham bir xil miqdordagi elementlarga ega. array_of_statuses dagi i element nomeri i-operatsiyaning qaytish holatiga o‘rnatiladi.
7. Barcha jarayonlar uchun printf yordamida ekranga buf o‘zgaruvchining qiymatini chop eting.
8. Ilovangizni kompilyatsiya qiling va ishga tushiring. Chiqish to‘g‘ri ekanligiga ishonch hosil qiling.
9-topshiriq. “nuqta-nuqta” aloqalar: “har biri, har biri bilan” sxemasi 1. MPI qo‘llab-quvvatlashi bilan Microsoft Visual Studio 2022 da mpi_all loyihasini yarating (1-topshiriqqa qarang).
2. MPI_Init va MPI_Finalize funksiyalariga murojaatlarni dastur kodiga kiriting.
3. Har bir jarayonning nomerini rink o‘zgaruvchisiga yozing.
4. Dasturdagi parallel jarayonlar umumiy sonini size o‘zgaruvchisiga yozing.
5. Butun sonli buf o‘zgaruvchini e’lon qiling, unga rank qiymatini berish orqali xabar yarating.
6. n ta jarayon bilan “har biri, har biri bilan” jarayon aloqa sxemasida har bir jarayon boshqa barcha jarayonlarga bitta xabar yuboradi (jami n-1 xabar), va n-1 jarayonlardan bittadan xabar oladi. Buni quyidagi tarzda amalga oshirishingiz mumkin:
0 dan n-1 gacha bo‘lgan siklni yarating. Ushbu siklning tanasida xabar yuborish uchun bloklanmagan MPI-funksiyasini chaqiring, qabul qiluvchining jarayon nomeri sifatida sikl hisoblagichini belgilang. Jarayonning o‘ziga xabar yuborishining oldini olish uchun if operatoridan foydalaning.
Sikl tugagandan so‘ng. Asinxron operatsiyalar tugashini kutish uchun MPI_Waitall funksiyasiga murojaat qiling.
0 dan n-1 gacha bo‘lgan boshqa sikl yarating. Ushbu siklning tanasida xabarni qabul qilish uchun bloklanmagan MPI-funksiyasiga murojaat qiling, qabul qiluvchi jarayonining nomeri sifatida sikl hisoblagichini belgilang. Jarayonning o‘zidan xabar olishining oldini olish uchun if operatoridan foydalaning.
Sikl tugagandan so‘ng. Asinxron operatsiyalar tugashini kutish uchun MPI_Waitall funksiyasiga murojaat qiling.
7. Barcha jarayonlar uchun printf yordamida ekranga buf o‘zgaruvchining qiymatini chop eting.
8. Ilovangizni kompilyatsiya qiling va ishga tushiring. Chiqish to‘g‘ri ekanligiga ishonch hosil qiling.