OpenMP dasturi
![OpenMP dasturi
Reja
1. KIRISH
2. ASOSIY QISM
2.1. Umumiy xotira dasturlash modeli
2.2. OpenMP dasturini kompilyatsiya qilish va ishga tushiris
2.3. OpenMP dasturini monitoring qilish
2.4. Parallel takrorlash natijalarini birlashtirish
3. XULOSA
4. FOYDALANILGAN ADABIYOTLAR](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_1.png)
![KIRISH
Zamonaviy texnologiyalar parallel texnologiyalar bir-biridan dasturlash
tillarida emas, balki parallel tizimlarni qurishning arxitekturaviy yondashuvlarida
ham farqlanadi.
Masalan, ba'zi texnologiyalar bir nechta kompyuterlar asosida parallel
dasturlarni qurishni taklif qilsa, boshqalari bir nechta protsessorli bitta mashinada
ishlashga imkon beradi.
Uzoq vaqt davomida bir nechta kompyuterlarga asoslangan tizimlar
ishlatilgan, ular taqsimlangan hisoblash tizimlariga tegishli. Tarqalgan
hisoblashning eng yorqin misoli MPI (Message Passing Interface (xabarni uzatish
interfeysi)) parallel dasturlashda ma'lumotlar almashish interfeysi uchun eng keng
tarqalgan standart bo'lib, ko'plab kompyuter platformalari uchun ilovalar mavjud.
MPI dasturchiga mashina arxitekturasidan (birgalikda/alohida xotiraga ega bir
protsessorli/ko‘p protsessorli), filiallarning nisbiy joylashuvidan (bir xil
protsessorda yoki boshqa protsessorda) qat’iy nazar, parallel dastur doirasida
filiallarning o‘zaro ta’sirining yagona mexanizmini taqdim etadi. birlar).[8]
Bitta kompyuterda ishlash uchun parallel dasturlash tizimlari o'z
rivojlanishini nisbatan yaqinda boshladi. Darhaqiqat, ilovalarni ishlab chiqishda
ishlab chiquvchi qo'l ostidagi resurslar, ya'ni bir nechta kompyuter yadrolaridan
foydalanish bilan ishlashni qanday oshirish kerakligi haqidagi savolga duch keladi
va Open MP API dasturchiga yordam beradi. 1997 yilda ishlab chiqilgan OpenMP
texnologiyasi umumiy xotiraga ega bo'lgan ko'p protsessorli hisoblash
tizimlarining imkoniyatlaridan maksimal darajada samarali foydalanish imkonini
beradi, bu esa protsessorlararo xabarlarni ko'p vaqt talab qilmasdan parallel
oqimlar uchun umumiy ma'lumotlardan foydalanishni ta'minlaydi.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_2.png)
![2.1. Umumiy xotira dasturlash modeli
Dasturchi nuqtai nazaridan, umumiy xotira multiprotsessorlari modeli 1-
rasmda ko'rsatilganidek, bitta asosiy xotiraga ega bo'lgan bir qancha mustaqil
protsessorlarni o'z ichiga oladi. Har bir protsessor to'g'ridan-to'g'ri asosiy
xotiradagi ma'lumotlarning istalgan joyiga kirishi mumkin va istalgan vaqtda turli
protsessorlar turli ma'lumotlar bo'yicha turli ko'rsatmalarni bajarishi mumkin,
chunki har bir protsessor o'zining boshqaruv bloki tomonidan boshqariladi.
Flinning parallel tizimlar taksonomiyasidan foydalangan holda, bu model MIMD,
ya'ni bir nechta ko'rsatmalar bir nechta ma'lumotlar deb ataladi.
1-rasm: Umumiy xotirali multiprotsessor modeli.
Mumkin bo'lgan maksimal tezlikka erishish uchun parallel tizimdan to'liq
foydalanish muhim ahamiyatga ega bo'ladi.
OpenMP yordamida ko'p yadroli va umumiy xotira multiprotsessorlarini
dasturlash.
Oddiy va umumiy bo'lishi uchun asosiy xotiraning ichki tuzilishi ushbu
modeldan tashqarida qoldirilgan. Oddiy va umumiy modeldan foydalanish,
shuningdek, parallel tizim spetsifikatsiyalari ma'lum bo'lganidan keyin ma'lum bir
tizim uchun optimallashtirilishi mumkin bo'lgan portativ dasturlarni loyihalash va
amalga oshirishni soddalashtiradi.
Ko'pgina zamonaviy protsessorlar ko'p yadroli protsessorlardir va shuning
uchun ular yadro deb ataladigan bir nechta mustaqil hisoblash bloklaridan iborat.
Bundan tashqari, ushbu protsessorlar (bir vaqtning o'zida) multithreading (SMT) ni
qo'llab-quvvatlaydi, shuning uchun har bir yadro (deyarli) bir vaqtning o'zida iplar
deb ataladigan bir nechta mustaqil ko'rsatmalar oqimini bajarishi mumkin.
Dasturchi uchun har bir protsessor ichidagi har bir yadro bir nechta mantiqiy yadro
vazifasini bajaradi, ularning har biri o'z dasturini yoki dastur ichidagi ipni mustaqil
ravishda ishga tushirishga qodir.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_3.png)
![Bugungi kunda mobil, ish stoli va server protsessorlari odatda 2 dan 24 gacha
yadrolarni o'z ichiga oladi va ko'p ish zarralarini qo'llab-quvvatlash bilan ular bir
vaqtning o'zida 4 dan 48 tagacha oqimlarni ishga tushirishlari mumkin. Misol
uchun, ikki yadroli mobil Intel i7 protsessori giper-threading (Intel's SMT) 2
(jismoniy) yadrodan iborat bo'lib, 4 ta mantiqiy yadroni ta'minlaydi. Xuddi
shunday, 3.2-rasmda ko'rsatilganidek, to'rt yadroli Intel Xeon protsessori giper-
threading bilan 8 ta mantiqiy yadroni va ikkita shunday protsessorli tizim 16 ta
mantiqiy yadroni ta'minlaydi. Agar avtobus yoki kesh kabi ma'lum resurslardan
umumiy foydalanish bir chetga surilsa, har bir mantiqiy yadro o'z ish zarrachasini
mustaqil ravishda bajarishi mumkin. Jismoniy amalga oshirishdan qatiy nazar,
dasturchi bunday tizimda 3.1-rasmda ko'rsatilganidek, har biri individual
protsessor sifatida ishlaydigan 16 ta mantiqiy yadroni o'z ichiga oladi, bu erda n =
16.
3.2- rasm : Bir vaqtning o ' zida ko ' p trithreadingni qo ' llab - quvvatlaydigan ikkita to ' rt
yadroli protsessorli parallel tizim bir xil xotiraga ulangan 16 ta mantiqiy yadroni
o ' z ichiga oladi .
Ko ' p yadroli protsessorlardan tashqari , o ' nlab yoki yuzlab jismoniy
yadrolarni o ' z ichiga olgan ko ' p yadroli protsessorlar ham mavjud . Masalan , Intel
Xeon Phi bir vaqtning o ' zida 240 dan 288 tagacha ipni ishga tushirishga qodir 60
dan 72 gacha jismoniy yadrolarni ta ' minlaydi .
Zamonaviy tizimlarning turli protsessorlar yoki ( mantiqiy ) yadrolar
yordamida bir vaqtning o ' zida bir nechta ish zarralarini bajarish qobiliyati
qimmatga tushadi . Alohida iplar asosiy xotiradagi istalgan xotira joyiga kirishi va
ko ' rsatmalar oqimlarini mustaqil ravishda bajarishi uchun poyga holatiga olib
kelishi mumkin , ya ' ni natija asosiy xotiraning bir xil joyiga o ' qish va yozishning
aniq vaqtiga bog ' liq bo ' lgan vaziyatga olib kelishi mumkin . Masalan , ikkita ip bir
xil xotira joyida saqlangan qiymatni biri 1 ga , ikkinchisi esa oshirishi kerak deb
faraz qilaylik .
Har bir ip qiymatni o ' qiydi , uni oshiradi va uni qayta yozadi . Agar ushbu
uchta ko ' rsatma birinchi navbatda bitta ip tomonidan , keyin esa ikkinchisi](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_4.png)
![tomonidan bajarilsa , to ' g ' ri natija chiqariladi . Ammo iplar ko ' rsatmalarni mustaqil
ravishda bajaradiganligi sababli , har bir ip tomonidan bajariladigan ushbu uchta
ko ' rsatmalarning ketma - ketligi 3.3- rasmda ko ' rsatilganidek , vaqt o ' tishi bilan bir -
biriga mos kelishi mumkin . Bunday vaziyatlarda natija ham noto ' g ' ri , ham
aniqlanmagan : har ikkala holatda ham xotiradagi qiymat 1 yoki 2 ga oshiriladi ,
lekin 1 va 2 ga emas .
3.3- rasm : Ikki ip asosiy xotirada bir xil joyda qiymatni oshirishga harakat qilganda
poyga holatining ikkita misoli .
Poyga holatini oldini olish uchun asosiy xotiradagi umumiy manzilga eksklyuziv
kirish yordamida qulflash yoki o ' qish - o ' zgartirish - yozish ko ' rsatmalari yordamida
atomik kirish kabi mexanizmlar yordamida ta ' minlanishi kerak . Agar qulflash
ishlatilsa , har bir ip o ' zgartirishdan oldin umumiy xotira joyiga kirishni bloklashi
va 3.4- rasmda ko ' rsatilganidek , keyin uni qulfdan chiqarishi kerak . Agar ip boshqa
ip allaqachon qulflangan narsani bloklashga urinsa , u boshqa ip uni qulfdan
chiqarguncha kutishi kerak . Ushbu yondashuv bitta ipni kutishga majbur qiladi ,
lekin to ' g ' ri natijani kafolatlaydi .
3.4-rasm: Qulflash yordamida 3.3-rasmda ko'rsatilganidek, poyga sharoitlarini
oldini olish.
OpenMP yordamida ko'p yadroli va umumiy xotira multiprotsessorlarini
dasturlash mantiqiy yadrolarga qaraganda, ba'zi mantiqiy yadrolar ishlamay qoladi
va tizim to'liq foydalanilmaydi. Agar mantiqiy yadrolardan ko'proq iplar mavjud
bo'lsa, operatsion tizim bir xil mantiqiy yadrolarda ishlaydigan iplar orasida ko'p
vazifalarni qo'llaydi. Dasturni bajarish jarayonida operatsion tizim yuk balansini
amalga oshirishi mumkin, ya'ni barcha mantiqiy yadrolardan bir xilda
foydalanishga harakat qilib, iplarni bir mantiqiy yadrodan boshqasiga o'tkazishi
mumkin.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_5.png)
![Ko'p bosqichli dastur turli xil dasturlash tillarida, turli xil kutubxonalar va
ramkalar yordamida yozilishi mumkin. Masalan, UNIX-da deyarli har qanday
munosib dasturlash tilida pthreadlardan foydalanish mumkin, ammo natijada
olingan dastur kompilyator hal qilishi mumkin bo'lgan past darajadagi tafsilotlar
bilan to'ldirilgan va portativ emas. Shuning uchun, parallel dasturlarni yozishga
bag'ishlangan narsadan foydalanish yaxshiroqdir. Shunday narsalardan biri
OpenMP, umumiy xotira tizimlarida ishga tushiriladigan parallel dasturlarni yozish
uchun eng mos keladigan parallel dasturlash muhitidir. Bu boshqa dasturlash tili
emas, balki odatda mavjud tilga qo'shimcha hisoblanadi
OpenMP ning amaliy dasturlash interfeysi (API) to'plamidir. OpenMP
kompilyator direktivalari kompilyatorga manba kodidagi parallellik haqida
ma'lumot beradi va parallel kodni yaratish, ya'ni manba kodining ko'p oqimli
tarjimasi uchun ko'rsatmalar beradi. C/C++ da direktivalar har doim #pragmalar
sifatida ifodalanadi. Yordamchi funktsiyalar dasturchilarga dasturni bajarish
paytida parallelizmdan foydalanish va boshqarish imkonini beradi. Shell
o'zgaruvchilari kompilyatsiya qilingan dasturlarni ma'lum bir parallel tizimga
sozlash imkonini beradi.
OpenMP [omp] - umumiy xotira kompyuterlari uchun parallel dasturlarni
yaratish uchun sanoat standarti bo'lgan API. OpenMPning asosiy maqsadi-aylanish
yo'naltirilgan dasturlarni yozishni osonlashtirishdir.Bunday dasturlar tez-tez yuqori
samarali hisoblash uchun yaratiladi. Bundan tashqari, komponentlar OpenMP
tarkibiga SPMD, "master and workflow",quvur liniyasi kabi parallel usullarini
qo'llab-quvvatlash uchun kiritilgan.
OpenMP juda muvaffaqiyatli parallel dasturlash tiliga aylandi. U bozorga
kiradigan har bir xotira almashadigan kompyuterda mavjud. Bundan tashqari, Intel
yaqinda Klasterlarni qo'llab-quvvatlash uchun OpenMP versiyasini yaratdi.
OpenMP parallelizmin mavjud ketma-ketlik dasturi parallel holga kelgunicha asta-
sekin qo'shilgan dasturlash uslubini qo'llab-quvvatlaydi.Biroq,bu afzallik OpenMP
ning eng zaif nuqtasidir. Agar muvozanat asta-sekin qo'shilsa, dasturchi dasturni
keng miqyosda qayta qurish qila olmaydi, bu ko'pincha maksimal ishlash uchun
zarur bo'ladi.
OpenMP doimiy rivojlanayotgan standartdir. OpenMP Architecture Review
Board deb nomlangan sanoat guruhi ushbu tilga yangi kengaytmalar kiritish uchun
muntazam uchrashuvlar o'tkazadi. OpenMP ning keyingi versiyasi (3.0 versiyasi)
vazifa navbatini tashkil etish qobiliyatini o'z ichiga oladi. Bu esa, OpenMP-ga
yanada keng boshqaruv tuzilmalarini boshqarish va umumiy umumiy recursiv
algoritmlardan foydalanish imkonini beradi.
OpenMP texnologiyasi foydalanuvchi dasturning parallel va ketma-ket ijro
etilishi uchun dasturning bitta versiyasiga ega bo'lishini ta'minlashni maqsad
qiladi. Biroq, faqat parallel rejimda to'g'ri ishlashi yoki ketma-ket rejimda boshqa
natija beradigan dasturlarni yaratish mumkin. Bundan tashqari, yaxlitlash](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_6.png)
![xatolarining to'planishi tufayli turli xil ish zarrachalaridan foydalangan holda
hisoblash natijalari ayrim hollarda farq qilishimumkin.
Ushbu standart OpenMP ARB notijorat tashkiloti tomonidan ishlab
chiqilgan (Arxitektura tadqiqoti kengashi) [1], bu SMP-arxitektura va dasturiy
ta'minotni ishlab chiqaruvchi yirik kompaniyalarning vakillari hisoblanadi.
OpenMP FORTRAN va C / C ++ tillari bilan ishlashni qo'llab-quvvatlaydi. Fortran
tilining birinchi spetsifikatsiyasi oktyabr 1997-yilda va C/C++ tilining 1998 yil
oktyabrida paydo bo'lishi. Hozirgi vaqtda eng so'nggi rasmiy standart
spetsifikatsiya OpenMP[3] (2008 yil may oyida qabul qilingan).
OpenMP mexanizmlarini ishlatish uchun OpenMP derivatori bilan mos kalit
bilan kompilyatsiya qilishingiz kerak (masalan, icc / ifort -openmp derleyici kaliti,
gcc/gfortran-fopenmp,SunStudio-xopenmp,VisualC++-/openmp,PGI-mp).
Derleyici OpenMP direktivalarini sharhlaydi va parallel kod yaratadi. OpenMP-ni
qo'llamaydigan kompilyatorlardan foydalanilganda OpenMP direktivlari
qo'shimcha xabarlarsiz e'tiborsizqilinadi.
OpenMP yordamiga ega bo'lgan kompilyator, dasturning parallel versiyasi
uchun odatiy bo'lgan alohida bloklarni shartli ravishda kompilyatsiya qilish uchun
ishlatilishi mumkin bo'lgan _OPENMP so'lini belgilaydi. Bu so'l yyyym formatida
aniqlanadi, bu erda yyyy va mm - qo'llab-quvvatlanadigan OpenMP standarti qabul
qilingan yil va oy uchun raqamlar. Masalan, OpenMP 3.0 standartini qo'llab-
quvvatlaydigan derleyici 2008/05 da _OPENMP ni belgilaydi.
Derivatning OpenMP ning har qanday versiyasini qo'llab-quvvatlashini
tekshirish uchun, shartli derleme ko'rsatmalarini #i fdef yoki #i f ndef yozib olish
kifoya. C va Fortran dasturlarida shartli kompilyatsiya qilishning eng oddiy
ko rinishi quyidagi misolda keltirilgan:ʻ
#include <stdio.h>
int main(){
#if def _OPENMP
printf("OpenlVPis supported!\n");
#end if
}
OpenMP da parallelizatsiya dasturiy matnga maxsus ko'rsatmalar kiritilishi
va yordamchi funktsiyalarni chaqirish orqali aniq amalga oshiriladi. OpenMP dan
foydalanilganda, parallel dasturlashtirilgan SPMD (Single Program Multiple Data)
parallel dasturiy modeli qabul qilinadi, uning ichida bir xil kod barcha parallel
iplar uchun ishlatiladi.
OpenMP tuzilishi:
•Direktivlar;
•Funksiyalarkutubxonasi;
•Bir qatoro'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](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_7.png)
![texnologiyasidan foydalanish xususiyatlari 5.8.1-bandda keltirilgan. Eng umumiy
shaklida OpenMP direktivasining formati quyidagicha ifodalanishi mumkin:
#pragma omp <directive_name> [<parametr> [[,] <parametr>] ...]
Direktivning boshlang'ich qismi (#pragma omp) sobit bo'ladi, direktivaning
turi uning nomi (Direktiv_yeni) bilan belgilanadi, har bir direktiv o'zboshimchalik
bilan parametrlar soni bilan birga bo'lishi mumkin (ingliz tilida, OpenMP
direktivasining parametrlari atamalar jumlasidan foydalanadi).
2.2. OpenMP dasturini kompilyatsiya qilish va ishga tushirish
OpenMP API elementlarining har xil turlarini tasvirlash uchun biz 3.1 rasmda
oddiy dasturdan boshlaymiz.
3.1rasm: "Salom dunyo" dasturi, OpenMP uslubi.
Ushbu dastur salomni birinchi bo'lib chiqaradigan bitta MP sifatida boshlanadi.
Amalga oshirish op parallel direktivasiga yetgandan so'ng, bir nechta qo'shimcha
MP lar mavjud .
Ko'p oqimli dasturlarni yozish uchun OpenMP dan foydalanish
OpenMP: parallel hududlar
Dastur ichidagi parallel mintaqa sifatida belgilanadi
#pragma omp parallel [[[,] bandi] ...]
tuzilgan blok
Iplar jamoasi hosil bo'ladi va parallel direktivasiga duch kelgan ip bu
jamoaning asosiy ipiga aylanadi. Strukturaviy blok jamoadagi har bir ip tomonidan
bajariladi. Bu yuqorida bitta kirish va pastki qismida bitta chiqish bo'lgan bitta
bayonot, ehtimol murakkab yoki boshqa OpenMP konstruktsiyasi. Oxirida yashirin
to'siq mavjud, ya'ni barcha oqimlar tugagandan keyingina ushbu direktiv
tomonidan yaratilgan iplar tugatiladi va faqat master bajarishni davom ettiradi.
Parallel soha, masalan, bandlar ro'yxati bilan aniqlanishi mumkin](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_8.png)
![num_threads(integer) tizimli blokni parallel ravishda bajarishikerak bo'lgan iplar
sonini belgilaydi.
Omp parallel uchun qo'llaniladigan ba'zi boshqa bandlar keyinroq kiritiladi.
mavjud bilan birga yaratilgan. Barcha iplar, dastlabki ip va yangi yaratilgan iplar
birgalikda iplar jamoasini tashkil qiladi. Yangi tashkil etilgan iplar jamoasidagi har
bir ip direktivadan so'ng darhol bayonotni bajaradi: bu misolda u OpenMP
funksiyasini omp_get_thread_num chaqirish orqali olingan yagona ip raqamini
chop etadi. Barcha ish zarralari buni bajargandan so'ng, omp parallel direktivasi
tomonidan yaratilgan ish zarrachalari tugatiladi va dastur bitta yangi satr belgisini
chiqaradigan yakka tartibdagi ish zarrasi sifatida davom etadi va dasturni qaytarish
0 ni bajarish orqali tugatadi.
GNU GCC C/C++ kompilyatoridan foydalangan holda Listing 3.1 da
ko'rsatilgan dasturni kompilyatsiya qilish va ishga tushirish uchun -fopenmp
buyruq qatoridan quyidagi tarzda foydalaning:
$ gcc -fopenmp -o salom-dunyo salom-dunyo.c
$ envOMP_NUM_THREADS=8 ./salom-dunyo
(Linux, macOS va MS Windows tizimlarida OpenMP ni qanday ishlashga oid
ko rsatmalar uchun A ilovasiga qarang.)ʻ
Ushbu dasturda mavzular soni aniq ko'rsatilmagan. Demak, iplar soni
OMP_NUM_THREADS qobiq o'zgaruvchisining qiymatiga mos keladi.
OMP_NUM_THREADS qiymati 8 ga o'rnatilsa, dastur chop etilishi mumkin
Salom, dunyo: 2 5 1 7 6 0 3 4
OMP_NUM_THREADS o'rnatilmagan bo'lsa, dastur ishlayotgan mantiqiy
yadrolar soniga mos keladigan iplar sonini o'rnatadi. Masalan, 2 yadroli va giper-
tortishuvli protsessorda 4 ta ipdan foydalaniladi va 0 dan 3 gacha bo'lgan raqamlar
almashinuvi chop etiladi.
OpenMP yordamida ko'p yadroli va umumiy xotira multiprotsessorlarini dasturlash
OpenMP: iplar sonini boshqarish
Dastur tuzilgandan so'ng, iplar sonini quyidagi qobiq o'zgaruvchilari yordamida
boshqarish mumkin:
OMP_NUM_THREADS vergul bilan ajratilgan-musbat-ro'yxati-
butun sonlar OMP_THREAD_LIMIT musbat-butun son
Birinchisi, dastur foydalanishi kerak bo'lgan ish zarralari sonini belgilaydi (yoki
parallel bajarishning har bir ichki o'rnatilgan darajasida qancha ip ishlatilishi
kerak). Ikkinchisi, dastur foydalanishi mumkin bo'lgan iplar sonini cheklaydi (va
OMP_NUM_THREADS dan ustunlikka ega).](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_9.png)
![Dastur ichida iplar sonini boshqarish uchun quyidagi funksiyalardan foydalanish
mumkin:
void omp_set_num_threads() iplar sonini aniq belgilamasdan keyingi parallel
hududlarda ishlatiladigan iplar sonini belgilaydi;
int omp_get_num_threads() eng ichki o'rab turgan parallel mintaqaga tegishli joriy
jamoadagi iplar sonini qaytaradi;
int omp_get_max_threads() keyingi parallel hududlar uchun mavjud bo'lgan
iplarning maksimal sonini qaytaradi;
int omp_get_thread_num() joriy mavzular jamoasi ichida chaqiruvchi ipning ip
raqamini qaytaradi.
almashtirish bosilgan yagona standart chiqish uchun raqobat. Shunday qilib, agar
dastur bir necha marta ishga tushirilsa, har safar ip raqamlarining boshqa
almashtirilishi chop etilishi mumkin. Urunib ko'r.
2.3. OpenMP dasturini monitoring qilish
Parallel dasturlarni loyihalash, ishlab chiqish jarayonida parallel algoritmlar va
ularni qanday qilib yaxshiroq kodlash haqida fikr yuritish kamdan-kam hollarda
kifoya qiladi. OpenMP dasturi aslida ko'p yadroli tizimda qanday ishlashini
tushunish uchun dasturning ishlashini kuzatish va o'lchash yaxshiroqdir. Bundan
tashqari, bu sizning dasturingiz qancha yadroda ishlashini bilishning eng oddiy va
eng ishonchli usuli.
Keling, illyustratsiya sifatida 3.2 rasmdagi dasturdan foydalanamiz. Dastur bir
nechta iplarni ishga tushiradi, ularning har biri sodda va vaqt talab qiluvchi
rekursiv algoritm yordamida hisoblangan bitta Fibonachchi raqamini chop etadi.
Ko'pgina operatsion tizimlarda dasturning ishlash vaqtini o'lchash odatda oson.
Masalan, yuqoridagi dasturni kompilyatsiya qilish va uni Linuxda time utility
yordamida ishga tushirish
$ gcc -fopenmp -O2 -o fibonacci fibonacci.c
Ba'zi Fibonachchi sonilarini hisoblash.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_10.png)
![$ env OMP_NUM_THREADS=8 marta ./fibonachchi
ba'zi Fibonachchi raqamlarini beradi, so'ngra oxirgi qator sifatida dasturning
ishlash vaqti haqida ma'lumot beradi:
106,46 haqiqiy 298.45 foydalanuvchi 0,29 tizim
(Linux, macOS va MS Windows-da vaqtni o'lchash va dasturning bajarilishini
nazorat qilish bo'yicha ko'rsatmalar uchun A ilovasiga qarang.)
Foydalanuvchi va tizim vaqti barcha mantiqiy yadrolar birgalikda dasturni
bajarish uchun sarflagan umumiy vaqtga teng. Yuqoridagi misolda foydalanuvchi
va tizim vaqtining yig'indisi real vaqtdan, ya'ni o'tgan yoki devor soati vaqtidan
kattaroqdir. Demak, dasturning turli qismlari bir vaqtning o'zida bir nechta
mantiqiy yadrolarda ishlagan bo'lishi kerak.
Aksariyat operatsion tizimlar boshqa ko'rsatkichlar qatorida alohida yadrolar
tomonidan bajarilgan hisoblash miqdorini ko'rsatadigan tizim monitorlarini taqdim
etadi. Bu OpenMP dasturini ishlab chiqishda juda ma'lumotli bo'lishi mumkin,
lekin ehtiyot bo'ling, chunki ko'pchilik tizim monitorlari individual mantiqiy
yadrodagi umumiy yukni, ya'ni mantiqiy yadroda ishlaydigan barcha dasturlarning
yukini xabar qiladi.
Ro'yxat 3.2 da ko'rsatilgan dastur boshqa holatda bo'sh turgan tizimda
ishlayotgan vaqtda tizim monitoridan foydalanib, dasturni bajarish jarayonida
individual mantiqiy yadrolarga yukni kuzatish mumkin. Mavzular birin-ketin
tugashi bilan, bajarilish davom etar ekan, individual mantiqiy yadrolarga yuk
qanday tushishini kuzatish mumkin. Amalga oshirishning oxiriga kelib, faqat bitta
ish zarracha qolganda, operatsion tizim vaqti-vaqti bilan oxirgi ipni bir mantiqiy
yadrodan ikkinchisiga qanday o'tkazishini ko'rish mumkin.
2.4. Parallel takrorlash natijalarini birlashtirish](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_11.png)
![B iz pa rallelashtirishni misolidan boshlaymiz : chop etishni o ' ylab ko ' ring
1 dan ba ' zi bir foydalanuvchi tomonidan belgilangan qiymatgacha bo ' lgan barcha
butun sonlarni , aytaylik .
Parallel dastur 3.3-rasmda ko'rsatilgan.
3.3-rasm : 1 dan maksimalgacha barcha butun sonlarni alohida tartibda chop etish.
3.3-rasm dagi dastur bitta boshlang'ich t ip sifatida boshlanadi. Maksimal qiymat
max o'zgaruvchida o'qiladi va saqlanadi. Keyin ijro eng muhim qismga etib boradi
dasturning, ya'ni raqamlarni chop etadigan for tsikli (har bir oldin uni chop
etadigan ip raqami). Lekin omp parallel uchun 6-satrdagi direktiv for tsikli parallel
ravishda bajarilishi kerakligini bildiradi, ya'ni uning iteratsiyalar o'rtasida bo'linishi
va barchasida ishlaydigan bir nechta iplar tomonidan bajarilishi kerak mavjud
qayta ishlash birliklari. Shunday qilib, har biriga bir nechta qul iplari yaratiladi
har bir mavjud ishlov berish birligi yoki aniq ko'rsatilgandek (boshlang'ichdan
minus ipishlaydi).
• parallel for tsiklining iteratsiyalari har bir iteratsiya bo'lgan iplar orasida
bo'linadi .
• barcha iteratsiyalar bajarilgandan so'ng, jamoadagi barcha iplar
sinxronlashtiriladi .
oxiridagi yashirin to'siqda va barcha tobe iplar mavjud tugatildi. Nihoyat, bajarish
ketma-ket davom etadi va asosiy ip ni tugatadi qaytish 0 ni bajar ish orqali
dastur. 3.3-rasmda gi dasturning bajarilishi 3.5-rasmda tasvirlangan. 3.3
ro'yxatdagi dastur bo'yicha bir nechta kuzatuvlarni amalga oshirish kerak (va
umuman parallel for döngülerinin bajarilishi). Birinchidan, 3.3 ro'yxatidagi dastur
bunday qilmaydi iteratsiyalar iplar orasida qanday taqsimlanishi kerakligini
aniqlang (aniq rejalashtirish sifatida iteratsiyalar haqida keyinroq tavsiflanadi).
Bunday hollarda, OpenMP ilovalarining ko'pchiligi butun iteratsiya bo'shlig'ini
bo'laklarga bo'ling, bunda barcha iteratsiyalar subintervalini o'z ichiga olgan har bir
bo'lak bitta ip tomonidan bajariladi. Biroq, bunday bo'lmasligi kerakligiga e'tibor
bering , Agar aniqlanmagan holda qoldirilgan bo'lsa, bu ma'lum bir OpenMP
dasturiga bog'liq xohlaganicha qiling.
OpenMP:parallel halqalar
Paralleluchuntsikllar sifatida e'lon qilinganligi uchun #pragma omp [band [[ , ]
bandi]. . . ]for-loops. Parallel mintaqada ishlatilishi kerak bo'lgan ushbu direktiv
bir yoki bir nechta ichki o'rnatilgan takrorlashlarni bildiradiuchunhalqalar parallel
hududdagi iplar jamoasi tomonidan bajariladi (uchun parallela yozish uchun](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_12.png)
![qisqartma hisoblanadiuchun butun parallel mintaqani o'z ichiga olgan halqa). Har
biriuchunorasida halqa for-looplar bilan bog'liquchun ompdirektivada bo'lishi
kerak Kanonik shakl .
C da bu shuni anglatadi
• loop o'zgaruvchisi jamoadagi har bir ish zarrachasi uchun shaxsiy qilib qo'yiladi
va (belgisiz) butun son yoki ko'rsatkich bo'lishi kerak,
• loop o'zgaruvchisi har qanday iteratsiyani bajarishda o'zgartirilmasligi kerak;
• dagi holatuchunloop oddiy munosabat ifodasi bo'lishi kerak,
• dagi o'sishuchunloop doimiy qo'shimcha ifoda orqali o'zgarishlarni ko'rsatishi
kerak;
• Barcha bog'langan halqalarning iteratsiyalar soni eng tashqisi boshlanishidan
oldin ma'lum bo'lishi kerak.
A bandi masalan, parallel halqani batafsil tavsiflovchi spetsifikatsiya
• qulash ( butun son )eng tashqarida qancha ekanligini aniqlaydiuchunning
halqalari for-looplar
direktiva bilan bog'langan va shuning uchun birga parallellashtirilgan;
• hozirning oxirida yashirin to'siqni va shu tariqa sinxronlashni yo'q qiladi
for-looplar .Qo'llaniladigan ba'zi boshqa bandlaruchun parallelkeyinroq
tanishtiriladi.
Ikkinchidan, takrorlash maydoni bo'laklarga bo'lingandan so'ng, alohida bo'lakning
barcha takrorlashlari ke tma-ket, birin-ketin bajariladi v a uchinchidan,
3.5-rasm: 3.3 ro'yxatda ko'rsatilganidek, butun sonlarni chop etish dasturining
bajarilishi.
OpenMP:ma'lumotlarni almashish
Ma'lumot almashish bo'yicha har xil bandlardan foydalanish mumkin
parallel Ma'lumotlarning iplar o'rtasida taqsimlanishini va qanday taqsimlanishini
ko'rsatish uchun direktiv:
• umumiy( ro'yxati ) dagi har bir o'zgaruvchi ekanligini bildiradi ro'yxati jamoadagi
barcha ish zarrachalari tomonidan baham ko'riladi, ya'ni barcha ish zarrachalari
o'zgaruvchining bir xil nusxasini baham ko'radi;
• shaxsiy ( ro'yxati )dagi har bir o'zgaruvchi ekanligini bildiradi ro'yxati jamoadagi
har bir mavzu uchun shaxsiydir, ya'ni har bir ip o'zgaruvchining o'z mahalliy
nusxasiga ega;
• birinchi xususiy( ro'yxati )kabidirxususiylekin sanab o'tilgan har bir o'zgaruvchi
parallel mintaqaga duch kelganda o'z ichiga olgan qiymat bilan ishga tushiriladi;
• oxirgi xususiy( ro'yxati )kabidirxususiylekin parallel mintaqa tugagach, ro'yxatga](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_13.png)
![olingan har bir o'zgaruvchi parallel mintaqadagi yakuniy qiymati bilan yangilanadi.
Ushbu bandlarda sanab o'tilgan hech bir o'zgaruvchi boshqa o'zgaruvchining bir
qismi bo'lishi mumkin emas. Agar boshqacha ko'rsatilmagan bo'lsa,
• Parallel konstruksiyadan tashqarida e'lon qilingan avtomatik o'zgaruvchilar
taqsimlanadi,
• Parallel konstruktsiyada e'lon qilingan avtomatik o'zgaruvchilar shaxsiydir,
• statik va dinamik ravishda ajratilgan o'zgaruvchilar umumiydir. Poyga shartlari,
masalan, turli xil hayot vaqtlari natijasidaoxirgi xususiyo'zgaruvchilar yoki
umumiy o'zgaruvchilarni yangilash, keyinroq tasvirlangan OpenMP
konstruksiyalari yordamida aniq oldini olish kerak.
Parallel uchun loop o'zgaruvchi har bir ipda bir nechta takroriy takrorlashlar
amalga oshiriladi, chunki har bir ipning o'z nusxasi bo'lishi kerak.i. Boshqa
tomondan, o'zgaruvchan maks oldin o'rnatilganidek barcha mavzular bilan
bo'lishish mumkin va faqat parallel mintaqada o'qiladi. Biroq, e'tibor berish kerak
bo'lgan eng muhim tafsilot shundaki, 1 dan barcha butun sonlarni chop etishning
umumiy vazifasi. maks hech qanday alohida tartibda bo'linmaydi N mutlaqo
mustaqil ning kichik vazifalari deyarli bir xil o'lchamda . Bunday hollarda
parallellashtirish ahamiyatsiz bo'ladi. Standart chiqishga kirish ketma-
ketlashtirilganligi sababli, butun sonlarni chop etish ko'rinadigan darajada parallel
bo'lmaydi. Shunday qilib, haqiqiy parallel hisoblash misoli quyida keltirilgan.
Vektor qo'shishni ko'rib chiqing. Uni amalga oshiradigan funktsiya 3.4
ro'yxatda ko'rsatilgan. Uni sinab ko'rish dasturini yozing. Vektor qo'shish umuman
murakkab hisoblash emasligi sababli, uni o'lchash va kuzatish uchun uzun
vektorlardan foydalaning va ko'p sonli vektor qo'shimchalarini bajaring.
Funktsiya tuzilishivectAddListing 3.3 da ko'rsatilgan butun sonlarni chop etish
dasturiga juda o'xshaydi: oddiy paralleluchunloop, bunda bir iteratsiya natijasi
boshqa tsikllar tomonidan ishlab chiqarilgan natijalardan butunlay mustaqil bo'ladi.
Bundan tashqari, turli iteratsiyalar massivning turli elementlariga kirishadi, ya'ni
ular butunlay boshqa xotira joylaridan o'qiydilar va yozadilar. Shunday qilib, hech
qanday poyga sharoitlari yuzaga kelishi mumkin emas.
Listing 3.4: Parallel vektor qo'shish.
Endi 1 dan maksimalgacha bo'lgan barcha juft sonlarni alohida chop etishni
o'ylab ko'ring buyurtma, ikkita ichki o'rnatilgan for looplarini talab qiladigan narsa.
Ikkala ichki o'rnatilgan barcha iteratsiyalar kabi tsikllar mustaqil bo'lib, ikkala
tsiklni parallellashtirish mumkin, ikkinchisi esa yo'q. Bu direktiv uchun omp
parallelni mo'ljallangan halqa oldiga qo'yish orqali erishiladi parallellashtirish
uchun. Masalan, tashqi for tsikli parallellashtirilgan dastur 3.5 ro'yxatda
ko'rsatilgan.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_14.png)
![3.5-rasm: 1 dan butun son juftlarini chop etish maks eng tashqisini parallellashtirish
orqali alohida tartibdauchunfaqat tsikl. 1 dan butun sonlar juftligini faraz
qiling maks kvadrat jadval shaklida joylashtirilgan. Agar
4 ta ip ishlatiladi va maks =6, parallellashtirilgan tashqi har bir iteratsiyauchun3.6
(a)-rasmda ko'rsatilganidek, jadvalning bir nechta satrini ko'chadan chiqaradi.
E'tibor bering, birinchi ikkita ipga boshqa ikkita ipga qaraganda ikki baravar ko'p
ish yuklanadi, ular 4 ta mantiqiy yadroda ishga tushirilsa, birinchi ikkitasi ham
tugaguncha bo'sh turishga to'g'ri keladi. Biroq, ichki o'rnatilgan halqalarni
parallellashtirishning yana ikkita usuli mavjud. Birinchidan, ikki
uyaliuchuniboralar yordamida parallel holga keltirish uchun siqilish mumkin
qulash (2)3.6 ro'yxatda ko'rsatilganidek.
3.6 -rasm : 1 dan maksimalgacha butun son juftlarini alohida tartibda chop etish
ikkala for tsiklini birga parallellashtirish orqali.
3.6-rasm: 1 dan 6 gacha bo'lgan barcha juft sonlar 4 ta ip yordamida chop etilishi
kerak bo'lganda muammoli domenning bo'linishi: (a) faqat tashqi bo'lsa.uchunsikl
parallellashtiriladi, (b) ifbothuchunilmoqlar birgalikda parallellashtiriladi va (c)
agar ikkalasi hamuchunaylanalar alohida parallellashtiriladi. Bog‘lovchi
tufayliqulash (2)6-qatorda kompilyator ikkita ichki joyni birlashtiradi halqalarni
biriga aylantiradi va natijada olingan bitta pastadirni parallel qiladi. Tashqiuchun1
dan looprunning maks va maks ichkiuchun1 dan 1 gacha bo'lgan sikllar maks
shuningdek, 1 dan gacha bo'lgan bitta tsikl bilan almashtiriladi maks 2. Hammasi
maks 2 iteratsiyalar birgalikda mavjud iplar o'rtasida bo'linadi. Faqat bitta tsikl
parallellashtirilganligi sababli, ya'ni ikkala ichki o'rnatilganning takrorlanishini o'z
ichiga olganuchun3.6 ro'yxatdagi dasturning bajarilishi hali ham 3.5-rasmda](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_15.png)
![ko'rsatilgan sxema bo'yicha. Masalan, agar maks =6, 3.6 (b)-rasmda
ko'rsatilganidek, yiqilgan bitta halqaning barcha 36 iteratsiyasi 4 ta ipga bo'lingan.
3.5 ro'yxatdagi dastur bilan solishtirganda, ish iplar o'rtasida teng taqsimlangan.
Ichimli halqalarni parallellashtirishning yana bir usuli har birini
parallellashtirishdir. 3.7 da ko'rsatilganidek, alohida-alohida.
3.7-rasm: 1 dan maksimalgacha butun son juftlarini har bir ichkariga
parallellashtirish orqali alohida tartibda chop etishuchun3.7 ro yxatdaʻ
ko rsatilganidek, bir vaqtning o zida faol bo lganidek, bir parallel hududning
ʻ ʻ ʻ
ikkinchisida bir vaqtning o zida faol bo lishi uchun avval parallel hududlarni
ʻ ʻ
joylashtirishni yoqish kerak.
XULOSA
Kurs ishi davomida parallel dasturlash texnologiyalari, xususan OpenMP
o'rganildi. OpenMP bilan ishlash usullari o'rganildi, Open MP dan foydalanib ko’p
yadroli va umumiy xotirali dasturlash o'rganildi, OpenMPni qo'llab-
quvvatlaydigan kompilyatorlar. Texnologiyani o'rganish jarayonida olingan
bilimlar amaliy muammolarni hal qilishda amaliyotda qo’llash mumkun.
Bu yerda OpenMP texnologiyasini o rganish, OpenMP texnologiyasidan
ʻ
foydalangan holda parallellashtirilgan ketma-ket dastur, dastur bilan o zaro ishlash
ʻ
uchun foydalanuvchi interfeysini yaratish, OpenMP dasturini kompilyatsiya qilish
va ishga tushurish, Open MP dasturini monitoring qilish bosqichlarini ko’rib
chiqdik.](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_16.png)
![FOYDALANGAN ADABIYOTLAR
1. MPICH: High-Performance Portable MPI. https://www.mpich.org/. Accessed 28
Dec2017
2. Open MPI: A High Performance Message Passing Library. https://www.open-
mpi.org/.Accessed28Dec2017
3. Foster, I.: Designing and Building Parallel Programs: Concepts and Tools for
Parallel Software Engineering. Addison-Wesley Longman Publishing Co., Inc.,
Boston,MA,USA(1995)
4. Gabriel, E., Fagg, G.E., Bosilca, G., Angskun, T., Dongarra, J.J., Squyres, J.M.,
Sahay, V., Kambadur, P., Barrett, B., Lumsdaine, A., Castain, R.H., Daniel, D.J.,
Graham, R.L., Woodall, T.S.: Open MPI: Goals, concept, and design of a next
generation MPI implementation. In: Proceedings, 11th European PVM/MPI Users’
Group Meeting, pp. 97–104. Budapest, Hungary (2004) Addison-Wesley, Reading,
MA,USA(1979)
5. Jason Long: Hands On OpenCL: An open source two-day lecture course for
teaching and learning OpenCL. https://handsonopencl.github.io/ (2018). Accessed
25Jun2018
6. Khronos Group: OpenCL: The open standard for parallel programming of
heterogeneous systems. https://www.khronos.org/opencl/f (2000–2018). Accessed
25Jun2018
7. MPI Forum: MPI: A message-passing interface standard (Version 3.1). Tech.
rep., Knoxville,TN,USA(2015)
8. Munshi, A., Gaster, B., Mattson, T.G., Fung, J., Ginsburg, D.: OpenCL
Programming Guide, 1st edn. Addison-Wesley Professional (2011)
9. OpenMP Architecture Review Board: OpenMP Application Programming](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_17.png)
![Interface, Version 4.5, November 2015.
http://www.openmp.org/wp-content/uploads/openmp-4.5.pdf (1997–2015).
Accessed 18 Dec 2017](/data/documents/da529c8f-2d2a-40d9-960b-ce03c25e5d4e/page_18.png)
OpenMP dasturi Reja 1. KIRISH 2. ASOSIY QISM 2.1. Umumiy xotira dasturlash modeli 2.2. OpenMP dasturini kompilyatsiya qilish va ishga tushiris 2.3. OpenMP dasturini monitoring qilish 2.4. Parallel takrorlash natijalarini birlashtirish 3. XULOSA 4. FOYDALANILGAN ADABIYOTLAR
KIRISH Zamonaviy texnologiyalar parallel texnologiyalar bir-biridan dasturlash tillarida emas, balki parallel tizimlarni qurishning arxitekturaviy yondashuvlarida ham farqlanadi. Masalan, ba'zi texnologiyalar bir nechta kompyuterlar asosida parallel dasturlarni qurishni taklif qilsa, boshqalari bir nechta protsessorli bitta mashinada ishlashga imkon beradi. Uzoq vaqt davomida bir nechta kompyuterlarga asoslangan tizimlar ishlatilgan, ular taqsimlangan hisoblash tizimlariga tegishli. Tarqalgan hisoblashning eng yorqin misoli MPI (Message Passing Interface (xabarni uzatish interfeysi)) parallel dasturlashda ma'lumotlar almashish interfeysi uchun eng keng tarqalgan standart bo'lib, ko'plab kompyuter platformalari uchun ilovalar mavjud. MPI dasturchiga mashina arxitekturasidan (birgalikda/alohida xotiraga ega bir protsessorli/ko‘p protsessorli), filiallarning nisbiy joylashuvidan (bir xil protsessorda yoki boshqa protsessorda) qat’iy nazar, parallel dastur doirasida filiallarning o‘zaro ta’sirining yagona mexanizmini taqdim etadi. birlar).[8] Bitta kompyuterda ishlash uchun parallel dasturlash tizimlari o'z rivojlanishini nisbatan yaqinda boshladi. Darhaqiqat, ilovalarni ishlab chiqishda ishlab chiquvchi qo'l ostidagi resurslar, ya'ni bir nechta kompyuter yadrolaridan foydalanish bilan ishlashni qanday oshirish kerakligi haqidagi savolga duch keladi va Open MP API dasturchiga yordam beradi. 1997 yilda ishlab chiqilgan OpenMP texnologiyasi umumiy xotiraga ega bo'lgan ko'p protsessorli hisoblash tizimlarining imkoniyatlaridan maksimal darajada samarali foydalanish imkonini beradi, bu esa protsessorlararo xabarlarni ko'p vaqt talab qilmasdan parallel oqimlar uchun umumiy ma'lumotlardan foydalanishni ta'minlaydi.
2.1. Umumiy xotira dasturlash modeli Dasturchi nuqtai nazaridan, umumiy xotira multiprotsessorlari modeli 1- rasmda ko'rsatilganidek, bitta asosiy xotiraga ega bo'lgan bir qancha mustaqil protsessorlarni o'z ichiga oladi. Har bir protsessor to'g'ridan-to'g'ri asosiy xotiradagi ma'lumotlarning istalgan joyiga kirishi mumkin va istalgan vaqtda turli protsessorlar turli ma'lumotlar bo'yicha turli ko'rsatmalarni bajarishi mumkin, chunki har bir protsessor o'zining boshqaruv bloki tomonidan boshqariladi. Flinning parallel tizimlar taksonomiyasidan foydalangan holda, bu model MIMD, ya'ni bir nechta ko'rsatmalar bir nechta ma'lumotlar deb ataladi. 1-rasm: Umumiy xotirali multiprotsessor modeli. Mumkin bo'lgan maksimal tezlikka erishish uchun parallel tizimdan to'liq foydalanish muhim ahamiyatga ega bo'ladi. OpenMP yordamida ko'p yadroli va umumiy xotira multiprotsessorlarini dasturlash. Oddiy va umumiy bo'lishi uchun asosiy xotiraning ichki tuzilishi ushbu modeldan tashqarida qoldirilgan. Oddiy va umumiy modeldan foydalanish, shuningdek, parallel tizim spetsifikatsiyalari ma'lum bo'lganidan keyin ma'lum bir tizim uchun optimallashtirilishi mumkin bo'lgan portativ dasturlarni loyihalash va amalga oshirishni soddalashtiradi. Ko'pgina zamonaviy protsessorlar ko'p yadroli protsessorlardir va shuning uchun ular yadro deb ataladigan bir nechta mustaqil hisoblash bloklaridan iborat. Bundan tashqari, ushbu protsessorlar (bir vaqtning o'zida) multithreading (SMT) ni qo'llab-quvvatlaydi, shuning uchun har bir yadro (deyarli) bir vaqtning o'zida iplar deb ataladigan bir nechta mustaqil ko'rsatmalar oqimini bajarishi mumkin. Dasturchi uchun har bir protsessor ichidagi har bir yadro bir nechta mantiqiy yadro vazifasini bajaradi, ularning har biri o'z dasturini yoki dastur ichidagi ipni mustaqil ravishda ishga tushirishga qodir.
Bugungi kunda mobil, ish stoli va server protsessorlari odatda 2 dan 24 gacha yadrolarni o'z ichiga oladi va ko'p ish zarralarini qo'llab-quvvatlash bilan ular bir vaqtning o'zida 4 dan 48 tagacha oqimlarni ishga tushirishlari mumkin. Misol uchun, ikki yadroli mobil Intel i7 protsessori giper-threading (Intel's SMT) 2 (jismoniy) yadrodan iborat bo'lib, 4 ta mantiqiy yadroni ta'minlaydi. Xuddi shunday, 3.2-rasmda ko'rsatilganidek, to'rt yadroli Intel Xeon protsessori giper- threading bilan 8 ta mantiqiy yadroni va ikkita shunday protsessorli tizim 16 ta mantiqiy yadroni ta'minlaydi. Agar avtobus yoki kesh kabi ma'lum resurslardan umumiy foydalanish bir chetga surilsa, har bir mantiqiy yadro o'z ish zarrachasini mustaqil ravishda bajarishi mumkin. Jismoniy amalga oshirishdan qatiy nazar, dasturchi bunday tizimda 3.1-rasmda ko'rsatilganidek, har biri individual protsessor sifatida ishlaydigan 16 ta mantiqiy yadroni o'z ichiga oladi, bu erda n = 16. 3.2- rasm : Bir vaqtning o ' zida ko ' p trithreadingni qo ' llab - quvvatlaydigan ikkita to ' rt yadroli protsessorli parallel tizim bir xil xotiraga ulangan 16 ta mantiqiy yadroni o ' z ichiga oladi . Ko ' p yadroli protsessorlardan tashqari , o ' nlab yoki yuzlab jismoniy yadrolarni o ' z ichiga olgan ko ' p yadroli protsessorlar ham mavjud . Masalan , Intel Xeon Phi bir vaqtning o ' zida 240 dan 288 tagacha ipni ishga tushirishga qodir 60 dan 72 gacha jismoniy yadrolarni ta ' minlaydi . Zamonaviy tizimlarning turli protsessorlar yoki ( mantiqiy ) yadrolar yordamida bir vaqtning o ' zida bir nechta ish zarralarini bajarish qobiliyati qimmatga tushadi . Alohida iplar asosiy xotiradagi istalgan xotira joyiga kirishi va ko ' rsatmalar oqimlarini mustaqil ravishda bajarishi uchun poyga holatiga olib kelishi mumkin , ya ' ni natija asosiy xotiraning bir xil joyiga o ' qish va yozishning aniq vaqtiga bog ' liq bo ' lgan vaziyatga olib kelishi mumkin . Masalan , ikkita ip bir xil xotira joyida saqlangan qiymatni biri 1 ga , ikkinchisi esa oshirishi kerak deb faraz qilaylik . Har bir ip qiymatni o ' qiydi , uni oshiradi va uni qayta yozadi . Agar ushbu uchta ko ' rsatma birinchi navbatda bitta ip tomonidan , keyin esa ikkinchisi
tomonidan bajarilsa , to ' g ' ri natija chiqariladi . Ammo iplar ko ' rsatmalarni mustaqil ravishda bajaradiganligi sababli , har bir ip tomonidan bajariladigan ushbu uchta ko ' rsatmalarning ketma - ketligi 3.3- rasmda ko ' rsatilganidek , vaqt o ' tishi bilan bir - biriga mos kelishi mumkin . Bunday vaziyatlarda natija ham noto ' g ' ri , ham aniqlanmagan : har ikkala holatda ham xotiradagi qiymat 1 yoki 2 ga oshiriladi , lekin 1 va 2 ga emas . 3.3- rasm : Ikki ip asosiy xotirada bir xil joyda qiymatni oshirishga harakat qilganda poyga holatining ikkita misoli . Poyga holatini oldini olish uchun asosiy xotiradagi umumiy manzilga eksklyuziv kirish yordamida qulflash yoki o ' qish - o ' zgartirish - yozish ko ' rsatmalari yordamida atomik kirish kabi mexanizmlar yordamida ta ' minlanishi kerak . Agar qulflash ishlatilsa , har bir ip o ' zgartirishdan oldin umumiy xotira joyiga kirishni bloklashi va 3.4- rasmda ko ' rsatilganidek , keyin uni qulfdan chiqarishi kerak . Agar ip boshqa ip allaqachon qulflangan narsani bloklashga urinsa , u boshqa ip uni qulfdan chiqarguncha kutishi kerak . Ushbu yondashuv bitta ipni kutishga majbur qiladi , lekin to ' g ' ri natijani kafolatlaydi . 3.4-rasm: Qulflash yordamida 3.3-rasmda ko'rsatilganidek, poyga sharoitlarini oldini olish. OpenMP yordamida ko'p yadroli va umumiy xotira multiprotsessorlarini dasturlash mantiqiy yadrolarga qaraganda, ba'zi mantiqiy yadrolar ishlamay qoladi va tizim to'liq foydalanilmaydi. Agar mantiqiy yadrolardan ko'proq iplar mavjud bo'lsa, operatsion tizim bir xil mantiqiy yadrolarda ishlaydigan iplar orasida ko'p vazifalarni qo'llaydi. Dasturni bajarish jarayonida operatsion tizim yuk balansini amalga oshirishi mumkin, ya'ni barcha mantiqiy yadrolardan bir xilda foydalanishga harakat qilib, iplarni bir mantiqiy yadrodan boshqasiga o'tkazishi mumkin.