IKKI JARAYON O’RTASIDA XABAR ALMASHISH
![IKKI J ARAYON
O’RTASIDA X ABAR
ALMASHISH](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_1.png)
![IKKI JARAYONO’RTASIDA XABAR
ALMASHISH
•
MPI jarayonlari o'rtasidagi aloqaning asosiy mexanizmi xabarlarni uzatish va
qabul qilishdir.
•
Xabar o’z ichiga bir nechta malumotlarni oladi:
•
• jo‘nat uv chi – xabar jo‘natuvchining darajasi (guruhdagi raqami);
•
• oluv chi – oluvchining darajasi;
•
• bel gi - har xil turdagi xabarlarni ajratish uchun ishlatilishi mumkin;
•
• k ommunik at or – jarayonlar guruhi kodi.
•
Yuborish va qabul qilish operatsiyalari blok irov k a qiluv chi yoki
blok lanmay digan bo'lishi mumkin. Bloklanmaganmaydigan operatsiyalar
uchun tayyorlikni tekshirish va bajarilishini kutish funktsiyalari
belgilanadi.Aloqaning yana bir usuli - masofaviy xotiraga kirish , bu sizga
masofaviy jarayonning xotira maydonini o'qish va o'zgartirish imkonini
beradi. Mahalliy jarayon masofaviy jarayonning xotira maydoniga (jarayonlar
tomonidan ko'rsatilgan oyna ichidagi) murojat qilishi va aksincha bo’lishi
mumkin, shuningdek, masofaviy jarayonga uzatilgan ma'lumotlarni uning
xotirasida mavjud bo'lgan ma'lumotlar bilan birlashtirishi mumkin (masalan,
yig'ish orqali). Xotiraga masofaviy kirishning barcha operatsiyalari
bloklanmaydi, biroq blokirovka qiluvchi sinxronlash funksiyalari bajarilishidan
oldin va keyin chaqirilishi kerak.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_2.png)
![Xabar uzatish modeli](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_3.png)
![Xabar jo’natish – o’zaro aloqa
yo’lidir.
•
Har bir jarayonning o'ziga
xos identifikatori va
ajratilgan manzil maydoni
mavjud.
•
MPI-da umumiy
o'zgaruvchilar yoki
ma'lumotlar mavjud emas.
•
Jarayonlar jamoaviy axborot
almashish operatsiyalarini
amalga oshirish uchun
guruhlarni tashkil qilishi
mumkin.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_4.png)
![Terminalogiya
•
MPI - bu xabarlarni uzatish nuqtai nazaridan parallel jarayonlarning
ishlashini qo'llab-quvvatlash uchun mo'ljallangan funktsiyalar
kutubxonasi.
•
Jarayon raqami manfiy bo'lmagan butun son bo'lib, har bir
jarayonning o'ziga xos atributidir.
•
Xabarning atributlari jo'natuvchining jarayon raqami, qabul
qiluvchining jarayon raqami va xabar identifikatoridir.
•
MPI_Status tuzilmasida quyidagi maydonlar mavjud:
•
MPI_Source (jo'natuvchining jarayon raqami),
•
MPI_Tag (xabar identifikatori),
•
MPI_Error (xato kodi); qo'shimcha maydonlar ham bo'lishi mumkin.
•
Xabar identifikatori (msgtag) - 0 dan 32767 gacha bo'lgan manfiy
bo'lmagan butun son bo'lgan xabar atributi. Jarayonlar guruhlarga
birlashtiriladi, guruh ichida barcha jarayonlar qayta nomlanadi.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_5.png)
![Xabar jo’natish va qabul qilish
•
MPI-dagi asosiy operatsiya xabarlarni uzatishdir.Deyarli barcha
asosiy aloqa shakllari MPIda amalga oshiriladi: nuqtadan nuqtaga ,
jamoaviy va bir tomonlama .
Dasturlar parallel
jarayonlarni yaratish va
tugatish vositalarini va
ishlaydigan jarayonlarning
o'zaro ta'sirini o'z ichiga
oladi.
Jo’natish jarayonlari
quyidagicha bo’lishi
mumkin: Individual turi
ya’ni nuqtadan
nuqtaga.Kollektiv -
operatsiyada
kommunikatorning barcha
protsessorlari ishtirok
etadi.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_6.png)
![Xabar almashish turi
•
Barcha protseduralar quyidagi
sinflarga bo'linadi: blokirovka
qiluvchi (sinxronizatsiya bilan) va
blokirovkasiz (asinxron)
protseduralar.
•
Bloklirovkali xabar almashish
protseduralari ishni to shart
bajarilgunga qadar to'xtatib
turadi. Asinxrondan qaytish aloqa
operatsiyasini ishga tushirgandan
so'ng darhol sodir bo'ladi.
•
Bloklirovkali xabar almashish bilan
ehtiyotkorlik bilan foydalanish
lozim.
•
Asinxron operatsiyalardan
foydalanish ma'lumotlar
massivlaridan ehtiyotkorlik bilan
foydalanishni talab qiladi.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_7.png)
![Xabarni tashkil qiluvchilar.
•
1. Xabarlar malumotlar blogi – void*
•
2. Xabar ma'lumotlari quyidagilar.
•
(a) ma'lumotlar turi –MPI_Datatype;
•
(b) ma'lumotlar soni.
•
3. Xabarni qabul qiluvchi va jo'natuvchi haqida ma'lumot.
•
(a) Komunikator – MPI_Comm tipidagi jarayonlar guruhi
identifikatori, yuqori darajadagi kommunikator –
MPI_COMM_WORLD;
•
(b) qabul qiluvchining darajasi - ko'rsatilgan kommunikatordagi
qabul qiluvchi jarayonning raqami;
•
(c) jo'natuvchi darajasi - ko'rsatilgan kommunikatordagi jo'natuvchi
jarayonning raqami
•
MPI_ANY_SOURCE orqali tegishli kommunikatorda barcha
jo‘natuvchilardan xabarlar olishingiz mumkin.
•
4. Xabar tegi. int turining ixtiyoriy soni. Siz xabarlarni ma'lum bir teg
bilan qabul qilishingiz mumkin, ixtiyoriy tegdagi xabarni qabul qilish
uchun -MPI_ANY_TAG dan foydalanish mumkin.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_8.png)
![MPI va C malumot tiplari
muvofiqligi.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_9.png)
![MPI va C++ malumot tiplari muvofiqligi.
№ MPI C++ БАЙТ Ди апазон
при ни м аем ы х
значени й
1 MPI_DOUBLE double 8 -9 223 372 036 854 775
808 .0 / 9 223 372 036
854 775 807.0
2 MPI_FLOAT float 4 -2 147 483 648.0 / 2 147
483 647.0
3 MPI_INT int 4 -2 147 483 648 / 2 147
483 647
4 MPI_CHAR char 1 0 / 255
5 MPI_LONG signed long int 4 -2 147 483 648 / 2 147
483 647
6 MPI_LONG_DOUBLE long double 10 3.4e-4932 / 3.4e+4932
7 MPI_SHORT signed short int 2 -32 768 / 32 767
8 MPI_UNSIGNED unsigned int 4 0 / 4 294 967 295
9 MPI_UNSIGNED_CHAR unsigned char 1 0 / 255
10 MPI_UNSIGNED_LONG unsigned long int 4 0 / 4 294 967 295
11 MPI_UNSIGNED_SHORT unsigned short int 2 0 / 65 535
12 MPI_BYTE Типы данных MPI_BYTE и MPI_PACKED не соответствуют типу данных
Fortran или C ,C++ . Значение типа MPI_BYTE состоит из байта (8 двоичных
цифр). Байт не интерпретируется и отличается от символа. Разные
машины могут иметь разные представления символов или могут
использовать более одного байта для представления символов. С другой
стороны, байт имеет одинаковое двоичное значение на всех машинах.13 MPI_PACKED](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_10.png)
![Blokirovkali xabar jo’natish.
•
Sinxronizatsiya bilan nuqtadan nuqtaga xabar jo’natish (biri
jo'natuvchi, ikkinchisi qabul qiluvchi)
•
int MPI_Send(v oid* buf, int count , MPI_Dat at y pe dat at y pe, int
dest , int msgt ag, MPI_Comm comm)
•
buf – xabar yuborish buferining bosh manzili;
•
count - xabardagi uzatiladigan elementlar soni;
•
datatype - uzatilgan elementlarning turi;
•
dest - qabul qilish jarayonining raqami;
•
msgtag - xabar identifikatori;
•
comm - bu guruh identifikatori.
•
Xabarning barcha elementlari bufer bufida ketma-ket joylashgan.
O'z-o'ziga xabar yuborishga ruxsat beriladi, lekin bu boshi berk
ko'chaga olib kelishi mumkin.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_11.png)
![Xabarni qabul qilish
•
int MPI_Recv (v oid* buf, int count , MPI_Dat at y pe dat at y pe, int
source, i nt msgt ag, MPI_Comm comm, MPI_St at us*st at us)
•
OUT buf – xabarni qabul qiluvchi bufer manzili;
•
count - qabul qilingan xabardagi elementlarning maksimal soni;
•
dat at y pe - qabul qilingan xabar elementlarining turi;
•
source - jo'natuvchi jarayonning raqami;
•
msgt ag - qabul qilingan xabarning identifikatori;
•
OUT st at us – qabul qilingan xabar parametrlari.
•
Blokirovkalash pastki dastur qaytgandan so'ng xabarning barcha
elementlari qabul qilinishini va bufer bufiga joylashtirilishini
ta'minlaydi.Agar jarayon boshqa jarayonga ikkita xabar yuborsa va
ikkala xabar ham bir xil MPI_Recv chaqiruviga mos kelsa, birinchi
yuborilgan xabar avval qabul qilinadi.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_12.png)
![Xabar statusi
•
Qabul qilingan xabarning atributlarini status massivining
elementlaridan aniqlash mumkin.
•
status parametri - MPI_SOURSE (haqiqiy xabar darajasi), MPI_TAG
(haqiqiy teg) va MPI_ERROR (xato kodi) maydonlari bilan oldindan
belgilangan MPI_Status turidagi strukturadir.Qabul qilish
jarayonining raqami aniq ko'rsatilishi kerak.Agar bitta jarayon
bitta MPI_Recv ga mos keladigan ikkita xabarni boshqa jarayonga
yuborsa, birinchi xabar birinchi bo'lib qabul qilinadi.Agar xabar
turli jarayonlar tomonidan yuborilgan bo'lsa, unda qabul qilish
tartibi aniqlanmagan.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_13.png)
![Ikki jarayon o’rtasida xabar
almashish
•
0-jarayon 1-jarayonga
xabar yuboradi va undan
javob kutadi.
•
Dastur 3 ta jarayonda
ishga tushirilgan va bu
dasturda 0- va 1-0
jarayonlar o’rtasida xabar
almashinyapti.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_14.png)
![](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_15.png)
![Topshiriqlar
•
1) Bir jarayondan 2- jarayonga MPI_INT tipidagi ma’lumot jo’nating va undan MPI_INT
tipidagi ma’lumot qabul qiling va olingan ma’lumotlarni ekranga chop eting (har
ikkala jarayon uchun ham).
•
2) Bir jarayondan 2- jarayonga MPI_FLOAT tipidagi ma’lumot jo’nating va undan
MPI_INT tipidagi ma’lumot qabul qiling va olingan ma’lumotlarni ekranga chop eting
(har ikkala jarayon uchun ham).
•
3) Bir jarayondan 2- jarayonga MPI_DOUBLE tipidagi ma’lumot jo’nating va undan
MPI_FLOAT tipidagi ma’lumot qabul qiling va olingan ma’lumotlarni ekranga chop
eting (har ikkala jarayon uchun ham).
•
4) Bir jarayondan 2- jarayonga MPI_FLOAT tipidagi ma’lumot jo’nating va undan
MPI_FLOAT tipidagi ma’lumot qabul qiling va olingan ma’lumotlarni ekranga chop
eting (har ikkala jarayon uchun ham).
•
5) Bir jarayondan 2- jarayonga 2 ta MPI_INT tipidagi ma’lumot jo’nating va bu
ma’lumotlarni ekranga chop eting.
•
6) Bir jarayondan 2- jarayonga 2 ta MPI_FLOAT tipidagi ma’lumot jo’nating va bu
ma’lumotlarni ekranga chop eting.
•
7) Bir jarayondan 2- jarayonga 2 ta MPI_DOUBLE tipidagi ma’lumot jo’nating va bu
ma’lumotlarni ekranga chop eting.
•
8) Bir jarayondan 2- jarayonga 2 ta ma’lumot (MPI_INT va MPI_FLOAT tipidagi )
jo’nating va bu ma’lumotlarni ekranga chop eting.
•
9) Bir jarayondan 2- jarayonga 2 ta ma’lumot (MPI_DOUBLE va MPI_FLOAT tipidagi )
jo’nating va bu ma’lumotlarni ekranga chop eting.
•
10) Bir jarayondan 2- jarayonga 2 ta ma’lumot (MPI_DOUBLE va MPI_INT tipidagi )
jo’nating va bu ma’lumotlarni ekranga chop eting.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_16.png)
![•
11) Bir jarayondan 2- jarayonga 2 ta teg orqali turli xil tipdagi (MPI_DOUBLE
va MPI_INT) malumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
12) Bir jarayondan 2- jarayonga 2 ta teg orqali turli xil tipdagi (MPI_FLOAT
va MPI_INT) malumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
13) Bir jarayondan 2- jarayonga 2 ta teg orqali turli xil tipdagi (MPI_FLOAT
va MPI_DOUBLE) malumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
14) Bir jarayondan 2- jarayonga 3 ta teg orqali turli xil tipdagi 3ta malumot
jo’nating va bu ma’lumotlarni ekranga chop eting.
•
15) Bir jarayondan 2- jarayonga 2 ta 2-jarayondan 1- jarayonga 1 ta turli
tipdagi ma’lumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
16) Bir jarayondan 2- jarayonga 2 ta 2-jarayondan 1- jarayonga 3 ta turli
tipdagi ma’lumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
17) Bir jarayondan 2- jarayonga 3 ta 2-jarayondan 1- jarayonga 1 ta turli
tipdagi ma’lumot jo’nating va bu ma’lumotlarni ekranga chop eting.
•
18) Bir jarayondan 2- jarayonga 2 ta 2-jarayondan 1- jarayonga 1 ta turli
tipdagi va turli teglar orqali ma’lumot jo’nating va bu ma’lumotlarni ekranga
chop eting.
•
19) Bir jarayondan 2- jarayonga 2 ta 2-jarayondan 1- jarayonga 3 ta turli
tipdagi va turli teglar orqali ma’lumot jo’nating va bu ma’lumotlarni ekranga
chop eting.
•
20) Bir jarayondan 2- jarayonga 3 ta 2-jarayondan 1- jarayonga 1 ta turli
tipdagi va turli teglar orqali ma’lumot jo’nating va bu ma’lumotlarni ekranga
chop eting.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_17.png)
![Variantlar
**Variant raqami jurnaldagi raqam bilan mos qilib tanlansin
Variant
raqami 1-
sav ol
raqam
i 2- sav ol
raqami 3- sav ol
raqami Variant
raqami 1- sav ol
raqami 2- sav ol
raqami 3- sav ol
raqami
1
1 2 20 14
14 5 14
2
2 16 4 15
15 18 9
3
3 8 19 16
16 12 2
4
4 13 8 17
17 3 11
5
5 19 7 18
18 10 6
6
6 7 13 19
19 16 17
7
7 11 5 20
20 9 3
8
8 15 10 21
1 18 9
9
9 6 19 22
2 7 17
10
10 4 18 23
3 13 15
11
11 1 16 24
4 17 9
12
12 14 1 25
5 20 15
13
13 17 15](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_18.png)
![Natijalar va vazifalarni qay tarzda bajarilganligini hisobotda
yoriting.](/data/documents/c9899cff-6386-474a-842c-3e06457a8f2a/page_19.png)
IKKI J ARAYON O’RTASIDA X ABAR ALMASHISH
IKKI JARAYONO’RTASIDA XABAR ALMASHISH • MPI jarayonlari o'rtasidagi aloqaning asosiy mexanizmi xabarlarni uzatish va qabul qilishdir. • Xabar o’z ichiga bir nechta malumotlarni oladi: • • jo‘nat uv chi – xabar jo‘natuvchining darajasi (guruhdagi raqami); • • oluv chi – oluvchining darajasi; • • bel gi - har xil turdagi xabarlarni ajratish uchun ishlatilishi mumkin; • • k ommunik at or – jarayonlar guruhi kodi. • Yuborish va qabul qilish operatsiyalari blok irov k a qiluv chi yoki blok lanmay digan bo'lishi mumkin. Bloklanmaganmaydigan operatsiyalar uchun tayyorlikni tekshirish va bajarilishini kutish funktsiyalari belgilanadi.Aloqaning yana bir usuli - masofaviy xotiraga kirish , bu sizga masofaviy jarayonning xotira maydonini o'qish va o'zgartirish imkonini beradi. Mahalliy jarayon masofaviy jarayonning xotira maydoniga (jarayonlar tomonidan ko'rsatilgan oyna ichidagi) murojat qilishi va aksincha bo’lishi mumkin, shuningdek, masofaviy jarayonga uzatilgan ma'lumotlarni uning xotirasida mavjud bo'lgan ma'lumotlar bilan birlashtirishi mumkin (masalan, yig'ish orqali). Xotiraga masofaviy kirishning barcha operatsiyalari bloklanmaydi, biroq blokirovka qiluvchi sinxronlash funksiyalari bajarilishidan oldin va keyin chaqirilishi kerak.
Xabar uzatish modeli
Xabar jo’natish – o’zaro aloqa yo’lidir. • Har bir jarayonning o'ziga xos identifikatori va ajratilgan manzil maydoni mavjud. • MPI-da umumiy o'zgaruvchilar yoki ma'lumotlar mavjud emas. • Jarayonlar jamoaviy axborot almashish operatsiyalarini amalga oshirish uchun guruhlarni tashkil qilishi mumkin.
Terminalogiya • MPI - bu xabarlarni uzatish nuqtai nazaridan parallel jarayonlarning ishlashini qo'llab-quvvatlash uchun mo'ljallangan funktsiyalar kutubxonasi. • Jarayon raqami manfiy bo'lmagan butun son bo'lib, har bir jarayonning o'ziga xos atributidir. • Xabarning atributlari jo'natuvchining jarayon raqami, qabul qiluvchining jarayon raqami va xabar identifikatoridir. • MPI_Status tuzilmasida quyidagi maydonlar mavjud: • MPI_Source (jo'natuvchining jarayon raqami), • MPI_Tag (xabar identifikatori), • MPI_Error (xato kodi); qo'shimcha maydonlar ham bo'lishi mumkin. • Xabar identifikatori (msgtag) - 0 dan 32767 gacha bo'lgan manfiy bo'lmagan butun son bo'lgan xabar atributi. Jarayonlar guruhlarga birlashtiriladi, guruh ichida barcha jarayonlar qayta nomlanadi.