|
Umumiy mpi protseduralari. Mpi comm size, Mpi comm rank, mpi get processor name funksiyalari
|
tarix | 29.11.2023 | ölçüsü | 426,96 Kb. | | #139133 |
| 3 MPIning umumiy protseduralari. Ma’lumotlar uzatish bilan bog’liq bo’lmagan umumiy MPI protseduralari. MPI INIT funksiyasi. MPI FINALIZE funksiyasi. MPI COME SIZE funksiyasi. MPI Umumiy MPI protseduralari. MPI_Comm_size, MPI_Comm_rank, MPI_Get_processor_name funksiyalari. 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. - 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.
- Har bir parallel dasturda umumiy protseduralar zarur.
- intMPI_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.
- intMPI_Finalize(void)
- 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, int* 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;
- Parametrlar:
- 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" <
- MPI_Finalize();
- return 0;
- }
Topshiriq - Protsessor ismini, jarayonlar umumiy sonini va jarayonlar raqamini olish dasturini tuzing.
- Dasturni n ta jarayon orqali ishga tushiring.
- n - jurnaldagi tartib raqamingiz.
Dostları ilə paylaş: |
|
|