Aloxida jarayonlar o`rtasidagi xabarlarni uzatish-qabul qilish
Amalda MPI kommunikatsion texnologiyasidan foydalanib yozilgan barcha dasturlar faqat parallel jarayonlarni yaratish va tugatish vositalariga emas, balki jarayonlar o`zaro muloqat qilish vositasiga xam ega bo`lishi kerak. MPI da bunday muloqat xabarlarni yaqqol uzatish orqali amalga oshiriladi.
MPI dagi xabarlar almashuvi protseduralar ikkita guruxga bo`linadi.
Birchi guruxga dasturning faqat ikkita jarayoni muloqat qilish uchun mo`ljallangan protseduralar kiradi. Bu amal individual yoki nuqta-nuqta deb ataladi.
Ikkinchisiga gurux protseduralarida kommunikatordagi barcha jarayonlar xabarlar almashishi inobatga olinadi. Bunday amallar jamoa deb ataladi.
Xabarlar almashish protseduralarini taxlil qilish nuqta-nuqta toifali amal bajaruvchi protseduralardan boshlaymiz. bunday muloqatda ikkita jarayon qatnashadi va ularning biri jo`natuvchisi, ikkinchisi qabul qiluvchi xisoblanadi. Jo`natuvchi jarayon ma`lumotlar almashishini ta`minlovchi protseduralardan birini chiqarishi kerak va biror kommunikatrodagi qabul qiluvchi jarayon nomerini ko`rsatishi kerak. qabul qiluvchi jarayon esa uzatuvchi jarayon nomerni ko`rsatgan xolda qabul qilish protsedurasidan birini chiqarishi kerak. ba`zi xollarda uzatuvchi jarayon nomeri noma`lum bo`lishi mumkin. joriy gurux protseduralari xam o`z navbatda ikkita sinfga bo`linadi: blokirovkali protsedura (sinxronli) va blokirovkasiz protsedura (asinxron).
Blokirovkali xabar olish protseduralari almashishi biror shart bajarilishigacha o`zi ishni tugatadi. Asinxron protseduralarini qaytishi esa mos kommunikatsion amal bajarilishi darrov amalga oshadi.
Blokirovkali protseduradan to`g`ri foydalanishdan boshi berg xolatlar vujudga kelishi mumkin. Shuning uchun qo`shimcha extiyot choralarni ko`rish kerak.
Asinxron protseduralaridan foydalanishda boshi berk xolatlar yuz bermaydi, biroq ularni qo`llashda ma`lumotlar massividan to`g`ri foydalanish talab etiladi.
MPI_SEND(BUF,COUNT,DATATYPE,DEST,MSGTAG,COMM,IERR)
BUF(*)
INTEGER COUNT,DATATYPE, DEST,MSGTAG ,COMM, IERR
Blokirovkali massiv jo`natish DATATYPE toifali COUNT ta elementlardan iborat MSGTAG identifikatorli BUF xabari COMM kommunikatoridagi DEST nomerli jarayoniga jo`natilgan. Jo`natilgan xabarlarning barcha eleiyentlari ketma-ket xolda BUF buferda joylashishi kerak. Bu amal qabul qiluvchi jarayon o`rnatilmagan bo`lsa xam bajariladi. Bunda xabar bevosita qabul buferiga nusxalangani kabi biror sistema buferiga xam joylashtiriladi (agar MPI da belgilangan bo`lsa). COUNT qiymati nol bo`lishi xam mumkin. Jarayon o`z-o`ziga xam xabar berishi mumkin. Bu xavfli emas va boshi berg xolatlarga xam, olib kelishi mumkin. DATATYPE parametri Fotran tilida INTEGER toifasiga ega bo`ladi(SI tilida MPI_Datatype). Uzatiladigan elementlar toifasi Fotran tilidan konstantalar bilan ko`rsatiladi. Bu konstantalar quyidagi jadvalda keltirilgan:
Do'stlaringiz bilan baham: |