logo

Umumiy MPI protseduralari. MPI_Comm_size, MPI_Comm_rank, MPI_Get_processor_name funksiyalari

Загружено в:

10.08.2023

Скачано:

0

Размер:

417.287109375 KB
UMUMIY  MPI PROTSEDURALARI .
 MPI_COMM_SI ZE, 
MPI _COMM_RAN K,
MPI_GET_PROCESSOR_N A ME  
FUN KSI YALARI . Terminologiya
•
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.
•
Jarayonlar  guruhlarga  birlashtiriladi, guruh ichida barcha 
jarayonlar qayta nomlanadi. Har bir guruhning u bilan 
bog'langan o'z  kommunikatori  mavjud.
•
Jarayon ikkita asosiy atributga ega:  kommunikator  va 
kommunikatordagi raqam . KOMUNIKATOR VA RANK
•
Kommunikator (communicator ) 
- jamoaviy operatsiyalarni 
(axborot almashinuvi va 
boshqalar) amalga oshirish 
uchun mantiqiy maydonni 
tashkil etuvchi jarayonlar 
to'plami.Guruhlarning tarkibi 
ixtiyoriydir. Guruhlar mos kelishi, 
bir-biriga kirishi, kesishmasligi 
yoki qisman kesishishi mumkin. 
Jarayonlar faqat ma'lum bir 
kommunikator ichida o'zaro 
ta'sir qilishi mumkin, turli 
kommunikatorlardagi xabarlar 
kesishmaydi.
Har bir jarayon maxsus 
identifikatorga ega -  daraja  
(rank)  . Bitta kommunikator 
ichidagi har bir jarayon 
o'ziga xos darajaga ega. •
Kommunikator   aloqa muhitidir.
•
Kommunikatorlar oldindan belgilangan - MPI_Comm  turiga 
ega.
•
Dastur ishga tushganda, barcha jarayonlar 
MPI_COMM_WORLD   kommunikatorida ishlaydi.
•
U har doim mavjud va MPI dasturining barcha ishlaydigan 
jarayonlarining o'zaro ta'siri uchun xizmat qiladi.
•
Dastur boshlanishida faqat bitta joriy jarayonni o'z ichiga 
olgan  MPI_COMM_SELF  kommunikatori va hech qanday 
jarayonlarni o'z ichiga olmaydigan  MPI_COMM_NULL  
kommunikator mavjud.
•
Yo'naltirishda siz ushbu yo'naltirish amalga oshiriladigan 
guruh identifikatorini ko'rsatishingiz kerak. Barcha 
jarayonlar oldindan belgilangan  MPI_COMM_WORLD  
identifikatoriga ega bo'lgan guruhda joylashgan. Umumiy MPI protseduralari
•
Har bir parallel dast urda umumiy  prot seduralar zarur.
•
int MPI_Init ( int * argc, char*** argv ).
•
MPI_Init   -  parallel  qismni  ishga  tushirish  (har  bir  dastur  uchun  haqiqiy 
ishga  tushirish  bir  martadan  ko'p  bo'lmaydi,  agar  takrorlansa,  amallar 
bajarilmaydi va pastki dastur qaytadi).
•
Barcha  MPI  protseduralarini  faqat  MPI_Init  ga  murojat  qilgandan  keyin 
chaqirish mumkin.
•
Jarayon  agar  muvaffaqiyatli  bo'lsa,  – MPI_SUCCESS,   aks  holda  –  xato 
kodini qaytaradi.
•
int MPI_Finalize(v oid)
•
MPI_Finalize  - ilovaning parallel qismini tugatilishi.
•
Jarayon  MPI_Finalize  ni  chaqirganda,  uning  xabar  almashishda  ishtirok 
etishini talab qiladigan barcha amallar bajarilgan bo'lishi kerak.
•
MPI_Init  kompleks  argument  turi  barcha  jarayonlarga  asosiy 
argumentlarni uzatish uchun taqdim etilgan: Umumiy MPI protseduralari
•
Int  MPI_Comm_size( MPI_Comm comm, int * size) -  comm 
guruhidagi parallel jarayonlarning umumiy sonini aniqlash.
•
comm  – guruh identifikatori;
•
OUT size  - guruh hajmi.
•
Int  MPI_Comm_rank ( MPI_Comm comm, i nt * rank )  - comm 
guruhidagi jarayon raqamini aniqlash.
•
&rankda qaytarilgan qiymat 0 dan  size_of_group-1  gacha bo’ladi . 
•
comm - guruh identifikatori;
•
OUT rank – comm guruhidagi chaqirilgan jarayon raqami .  Jarayonlar sonini va rankini 
olishga misol
•
Ushbu dasturda har bir 
ishlaydigan jarayon 
MPI_COMM_WORLD 
kommunikatoridagi o'zining 
noyob raqamini va ushbu 
kommunikatordagi jarayonlar 
sonini chop etadi. MPI_Get_processor_name
•
Protsessor nomini olish uchun MPI_Get_processor_name 
funksiyasidan foydalaniladi.
•
int MPI_Get_processor_name( name, resultlen ) 
•
char *name; 
•
int *resultlen;
•
Paramet rlar:
•
name - protsessor nomi. Bu kamida MPI_MAX_PROCESSOR_NAME 
o‘lchamdagi massiv bo‘lishi kerak. 
•
Name argumenti kamida MPI_MAX_PROCESSOR_NAME belgidan 
iborat bo‘lishi kerak. MPI_GET_PROCESSOR_NAME name ga ko‘p 
belgilar qo‘shishi mumkin. Belgilarning haqiqiy soni  resultlen   
chiqish parametrida qaytariladi Protsessor nomini olish 
•
int main(int argc, char *argv[])
•
{
•
int len;
•
char*name;
•
name = (char*)malloc(MPI_MAX_PROCESSOR_NAME * 
sizeof(char));
•
  //   xotirada protsessor nomi uchun joy ajratish
•
MPI_Init(&argc, &argv); 
•
MPI_Get_processor_name(name, &len);
•
  cout<< " processor name " << name << "\t" <<" name length" 
<<len<<endl;
•
MPI_Finalize(); 
•
return 0;
•
}

