6 Amaliy mashg’ulot: Mavzu: Tasvirlarga va signallarga parallel ishlov berishda OpenMP paketi yordamida misollarni bajarish. Ishdan maqsad: OpenMP paketi yordamida tasvirlarga va signallarga parallel ishlov berishda oid misollar bajarishni o’rganish. Nazariy qism OpenMP interfeysi dasturlash uchun standart sifatida yaratilgan. Kengaytiriladigan SMP tizimlari (umumiy xotira modeli). OpenMP standarti kompilyator direktivalari, protseduralari va atrof-muhit o'zgaruvchilari to'plami uchun spetsifikatsiyalarni o'z ichiga oladi. OpenMP paydo bo'lishidan oldin SMP tizimlarida samarali dasturlash uchun mos standart mavjud emas edi. Eng moslashuvchan, portativ va umumiy qabul qilingan parallel dasturlash interfeysi MPI (Message Passing Interface) hisoblanadi. Biroq, xabarni uzatish modeli:
• SMP tizimlarida yetarlicha samarali emas;
• o'zlashtirish nisbatan qiyin, chunki u "hisoblashdan tashqari" nuqtai nazardan fikrlashni talab qiladi. Tarmoqlarni tashkil qilish uchun POSIX interfeysi (Pthreads) keng qo'llab-quvvatlanadi (deyarli barcha UNIX tizimlarida), lekin ko'p sabablarga ko'ra amaliy parallel dasturlash uchun mos emas: juda past darajada, ma'lumotlar parallelizmini qo'llab-quvvatlamaydi. Ma'lumotlarning mos kelishidagi kechikishlar. OpenMP ni yuqori darajadagi qo'shimcha sifatida ko'rib chiqish mumkin. Pthreads (yoki shunga o'xshash mavzular kutubxonalari). "Qo'shimcha parallellashtirish" g'oyasi tufayli OpenMP o'z hisoblash dasturlarini katta parallel halqalar bilan tezda parallellashtirishni xohlaydigan ishlab chiquvchilar uchun idealdir. Ishlab chiquvchi yangi parallel dastur yaratmaydi, shunchaki ketma-ket dastur matniga OpenMP direktivalarini ketma-ket qo'shadi. Shu bilan birga, OpenMP juda moslashuvchan mexanizm bo'lib, ishlab chiquvchiga parallel dasturning xatti-harakati ustidan katta nazoratni ta'minlaydi. Bir protsessorli platformadagi OpenMP dasturidan ketma-ket dastur sifatida foydalanish mumkin, deb taxmin qilinadi, ya'ni. ketma-ket va parallel versiyalarni qo'llab-quvvatlashga hojat yo'q. OpenMP direktivalari ketma-ket kompilyator tomonidan oddiygina e'tiborga olinmaydi. C / C ++ uchun OpenMP spetsifikatsiyasi quyidagi funksiyalarni o'z ichiga oladi: OpenMP direktivalari "#pragma omp" belgilar kombinatsiyasi bilan boshlanadi. Direktivlarni 3 toifaga bo'lish mumkin: parallel bo'limni aniqlash, ishni almashish, sinxronizatsiya. Har bir direktivada bir nechta qo'shimcha bo'lishi mumkin.
• OpenMP qo'llab-quvvatlovchi kompilyator "_OPENMP" makrosini belgilaydi, undan shartli ravishda dasturning parallel versiyasiga xos individual bloklarni kompilyatsiya qilish uchun foydalanish mumkin.
• Parallelizatsiya for-looplarga qo'llaniladi, buning uchun "#pragma omp for" direktivasi ishlatiladi. Parallel sikllarda break operatoridan foydalanish taqiqlanadi.
• Parallel dastur sohasida aniqlangan statik o'zgaruvchilar umumiydir.
malloc () bilan ajratilgan xotira umumiydir (ammo unga ko'rsatgich umumiy yoki shaxsiy bo'lishi mumkin).
• OpenMP turlari va funktsiyalari qo'shiladigan faylda aniqlanadi.
• Odatdagidan tashqari, “ichiga o‘rnatilgan” mutekslar ham mumkin – mantiqiy o‘zgaruvchilar o‘rniga butun sonlar qo‘llaniladi va mutexni allaqachon ushlagan ip qayta ushlanganda bu sonni oshirishi mumkin. OpenMP dasturlash modeli vilkalar bilan birlashish parallelizmidir bu erda asosiy ip kerak bo'lganda iplar guruhlarini hosil qiladi, bilan dasturning dasturning parallel sohalariga kirishi.