OpenMP ishlarini qo'llash ko'p protsessorli hisoblash tizimlarining afzalliklarini
umumiy xotira bilan birgalikda ko'rib chiqishga imkon beradi. Avvalo, bir xil
parallel dasturning iplari umumiy
manzillar maydonida ishlaydi, bu parallel
holda ishlaydigan ish zarrachalar uchun umumiy ma'lumotlardan foydalanishga
imkon beradi (tarqalgan xotirali tizimlar uchun MPI texnologiyasidagi
jarayonlardan farqli o'laroq). Bundan tashqari, ishlarni boshqarish (yaratish,
to'xtatib qo'yish, faollashtirish, tugatish) jarayonlarga nisbatan OS uchun kamroq
ish haqi talab qiladi.
OpenMP tuzilishi:
• Direktivlar
•
Funksiyalar kutubxonasi
• Bir qator o'zgaruvchilari.
Ushbu tartibda OpenMP texnologiyasining imkoniyatlari ko'rib chiqiladi.
Ushbu standart C90, C99, C ++, Fortran 77, Fortran 90 va Fortran 95
algoritmlari uchun OpenMP foydalanishni ta'minlaydi. OpenMP
direktivasining formatini va barcha dasturlarning misollaridan C da taqdim
etiladi; Fortran tili uchun OpenMP texnologiyasidan foydalanish xususiyatlari 1-
bandda keltirilgan. Eng umumiy shaklida OpenMP direktivasining formati
quyidagicha ifodalanishi mumkin:
Protsessorning to'liq quvvatini ishlatish uchun
dasturchilar threadlarni
qanday qilib boshqarishi mumkin? Dasturni iloji boricha tezroq bajarish, yadro
sonini ko'paytirish bilan o'lchab qo'yish va bunday dasturni yozish dasturchining
kabusu emasmi? Bittasi dastur kodida ish zarrachalaridan tuzish, bajarish uchun
vazifalarni bajarish, so'ng ularni o'chirishdir.
Ammo bu holda, siz juda
muhim narsa - sinxronizatsiya haqida g'amxo'rlik qilishingiz kerak. Agar
bitta vazifa boshqa topshiriq bilan hisoblangan ma'lumotlarga muhtoj bo'lsa,
vaziyat yanada murakkablashadi. Turli bir vaqtning o'zida umumiy
o'zgaruvchan qiymatlarni o'zgartirmoqchi bo'lganda nima sodir bo'lishini
tushunish qiyin. Ha, men qo'l bilan ish zarrachalari yaratmoqchi emasman va
vazifalarni ularga topshirishni xohlamayman. Parallel
dasturlash uchun turli
kutubxonalar va standartlar qutqarish uchun keladi. C, C ++, Fortran-OpenMP
dasturlarini parallellashtirish uchun eng keng tarqalgan standartni ko'rib
chiqaylik.
OpenMP
- umumiy xotira bilan birga ko'p protsessorli tizimlarda multi-
threadli dasturlar dasturlash uchun mo'ljallangan API. OpenMP spesifikatsiyasi
bir necha yirik kompyuter uskunalari va dasturiy ta'minot ishlab
chiqaruvchilari tomonidan ishlab chiqilgan.
OpenMP asosiy kompilyatorlari tomonidan qo'llab-quvvatlanadi.
OpenMP-da siz koddagi oqimlarni "ko'rmaysiz". Buning o'rniga,
kompilyatorga #pragma ko'rsatmalariga kod blokini parallel holga keltirishi
mumkinligini aytasiz. Ushbu ma'lumotni bilgan holda, kompilyator parallel parol
bloklari uchun boshqa bir nechta iplarni yaratadigan bitta asosiy threaddan iborat
bo'lgan dasturni ishlab chiqishi mumkin. Ushbu iplar parallel bloklar blokining
oxirida sinxronlashtiriladi va biz yana bir xil asosiy threadka qaytamiz.
OpenMP #pragma tomonidan
nazorat qilinganligi sababli, C ++ kodi
har qanday C++ kompilyatori tomonidan to'g'ri tuzilgan, chunki qo'llab-
quvvatlanmaydigan #pragma e'tiborga olinmasligi kerak. Biroq, OpenMP API-
da, bir nechta vazifani o'z ichiga oladi va ulardan foydalanish uchun nom faylini
kiritishingiz kerak. Derivatning OpenMP-ni qo'llab-quvvatlab turishini
aniqlashning eng oson yo'li omp.h faylini kiritishga urinishdir:
#include
Agar OpenMP qo'llab-quvvatlanadigan bo'lsa, uni
maxsus kompilyatorlar yordamida yoqishga to’g’ri keladi:
Do'stlaringiz bilan baham: