OpenMP dasturida parallel dastur direktivalar yordamida maxsus tayinlangan dastur - parallel qismlar - dasturiy kodni bir necha alohida buyruqlar oqimlariga (iplar) bo'linishi mumkin bo'lgan dastur hisoblanadi. Umuman olganda, dastur dastur kodining ketma-ket (bir nusxadagi) va parallel (ko'p qismli) qismlari majmuasi sifatida ifodalanadi.
Shuni ta'kidlash joizki, threadlar orasidagi hisob-kitoblarni taqsimlash tegishli OpenMP direktivalari tomonidan boshqariladi. Hisoblagich yukini muvozanatlashning (yukni muvozanatlash) muntazam taqsimoti - parallel dasturni bajarishning mumkin bo'lgan maksimal tezlashuvini olish uchun juda muhim ahamiyatga ega. Mavzular turli xil protsessorlarda (protsessor yadrosi) bajarilishi mumkin yoki bitta hisoblash elementida bajarilishi uchun guruhlangan bo'lishi mumkin (bu holda ular vaqtni almashish rejimida amalga oshiriladi). Cheklash jarayonida parallel dasturni amalga oshirish uchun bitta protsessor qo'llanilishi mumkin - odatda, bu usul parallel dasturning to'g'riligini dastlabki tekshirish uchun ishlatiladi. Iplar soni parallel dastur qismlarini bajarish boshida aniqlanadi va odatda tizimdagi mavjud hisoblash elementlarining soniga to'g'ri keladi; Yaratilgan iplar sonini o'zgartirish turli OpenMP vositalaridan foydalangan holda amalga oshirilishi mumkin.
Dasturning parallel qismlarida barcha oqimlar navbat bilan 0 dan np - 1 ga qayta numaralandırılır, bu erda np, jami oqim soni. Oqimning raqamini OpenMP funktsiyasidan foydalanib ham olish mumkin. Parallelizmni tashkil qilish uchun
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: |