G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon
Download 1.46 Mb.
|
ParVychGafGal (1)
- Bu sahifa navigatsiya:
- MPI_Scatter
- (world_rank) ishlatamiz
- MPI_Comm_split
- MPI_COMM_WORLD
- MPI_Comm_group API chaqiruvi
MPI_Allreduce MPI_Reduce bilan bir xil , yagona farq shundaki, u emas. natijalar tarqatilganda ildiz jarayoni identifikatori kerak
barcha jarayonlar uchun. MPIdagi guruhlar va kommunikatorlar Ko'rib turganimizdek, MPI bir vaqtning o'zida ma'lumotlarni uzatish imkonini beradi kabi narsalarni qilish uchun kommunikatordagi barcha jarayonlar o'rtasida Machine Translated by Google bilan ma'lumotlarni bir jarayondan boshqa jarayonlarga taqsimlash MPI_Scatter yordamida yoki ma'lumotlarni qisqartirish bilan MPI_Reduce yordamida . Oldingi barcha bo'limlarda biz foydalanganmiz kommunikator MPI_COMM_WORLD. Buning oddiy ilovalari uchun etarli, chunki bizda nisbatan kichik miqdor bor jarayonlar. Biroq, ilovalar o'sishni boshlaganda, u bo'ladi kamroq amaliy va murakkabroq holatlar uchun foydali bo'lishi mumkin ko'proq aloqachilarga ega. Ushbu bo'limda biz sizga qanday yaratishni ko'rsatamiz asl jarayon guruhining bir qismi bilan muloqot qilish uchun yangi kommunikatorlar bir vaqtning o'zida. Yangisini yaratish uchun ishlatiladigan eng keng tarqalgan funksiya aloqachilar: MPI_Comm_split(MPI_Comm comm, int rang, int kalit, MPI_Comm* newcomm)Bu funksiya "bo'lish" orqali yangi kommunikatorlarni yaratadi. kommunikatorni kirish rang qiymatlari asosida subkommunikatorlar guruhiga aylantiradi va kalit. comm uchun birinchi argument bo'ladi kommunikator hisoblanadi yangi kommunikatorlar uchun asos sifatida foydalaniladi. Bo'lishi mumkin MPI_COMM_WORLD bo'lsin, lekin u boshqa har qanday bo'lishi mumkin kommunikator. Ikkinchi argument, rang , qaysi yangiligini aniqlaydi kommunikator barcha jarayonlarga egalik qiladi. Barcha jarayonlar bir xil rang qiymatini o'tkazish, bir xilga tayinlanadi kommunikator. Uchinchi argument , kalit, har bir yangidagi darajani aniqlaydi kommunikator. Eng kichik kalit qiymatiga ega bo'lgan jarayon bo'ladi daraja 0, keyingi eng past daraja 1 va hokazo oxirgi bo'ladi newcomm argumenti qaytarilgan yangi kommunikatorga havoladir. Biz birini ajratishga harakat qilayotgan oddiy misolni ko'rib chiqing global kommunikatorni kichikroq kommunikatorlar to'plamiga aylantiradi. Unda Misol uchun, biz asl nusxamizni mantiqiy ravishda joylashtirdik deb taxmin qilamiz kommunikatorni 16 ta jarayondan iborat 4x4 tarmog'iga aylantiramiz va biz tarmoqni bo'lishni xohlaymiz Machine Translated by Google qatorlar. Buning uchun har bir chiziq o'z rangiga ega bo'ladi. Yoniq Quyidagi rasmda har bir jarayonni bittasi bilan qanday guruhlashini ko'rishingiz mumkin chapdagi rang o'ngdagi o'z kommunikatorida. Ushbu amallarni bajaradigan dastur kodini ko'rib chiqing: MPI_Init (NULL, NULL); int world_rank, world_size; MPI_Comm_rank(MPI_COMM_WORLD, &dunyo_darajasi); MPI_Comm_size(MPI_COMM_WORLD, &dunyo_hajmi); int rang = dunyo_reyti / 4; MPI_Comm row_comm; MPI_Comm_split(MPI_COMM_WORLD, rang, dunyo_darajasi, &row_comm); int row_rank, row_size; MPI_Comm_rank(satr_xabar, &satr_darajasi); MPI_Comm_size(satr_xabar, &satr_hajmi); Machine Translated by Google printf("DUNYO RANK/ SIZE: %d/ %d --- QATR RANK/ SIZE: %d/ %d\n", dunyo_darajasi, dunyo_o'lchami, qator_darajasi, qator_o'lchami); MPI_Comm_free(&row_comm); MPI_Finalize(); Birinchi qatorlar asl nusxaning darajasi va hajmini oladi kommunikator MPI_COMM_WORLD. Keyingi qator muhim ahamiyatga ega mahalliy jarayonning "rangini" aniqlash operatsiyasi. Rang ekanligini unutmang keyin jarayon qaysi kommunikatorga tegishli bo‘lishini aniqlaydi ajratish. Biz kalit sifatida asl darajani (world_rank) ishlatamiz ajratish operatsiyalari. Chunki biz barcha jarayonlarni yangida xohlaymiz kommunikator asl kommunikatordagi kabi tartibda edi, Bu erda asl daraja qiymatidan foydalanish eng katta qiymatga ega mantiqiy, chunki u allaqachon to'g'ri buyurtma qilingan bo'ladi. Shundan so'ng biz ishlayotganiga ishonch hosil qilish uchun yangi daraja va o'lchamni chop eting. Natija dasturning bajarilishi quyidagicha ko'rinishi kerak: DUNYo MARTARI/O'lchami: 1/8 --- QATR RANCHI/O'lchami: 1/4 DUNYo RANKASI/O'lchami: 0/8 --- QATR RANKSI/O'lchami: 0/4 DUNYo MARTARI/O'lchami: 2/8 --- QATR RANKASI/O'lchami: 2/4 DUNYo MARTARI/O'lchami: 7/8 --- QATR RANKASI/O'lchami: 3/4 DUNYo MARTARI/O'lchami: 6/8 --- QATR RANKASI/O'lchami: 2/4 DUNYoNING RANKASI/O'lchami: 5/8 --- QATR RANCHI/O'lchami: 1/4 DUNYo RANKASI/O'lchami: 3/8 --- QATR RANKASI/O'lchami: 3/4 DUNYo RANKASI/O'lchami: 4/8 --- QATR RANKSI/O'lchami: 0/4 Dastur oxirida biz kommunikatorni ishlatamiz MPI_Comm_free funktsiyasi . MPI ob'ekti endi yo'q bo'lganda foydalanilsa, keyinroq bo'lishi uchun uni bo'shatish kerak qayta ishlatildi. MPI cheklangan miqdordagi ob'ektlarga ega, u bir vaqtning o'zida yaratishi mumkin. Agar ob'ektlarni qo'yib yubormasangiz, bu ish vaqti xatosiga olib kelishi mumkin. 114 Machine Translated by Google MPI_Comm_split yaratish uchun eng keng tarqalgan funksiya bo'lsa-da kommunikator, boshqalar ko'p. Masalan, MPI_Comm_dup yaratadi dublikat kommunikator. U erda g'alati tuyulishi mumkin faqat nusxasini yaratadigan funksiya, lekin bu ilovalar uchun juda foydali ixtisoslashgan ishlarni bajarish uchun kutubxonalardan foydalanadi matematik kutubxonalar kabi funktsiyalar. Bunday ilovalarda bu muhim ahamiyatga ega foydalanuvchi kodlari va kutubxona kodlari bir-biriga xalaqit bermasligi uchun. Kimga Bunga yo'l qo'ymaslik uchun har bir ilova qilish kerak bo'lgan birinchi narsa yaratishdir boshqalar bilan muammolarni oldini olish uchun MPI_COMM_WORLD dublikati MPI_COMM_WORLD dan ham foydalanadigan kutubxonalar . O'zlari oldini olish uchun kutubxonalar MPI_COMM_WORLD nusxalarini yaratishi kerak bir xil muammo. Ishlash uchun boshqa murakkabroq funktsiyalar mavjud o'rtasidagi farqlar kabi biz bu erda yoritmaydigan kommunikatorlar inter-kommunikatorlar va ichki kommunikatorlar va boshqalar kommunikator yaratish uchun ilg'or funktsiyalar. Ular faqat ichida qo'llaniladi juda o'ziga xos ilovalar turlari. MPI_Comm_split esa yangisini yaratishning eng oson usuli hisoblanadi Kommunikator buning yagona yo'li emas. Yana bor kommunikatorlarni yaratishning moslashuvchan usullari, lekin ular yangi turdan foydalanadilar MPI obyekti MPI_Group. Guruhlar haqida batafsil ma'lumot berishdan oldin, kommunikator aslida nima ekanligini bir oz ko'proq ko'rib chiqaylik dalolatnoma. Ichkarida, MPI kommunikatorning ikkita asosiy qismini qo'llab-quvvatlashi kerak - bir kommunikatorni boshqasidan va guruhdan ajratib turuvchi kontekst kommunikator tarkibidagi jarayonlar. MPI identifikatorni saqlaydi aralashtirishning oldini olish uchun ichidagi har bir kommunikator. guruh tushunish biroz osonroq, chunki bu barcha jarayonlarning yig'indisi kommunikatorda. MPI_COMM_WORLD uchun bularning barchasi sodir bo'lgan jarayonlardir mpiexec ishga tushirildi . Boshqa kommunikatorlar uchun guruh boshqacha bo'ladi. Machine Translated by Google MPI bu guruhlarni nazariya odatda ishlaydigan tarzda ishlatadi to'plamlar. Birinchidan, kasaba uyushma operatsiyasi yangi (potentsial) yaratadi. qolgan ikkita to'plamning kattaroq to'plami. Yangi to'plam hamma narsani o'z ichiga oladi birinchi ikkita to'plamning a'zolari (dublikat yo'q). Ikkinchidan, operatsiya kesishuv qolgan ikkitasining yangi (potentsial) kichikroq to'plamini yaratadi to'plamlar. Yangi to'plam mavjud bo'lgan barcha elementlarni o'z ichiga oladi ikkala original to'plam. Bularning ikkalasiga misollarni ko'rishingiz mumkin operatsiyalar grafik ostida. Bu {2, 3}, chunki har bir guruhda faqat shu elementlar ko'rinadi. Endi biz guruhlar qanday ishlashining asoslarini tushunamiz, keling, ko'rib chiqamiz ular MPI operatsiyalariga qanday qo'llanilishi mumkin. MPIda guruh olish oson MPI_Comm_group API chaqiruvi bilan kommunikatordagi jarayonlar . Download 1.46 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling