Samarqand davlat universiteti intelektual tizimlar va kompyutyer texnalogiyalari fakulteti kompyuter ilmlari va dasturlash texnologiyalari yo
Download 50.02 Kb.
|
Paralel dasturlash
SHAROF RASHIDOV NOMIDAGI SAMARQAND DAVLAT UNIVERSITETI INTELEKTUAL TIZIMLAR VA KOMPYUTYER TEXNALOGIYALARI FAKULTETI KOMPYUTER ILMLARI VA DASTURLASH TEXNOLOGIYALARI YO’ NALISHI Parallel dasturlash fanidan Mustaqil ish Bajardi: 202- guruh talabasi ___________Faxridinov.U Tekshirdi: _________ass. Obloqulov.S Mavzu:Open mp kutubxonasi.Open mp direktoriyasi.Thread kutubxonasi metodlari.Chrono kutubxonasi metodlari. Reja: 1.Open mp kutubxonasi va open mp haqida; 2.Thread kutubxonasi metodlari haqida; 3.Chrono kutubxonasi metodlari haqida; OpenMP umumiy xotira parallel dasturlash uchun standartdir. U direktivalar va pragmalardan iborat bo'lib, ular birgalikda OpenMP Application Pro gramming Interface (OpenMP API) spetsifikatsiyasini belgilaydi. OpenMP-dan foydalanish uchun OpenMP spetsifikatsiyasini qo'llab-quvvatlaydigan va API-ni amalga oshiradigan kompilyator talab qilinadi. GCC Intel C++ Compiler va LLVM Clang kabi ko’plab mashhur kompilyatorlar allaqachon spetsifikatsiyani qo’llab-quvvatlaydi va dasturlarni parallellashtirish uchun ishlatilishi mumkin. OpenMP-ni qo'llab-quvvatlaydigan kompilyatorlar C, C++ va Fortran tillaridan birini yoki bir nechtasini kompilyatsiya qilishlari mumkin. 4-algoritm bo'lak o'lchamlarini hisoblash va iteratsiyalarni taqsimlash uchun AFdagi qadamlarni ko'rsatadi.1-qadam iteratsiyalarni to'plamga ajratadi. Keyinchalik, ajratishning hojati yo'q qadam n, Rn takrorlash qoldi.OpenMP umumiy xotira dasturlash modelidan foydalanadi, ya'ni bajarish bir xil manzil maydoniga ega bo'lgan bitta tugunda amalga oshiriladi. Direktivlar yoki pragmalar dastur qismlarini bevosita parallellashtirish uchun manba kodida oqlangan tarzda ishlatilishi mumkin. Direktivlar kompilyatorga bayonotlar qanday bajarilishini va qaysi qismlar parallel ekanligini aytadi. Keyin kompilyator direktivalarni o'qish orqali ko'p oqimli kodni yaratadi. OpenMP-da dasturni parallellashtirish uchun parallel mintaqalar,ishni almashish, o'zgaruvchan qamrov, tanqidiy hududlar va sinxronizatsiya kabi ko'plab konstruktsiyalar mavjud, ammo biz ish almashish qismiga e'tibor qaratamiz, bu erda tsikl va uning iteratsiyasi iplar orasida bo'linadi. Looplarni parallellashtirish OpenMP ning eng mashhur xususiyatlaridan biridir. Faqat buni qilish for-loopdan oldin C/C++ da bitta satr talab qiladi, ya'ni, #pragma omp for schedule (runtime) Shuningdek,foydalanuvchi pragma ichida bandlarni o'rnatishi mumkin,masalan,iplar o'zgaruvchining.o'znusxasiga.ega.yoki.yo'qligini.yoki.tsiklni.qanday.rejalashtirish.kerakligini.tanlash.Spetsifikatsiyada.tavsiflanganidek,C/C++.uchun.ish.almashish-loop konstruktsiyasining aniq sintaksisi, #pragma omp for [clause[[,]clause]...]new-line for-loops OpenMP da biz pragma omp parallel kalit so'zidan foydalanib, biz uni parallel qiladigan mintaqani eslatib o'tishimiz kerak . Pragma omp parallel parallelga o'ralgan ishni bajarish uchun qo'shimcha iplarni vilkalash uchun ishlatiladi . Asl ip ip identifikatori 0 bo'lgan asosiy ip sifatida belgilanadi . Parallel mintaqa yaratish uchun kod: #include { printf("Hello World... from thread = %d\n", omp_get_thread_num()); } Yuqoridagi rasmga ko'ra, kompilyator parallel mintaqalar kodiga duch kelganidan so'ng, asosiy ip ( ip identifikatori 0 ga ega bo'lgan ip ) ko'rsatilgan iplar soniga bog'lanadi. Bu erda u 5 ta ipga bo'linadi, chunki eksport OMP_NUM_THREADS=5 buyrug'i yordamida bajariladigan iplar sonini 5 deb ishga tushiramiz. Parallel mintaqadagi butun kod bir vaqtning o'zida barcha oqimlar tomonidan bajariladi. Parallel hudud tugagach, barcha iplar asosiy ipga birlashtiriladi.OpenMP da biz pragma omp parallel kalit so'zidan foydalanib, biz uni parallel qiladigan mintaqani eslatib o'tishimiz kerak . Pragma omp parallel parallelga o'ralgan ishni bajarish uchun qo'shimcha iplarni vilkalash uchun ishlatiladi . Asl ip ip identifikatori 0 bo'lgan asosiy ip sifatida belgilanadi . Parallel mintaqa yaratish uchun kod: Biz bajariladigan iplar sonini 5 deb belgilaganimiz sababli, 5 ta ip bir xil vaqt nuqtasida bir xil chop etish operatorini bajaradi. Bu erda biz iplarni bajarish tartibini kafolatlay olmaymiz, ya'ni parallel mintaqada bayonotni bajarish tartibi barcha bajarilishlar uchun bir xil bo'lmaydi . Quyidagi rasmda dasturni birinchi marta bajarilayotganda birinchi bo'lib 1-iplik bajariladi, ikkinchi ishga tushirishda esa birinchi navbatda 0-ip tugallanadi. #include #include #include int main(int argc, char* argv[]){ printf("Hello World... from thread = %d\n", omp_get_thread_num()); } Multithreading qo'llab-quvvatlash C+11 da joriy qilingan. C++ 11 dan oldin biz C da POSIX iplari yoki p iplar kutubxonasidan foydalanishimiz kerak edi.Ushbu kutubxona ishni bajargan bo'lsa-da, taqdim etilgan xususiyatlar to'plamining standart tilning yo'qligi jiddiy portativ muammolarni keltirib chiqardi. C++ 11 bularning barchasini yo'q qildi va bizga std::thread ni berdi.Tarmoq sinflari va tegishli funktsiyalar ip sarlavhasi faylida aniqlanadi.std::thread - bu C++ da bitta ipni ifodalovchi ip sinfi. Tarmoqni boshlash uchun biz shunchaki yangi ip ob'ektini yaratishimiz va chaqiriladigan bajaruvchi kodni (ya'ni, chaqiriladigan ob'ektni) ob'ekt konstruktoriga o'tkazishimiz kerak. Ob'ekt yaratilgandan so'ng, chaqiriladigan kodda ko'rsatilgan kodni bajaradigan yangi ish zarrachasi ishga tushiriladi.Qo'ng'iroq qilish mumkin bo'lgan uchtadan biri bo'lishi mumkin Funktsiya ko'rsatkichi Funktsiya ob'ekti Lambda ifodasi Chaqiriladiganni aniqlagandan so'ng, uni konstruktorga o'tkazing.
Funktsiya ko'rsatkichi yordamida ipni ishga tushirish Quyidagi kod parchasi bu qanday amalga oshirilishini ko'rsatadi
Lambda ifodasi yordamida ipni ishga tushirish Quyidagi kod parchasi bu qanday amalga oshirilganligini ko'rsatadi
Bundan tashqari, lambda funktsiyalarini to'g'ridan-to'g'ri konstruktorga o'tkazishimiz mumkin.
Funktsiya ob'ektlari yordamida iplarni ishga tushirish Quyidagi kod parchasi bu qanday amalga oshirilganligini ko'rsatadi
Mavzular tugashini kutmoqda Mavzu boshlangandan so'ng, biz biron bir chora ko'rishimizdan oldin ip tugashini kutishimiz kerak bo'lishi mumkin. Misol uchun, agar dasturning GUI-ni ishga tushirish vazifasini ish zarrachasiga ajratsak, GUI to'g'ri yuklanganligiga ishonch hosil qilish uchun ish zarrachasi tugashini kutishimiz kerak.Mavzuni kutish uchun std::thread::join() funksiyasidan foydalaning. Bu funksiya joriy ish zarrachasini *this tomonidan aniqlangan ip bajarilishini.tugatguncha.kutishga.majbur.qiladi.Masalan,t1 ipi tugaguniga qadar asosiy ipni blokirovka qilish uchun biz shunday qilamiz
Chrono kutubxonasi sana va vaqt bilan ishlash uchun ishlatiladi. Ushbu kutubxona taymerlar va soatlar turli tizimlarda har xil bo'lishi va shuning uchun vaqt o'tishi bilan aniqlik nuqtai nazaridan yaxshilash uchun yaratilgan. Xrono-ning o'ziga xos jihati shundaki, u vaqt va vaqt nuqtasini ("vaqt nuqtasi") ma'lum soatlardan ajratib, aniq-neytral kontseptsiyani ta'minlaydi.chrono - sarlavha va shuningdek, pastki nomlar maydonining nomi: Ushbu sarlavhadagi barcha elementlar (umumiy_turdagi ixtisoslashuvlardan tashqari) to'g'ridan-to'g'ri std nom maydoni ostida (ko'pgina standart kutubxonalar kabi) emas, balki std: ostida aniqlangan:chrono.nomlar.maydoni.Ushbu sarlavhadagi elementlar vaqt bilan bog'liq. Bu asosan uchta tushuncha yordamida amalga oshiriladi:Davomiylik ob'ekti vaqt oralig'ini daqiqa, ikki soat yoki o'n millisekund kabi hisoblash orqali ifodalaydi. Misol uchun, "42 soniya" 1 soniya vaqt birligining 42 ta belgisidan iborat davomiylik bilan ifodalanishi mumkin. #include #include int main (){ using namespace std::chrono; milliseconds mil(1000); mil = mil*60; std::cout << "duration (in periods): "; std::cout << mil.count() << " milliseconds.\n"; std::cout << "duration (in seconds): "; std::cout<<(mil.count()*milliseconds::period::num/milliseconds::period::den); std::cout << " seconds.\n"; return 0;} Download 50.02 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling