Amal
|
Operandlar uchun ruxsat etilgan tip
|
MPI_MAX, MPI_MIN
|
butun va haqiqiy
|
MPI_SUM, MPI_PROD
|
butun, haqiqiy, kompleks
|
MPI_LAND, MPI_LOR, MPI_LXOR
|
butun va mantiqiy
|
MPI_LAND, MPI_LOR, MPI_LXOR
|
butun (shu jumaladan bayt)
|
Vektor yacheykalari uchun amallar tomonidan qoʻllab-quvvatlanadigan turlar soni yuqorida sanab oʻtilganlar bilan cheklangan. Boshqa oʻrnatilgan yoki maxsus turdagi spetsifikatsiyalardan foydalanib boʻlmaydi! Shuni ham yodda tutingki, barcha operatsiyalar assotsiativ ("(a + b) + c = a + (b + c)") va kommutativ ("a + b = b + a").
MPI_Allreduce: natija barcha vazifalarga yuboriladi, "root" parametri oʻchiriladi.
MPI_Reduce_scatter: har bir vazifa butun natija massivini emas, balki uning bir qismini oladi. Bu qismlarning uzunligi funksiyaning massiv-uchinchi parametrida joylashgan. Barcha vazifalardagi boshlangʻich massivlarning oʻlchami bir xil va natijada olingan massivlarning uzunliklari yigʻindisiga teng.
MPI_Scan: MPI_Allreduce ga oʻxshaydi, chunki har bir topshiriq natijalar qatorini oladi. Asosiy farq: bu erda i topshiriqdagi natija massivining mazmuni 0 dan i gacha boʻlgan raqamlar bilan vazifalar massivlari ustida operatsiyani bajarish natijasidir.
Oʻrnatilganlarga qoʻshimcha ravishda, foydalanuvchi oʻz operatsiyalarini kiritishi mumkin, ammo ularni yaratish mexanizmi bu yerda yoritilgan. Buning uchun MPI_Op_create va MPI_Op_free funksiyalari, shuningdek, MPI_User_function turi ishlatiladi.
9.3. Kommunikatorlar, guruhlar va aloqa joylari
Guruh - bu tarmoqlar toʻplami. Bitta tarmoq bir nechta guruhlarga a’zo boʻlishi mumkin. Dasturchi MPI_Group tipi va shu turdagi oʻzgaruvchilar va konstantalar bilan ishlaydigan funksiyalar toʻplami bilan ta’minlangan. Aslida, ikkita konstanta mavjud: MPI_GROUP_EMPTY ni qaytarish mumkin, agar soʻralgan xususiyatlarga ega boʻlgan guruh printsipial ravishda yaratilishi mumkin boʻlsa-da, lekin hali tarmoqlari boʻlmasa; MPI_GROUP_NULL soʻralgan xususiyatlar mos kelmasa qaytariladi. MPI kontseptsiyasiga koʻra, u yaratilgandan soʻng, guruhni toʻldirish yoki qisqartirish mumkin emas - faqat mavjud boʻlgan tarmoqlar asosida kerakli tarmoqlar toʻplami uchun yangi guruh yaratish mumkin.
"Aloqa domeni" mavhum tushunchadir: dasturchida aloqa domenini toʻgʻridan-toʻgʻri tavsiflovchi ma’lumotlar turi mavjud emas va ularni boshqarish funksiyalari mavjud emas. Aloqa zonalari kommunikatorlar bilan birga avtomatik ravishda yaratiladi va yoʻq qilinadi. Bitta aloqa hududining abonentlari bir yoki ikkita guruhning HAMMA vazifalari hisoblanadi.
Kommunikator yoki aloqa hududi deskriptori uch qavatli pirogning yuqori qismidir (guruhlar, aloqa zonalari, aloqa hududi deskriptorlari), unda vazifalar "pishiriladi": dasturchi ma’lumotlarni uzatish funksiyalarini chaqirib, kommunikatorlar bilan shugʻullanadi., shuningdek, yordamchi funksiyalarning mutlaq koʻpchiligi.
Bitta aloqa sohasiga bir nechta kommunikatorlar mos kelishi mumkin.
Kommunikatorlar "muloqot qilmaydigan tomirlar" dir: agar ma’lumotlar bitta kommunikator orqali yuborilsa, qabul qiluvchi tarmoq uni faqat bir xil kommunikator orqali qabul qila oladi, boshqasi orqali emas.
Nima uchun bizga turli guruhlar, turli xil muloqot sohalari va turli tavsiflovchilar kerak?
• Mohiyatan, ular xabar identifikatorlari bilan bir xil maqsadga xizmat qiladi — ular maqsad va manzil shoxlariga bir-birini va xabar mazmunini ishonchliroq aniqlashga yordam beradi;
• Parallel dastur doirasidagi tarmoqlar oraliq vazifalarni hal qilish uchun - guruhlar va guruhlar orqali aloqa sohalarini yaratish orqali subkollektivlarga birlashtirilishi mumkin. Ushbu aloqa hududining tavsiflovchisidan foydalangan holda, tarmoqlar subkolektivdan tashqaridan hech narsa olmasliklari kafolatlanadi va ular hech narsa yubormaydilar. Bunga parallel ravishda, ular subkollektivdan tashqarida oʻtkazish uchun oʻz ixtiyorida boʻlgan har qanday boshqa kommunikatordan foydalanishda davom etishlari mumkin, masalan, butun dastur doirasida ma’lumotlar almashinuvi uchun MPI_COMM_WORLD;
• Kollektiv funksiyalar argument tomonidan qabul qilingan kommunikatordan nusxa yaratadi va ularning xabarlari asl kommunikator orqali tarqaladigan “nuqtadan nuqtaga” funksiyalarining xabarlari bilan tasodifan aralashib ketishidan qoʻrqmasdan ma’lumotlarni dublikat orqali uzatadi;
• Turli xil kod qismlarida bir xil maqsadda dasturchi ma’lumotlarni tarmoqlar oʻrtasida turli kommunikatorlar orqali uzatishi mumkin, ulardan biri ikkinchisini nusxalash orqali yaratilgan.
Kommunikatorlar avtomatik ravishda taqsimlanadi ("Yangi kommunikator yaratish" oilasining funksiyalari boʻyicha) va ular uchun joker yoʻq ("har qanday kommunikator orqali qabul qilish") - bu ularning xabar identifikatorlariga nisbatan yana ikkita muhim afzalliklari. Identifikatorlar (butun sonlar) foydalanuvchi tomonidan qoʻlda ajratiladi va bu qabul qiluvchi tomonda chalkashlik tufayli ikkita keng tarqalgan xatoning manbai:
• turli ma’noli xabarlarga xatolik tufayli qoʻlda bir xil identifikator tayinlanadi;
• Joker bilan qabul qilish funksiyasi hamma narsani, jumladan, tarmoqning boshqa joyida qabul qilinishi va qayta ishlanishi kerak boʻlgan xabarlarni ketma-ket siljitadi.
Shuni esda tutish kerakki, kommunikatorni yaratuvchi HAMMA funksiyalar JAMOAVIYdir. Aynan mana shu sifat bunday funksiyalarga turli tarmoqlarda YANGILIK deskriptorni qaytarish imkonini beradi.
Jamoaviylik, quyidagicha:
• funksiya argumentlaridan biri kommunikator hisoblanadi;
• funksiya koʻrsatilgan kommunikatorning HAMMA abonent tarmoqlari tomonidan chaqirilishi kerak.
9.4. Kommunikatorlar va guruhlarni yaratish
Do'stlaringiz bilan baham: |