Nusxalash. Kommunikatorni yaratishning eng oson yoʻli mavjud birma-bir nusxa koʻchirishdir:
MPI_Comm tempComm;
MPI_Comm_dup (MPI_COMM_WORLD va tempComm);
/ * ... tempComm orqali ma’lumotlarni uzatish ... * /
MPI_Comm_free (& tempComm);
Bunday holda, yangi guruh yaratilmaydi - vazifalar toʻplami bir xil boʻlib qoladi. Yangi kommunikator koʻchirilganning barcha xususiyatlarini meros qilib oladi.
Ajratish. Kommunikatorga mos keladigan guruh bir-biriga mos kelmaydigan kichik guruhlarga boʻlinadi, ularning har biri uchun oʻz kommunikatori ishga tushiriladi.
MPI_Comm_split (
existingComm, /*mavjud deskriptor, masalan, MPI_COMM_WORLD * /
indexOfNewSubComm, /*tarmoqni joylashtirish kerak boʻlgan kichik guruh raqami */
rankInNewSubComm, /*yangi kichik guruhdagi kerakli raqam */
& newSubComm); /*yangi kichik guruhning havola maydonining tavsifi */
Bu funksiya barcha tarmoqlarda bir xil birinchi parametrga ega, ammo ikkinchi va uchinchisi har xil - va ularga qarab, turli kichik guruhlarda turli tarmoqlar aniqlanadi; toʻrtinchi parametrda qaytarilgan identifikator turli tarmoqlarda turli qiymatlarni oladi (jami yaratilgan kichik guruhlar qancha turli xil qiymatlar mavjud). Agar indexOfNewSubComm MPI_UNDEFINED boʻlsa, newSubComm MPI_COMM_NULL qaytaradi, ya’ni tarmoq yaratilgan guruhlarning birortasiga qoʻshilmaydi.
Guruhlar orqali yaratish. Oldingi ikki holatda kommunikator aniq guruh yaratmasdan, toʻgʻridan-toʻgʻri mavjud kommunikatordan yaratiladi: guruh bir xil yoki avtomatik ravishda yaratiladi. Eng umumiy usul quyidagicha:
1. MPI_Comm_group funksiyasi mos keladigan kommunikator ishora qiladigan guruhni belgilaydi;
2. Mavjud guruhlar asosida MPI_Group_xxx oilasining funksiyalari zarur boʻlgan tarmoqlar toʻplamiga ega yangi guruhlarni yaratadi;
3. Yakuniy guruh uchun MPI_Comm_create funksiyasi kommunikatorni yaratadi; birinchi parametr boʻyicha uzatiladigan kommunikatorning HAMMA abonent tarmoqlarida chaqirilishi kerakligini unutmang;
4. Yaratilgan guruhlarning barcha deskriptorlari MPI_Group_free funksiyasiga murojaatlar orqali tozalanadi.
Bu mexanizm, xususan, MPI_Comm_split kabi guruhlarni boʻlish bilan birga, ularni birlashtirishga ham imkon beradi. MPIda jami 7 xil guruh qurish funksiyalari belgilangan.
Vazifa obunachi boʻlmagan aloqa sohasiga murojaat qilishi mumkinmi? Yoʻq. Aloqa zonasi deskriptori MPI funksiyalari tomonidan topshiriqqa uzatiladi, ular bir vaqtning oʻzida ushbu vazifani tasvirlangan hududning obunachisiga aylantiradi. Bu tutqichni olishning yagona mavjud usuli.
"Qaroqchi" tomonidan urinishlar MPI_Send / MPI_Recv orqali ushbu toʻsiqni chetlab oʻtishni anglatadi (masalan, tavsiflovchini olish, uni obunachi boʻlmagan boshqa vazifaga yuborish va u yerda foydalanish) va ularning natijasi aniqlanishi mumkin.
Do'stlaringiz bilan baham: |