UMUMIY MPI PROTSEDURALARI . MPI_COMM_SI ZE, MPI _COMM_RAN K, MPI_GET_PROCESSOR_N A ME FUN KSI YALARI .

Terminologiya • 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. • Jarayonlar guruhlarga birlashtiriladi, guruh ichida barcha jarayonlar qayta nomlanadi. Har bir guruhning u bilan bog'langan o'z kommunikatori mavjud. • Jarayon ikkita asosiy atributga ega: kommunikator va kommunikatordagi raqam .

KOMUNIKATOR VA RANK • Kommunikator (communicator ) - jamoaviy operatsiyalarni (axborot almashinuvi va boshqalar) amalga oshirish uchun mantiqiy maydonni tashkil etuvchi jarayonlar to'plami.Guruhlarning tarkibi ixtiyoriydir. Guruhlar mos kelishi, bir-biriga kirishi, kesishmasligi yoki qisman kesishishi mumkin. Jarayonlar faqat ma'lum bir kommunikator ichida o'zaro ta'sir qilishi mumkin, turli kommunikatorlardagi xabarlar kesishmaydi. Har bir jarayon maxsus identifikatorga ega - daraja (rank) . Bitta kommunikator ichidagi har bir jarayon o'ziga xos darajaga ega.

• Kommunikator aloqa muhitidir. • Kommunikatorlar oldindan belgilangan - MPI_Comm turiga ega. • Dastur ishga tushganda, barcha jarayonlar MPI_COMM_WORLD kommunikatorida ishlaydi. • U har doim mavjud va MPI dasturining barcha ishlaydigan jarayonlarining o'zaro ta'siri uchun xizmat qiladi. • Dastur boshlanishida faqat bitta joriy jarayonni o'z ichiga olgan MPI_COMM_SELF kommunikatori va hech qanday jarayonlarni o'z ichiga olmaydigan MPI_COMM_NULL kommunikator mavjud. • Yo'naltirishda siz ushbu yo'naltirish amalga oshiriladigan guruh identifikatorini ko'rsatishingiz kerak. Barcha jarayonlar oldindan belgilangan MPI_COMM_WORLD identifikatoriga ega bo'lgan guruhda joylashgan.

Umumiy MPI protseduralari • Har bir parallel dast urda umumiy prot seduralar zarur. • int MPI_Init ( int * argc, char*** argv ). • MPI_Init - parallel qismni ishga tushirish (har bir dastur uchun haqiqiy ishga tushirish bir martadan ko'p bo'lmaydi, agar takrorlansa, amallar bajarilmaydi va pastki dastur qaytadi). • Barcha MPI protseduralarini faqat MPI_Init ga murojat qilgandan keyin chaqirish mumkin. • Jarayon agar muvaffaqiyatli bo'lsa, – MPI_SUCCESS, aks holda – xato kodini qaytaradi. • int MPI_Finalize(v oid) • MPI_Finalize - ilovaning parallel qismini tugatilishi. • Jarayon MPI_Finalize ni chaqirganda, uning xabar almashishda ishtirok etishini talab qiladigan barcha amallar bajarilgan bo'lishi kerak. • MPI_Init kompleks argument turi barcha jarayonlarga asosiy argumentlarni uzatish uchun taqdim etilgan: