logo

OpenMPga kirish

Загружено в:

10.08.2023

Скачано:

0

Размер:

973.01953125 KB
OpenMPga kirish                 OpenMP imkoniyatlari

OpenMP (OpenMulti-Processing) C, C++ va Fortran dasturlarini 
parallellashtirish uchun ochiq standartdir. Ko'p protsessorli, umumiy 
xotira tizimlarida ko'p bosqichli ilovalarni dasturlash uchun 
mo'ljallangan kompilyator direktivalari, kutubxona protseduralari va 
muhit o'zgaruvchilari to'plamining tavsifini beradi.

OpenMP interfeysi umumiy xotira modelida kengaytiriladigan SMP 
tizimlarida (SSMP, ccNUMA va boshqalar) dasturlash uchun standart 
sifatida ishlab chiqilgan.

OpenMP standarti kompilyator direktivalari, protseduralari va 
o'zgaruvchilari to'plami uchun spetsifikatsiyalarni o'z ichiga oladi.

C, C++ va Fortran dasturlarini parallellashtirish uchun ochiq standart

Yuqori samarali hisoblash (HPC High Performance Computing ) 
sohasida juda muhim.

Kompilyator qo'llab-quvvatlashini talab qiladi.

Ketma-ket va parallel sohalar bir dasturda.

Inkremental parallelizm(tsikllar).                 OpenMP  afzalliklari  

1.   “ Inkrementall  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 
ichiga   OpenMP direktivalarini qo'shadi.

2. Shu bilan birga, OpenMP juda  moslashuvchan 
mexanizm bo'lib  , ishlab chiquvchiga parallel dasturning 
xatti-harakatlari ustidan katta nazoratni ta'minlaydi.

3.  Bitta protsessorli platformadagi OpenMP dasturi 
ketma-ket  dastur  sifatida ishlatilishi mumkin , ya'ni. 
ketma-ket va parallel versiyalarni qo'llab-quvvatlashga 
hojat yo'q. OpenMP direktivalari ketma-ket kompilyator 
tomonidan oddiygina e'tiborga olinmaydi  .                 OpenMP  ning maqsadi  

Standartlashtirish :

Umumiy xotiraga ega turli xil 
tizimlar/arxitekturalar/platformalar uchun yagona standart.

Etakchi dasturiy ta'minot va apparat sotuvchilari tomonidan 
birgalikda  kuchaytiriladi .

Qisqalik va ifodalilik:

Unchalik katta bo’lmagan direktivalar   va qo'shimcha 
elementlarning to'plami.

Foydalanish qulayligi :

Dasturchining ishiga deyarli ta'sir qilmaydigan parallel 
dasturlarni yaratishning soddalashtirilgan mexanizmi.

Portativlik :

C/C++ va Fortran tillarida qo'llab-quvvatlanadi .

Bir nechta platformalarda qo'llab-quvvatlanadi ( Unix / Linux 
, MacOS , Windows ).                 OpenMP  tarixi  

Fortran kengaytmalari :  90-  yillarning  boshi

Х3Н5  loyihasi -  ANSI  standartidagi birinchi urinish :  1994 yil

OpenMP rivojlanishining boshlanishi :  1997 -yil

1.0-2.5-  versiyalari (1997 yil oktabr - 2005 yil may)  :  Birinchi 
versiyalarida siklni oqimlar orqali parallellashtirish kiritilgan

3.0-3.1-  versiyalari (2008 yil may - 2011 yil iyul) :  Mustaqil 
vazifalarni qo'llab-quvvatlash va rivojlantirish

4.0 - v ersiya … (2013 -yil  iyul) :  Siklni  vektorlashtirishni   qo'llab-
quvvatlash (SIMD), tezlatgichlarni qo'llab-quvvatlash (  target  ), 
bog'liq vazifalar, o'rnatilgan xatolarni boshqarish 
mexanizmlari (  cancel ), maxsus qisqartirishlar, atom 
konstruktsiyalarini kengaytirish .                 Umumiy xotira modeli

Barcha  oqimlar  umumiy 
umumiy xotiraga kirish 
huquqiga ega.

Ma'lumotlar umumiy yoki 
shaxsiy bo'lishi mumkin.

Umumiy ma'lumotlar 
barcha  oqimlar  uchun 
mavjud.

Shaxsiy ma'lumotlar 
faqat bitta  oqim  egasi 
uchun mavjud.

Umumiy ma'lumotlarga 
kirish uchun 
sinxronlashni talab qiladi 
.                 
Umumiy xotira modelida  oqimlar  umumiy o'zgaruvchilar 
orqali o'zaro ta'sir qiladi. Dasturda bunday 
o'zgaruvchilarga ehtiyot siz lik bilan munosabatda bo'lish 
poyga xatolariga olib kelishi mumkin (  race condition   ). 
Buning sababi shundaki,  oqim lar parallel ravishda 
bajariladi va shunga mos ravishda umumiy 
o'zgaruvchilarga kirish ketma-ketligi bir dasturni ishga 
tushirishdan boshqasiga farq qilishi mumkin.

Raqobat xatolarini nazorat qilish uchun  oqim lar    ishi 
sinxronlashtirilishi kerak. Buning uchun muhim bo'limlar, 
to'siqlar, atom operatsiyalari va qulflar kabi 
sinxronizatsiya primitivlari qo'llaniladi. Shuni ta'kidlash 
kerakki, sinxronizatsiya dasturdan qo'shimcha 
xarajatlarni talab qilishi mumkin va  shuning uchun 
ma’lumotlarni shunday taqsimlash kerakki, 
sinxronizatsiya nuqtalari soni minimal bo’lishi kerak.                 OpenMP  da dasturlash modeli
OpenMP dasturlash modelida  asosiy oqim  kerak bo'lganda bo shqa  
oqimlarn i yaratadi.  Fork-join  modelida   dasturlash dasturning manba 
kodining asosiy joylariga kompilyator direktivalarini kiritish orqali amalga 
oshiriladi.  Kompilyator ushbu direktivalarni interpretatsiyalaydi va kod 
bo'limlarini parallellashtirish uchun dasturning tegishli joylariga kutubxona 
qo'ng'iroqlarini kiritadi.                 OpenMP  dasturlari ning tuzilishi

Dastur ketma-ket kod bo'limlari ( serialcode ) va parallel mintaqalar ( parallel  
region ) shaklida taqdim etiladi.

Har bir oqim o’zining ID  raqamiga ega .

Asosiy  oqim ( master ) 0 -raqam bilan  raqamlangan.

Jarayon xotirasi ( heap ) barcha oqimlar  uchun umumiydir .

OpenMP  oqimlarni dinamik boshqarishni  amalga oshiradi  ( task   parallelism ).                 OpenMP ni qachon ishlatish kerak  

OpenMP texnologiyasidan qachon foydalanishni bilish undan qanday 
foydalanishni bilish kabi muhimdir.

P latforma ko'p protsessor li  yoki ko'p yadroli  bo’lsa . Agar dastur bitta yadro 
yoki protsessorni to'liq iste'mol qilsa, uni OpenMP bilan ko'p tarmoqli qilish 
uning ish faoliyatini yaxshilaydi.

Ilova platformalararo bo'lishi kerak  . OpenMP o'zaro platformali va keng 
qo'llab-quvvatlanadigan API.  OpenMP  pragma direktivalari yordamida amalga 
oshirilganligi sababli , dastur OpenMP standartini qo'llab-quvvatlamaydigan 
kompilyator bilan ham kompilyatsiya qilinishi mumkin .

Sikl larni parallel qilish kerak  bo’lganda . OpenMP sikllarning parallel 
bajarilishini tashkil qilish orqali o'zining to'liq salohiyatini namoyish etadi. Agar 
ilovangiz  bir biriga bog’liq bo’lmagan  uzoq tsikllarga ega bo'lsa, OpenMP ideal 
echimdir.

Ilovani  ishlab   chiqarishdan oldin uning ish faoliyatini  tezlashtirish kerak 
bo’lganda .  OpenMP  ilovani qayta arxitektura qilishni talab qilmagani uchun 
unumdorlikni oshirish uchun kodingizga kichik o zgarishlar kiritish uchun juda ʻ
yaxshi.

Biroq, OpenMP  barcha ka mchilik lar uchun davo  emas . Texnologiya birinchi 
navbatda yuqori unumli hisoblash tizimlarini ishlab chiquvchilarga qaratilgan 
bo'lib, agar kod ko'plab tsikllarni o'z ichiga olsa va umumiy ma'lumotlar 
massivlari bilan ishlasa, eng samarali hisoblanadi.                 OpenMP asoslari 

Sintaksis  . Asosan, OpenMP konstruksiyalari kompilyator direktivalaridir.  
C/C++ uchun direktivalar quyidagicha:

#pragma  omp  konstruksiya  [shart [shart]...]

OpenMP konstruksiyalari  direktival ar bo'lgani uchun ularni tushunmaydigan 
kompilyator ularni o'tkazib yuboradi va ketma-ket bo'lsa ham , OpenMP 
dasturini yaratadi.

Ko'pincha, OpenMP direktivalari faqat bitta kirish nuqtasi va bitta chiqish 
nuqtasi bo'lgan qurilish bloklariga nisbatan qo'llaniladi.  Ba’zi bir istisnoli 
holatlar mavjud. Bu istisnolar  Fortranda STOP  operatori  va C /C++ da 
exit() funksiyasidir.                 OpenMP ning asosiy elementlari 

OpenMP da parallellashtirish - maxsus direktivalarni kiritish va yordamchi 
funktsiyalarni chaqirish  orqali amalga oshiriladi .

OpenMPning a sosiy elementlar i :

•  oqimlarni  yaratish uchun konstruksiyalar ( parallel direktiva si  )

•  ishni  oqimlar  o'rtasida taqsimlash uchun konstruktsiyalar ( DO / for va 
section  direktivalari )

•  ma'lumotlar bilan ishlashni boshqarish uchun konstruktsiyalar ( shared va 
private ifodalari ),

•  oqimlarni  sinxronlashtirish uchun konstruktsiyalar (  critical , atom ic  va 
barrier   direktivalari )

•  vaqt bilan ishlovchi protseduralar

• atrof-muhit o'zgaruvchilari (masalan, OMP_NUM_THREADS).                 Direktivlar va funksiyalar

C/C++ da direktiv formati:

#pragma om p  directive -name [  optsiya [ [ , ] 
optsiya ] ... ]

Ko'pgina direktivlarning ta'sir  hududi bitta operator 
yoki blogdir.

OpenMP direktivalarini  quyidagi   toifalarga bo'lish 
mumkin:

parallel hududni aniqlash ;

ishni taqsimlash

sinxronizatsiya .

Har bir direktivada bir nechta qo'shimcha atributlar 
bo'lishi mumkin -  optsiyalar (  clause  ).                                   Parallel hududlar

Parallel hududlar  OpenMP da asosiy tushunchadir . Aynan shu hudud 
ko'rsatilgan joyda dastur parallel ravishda bajariladi. Kompilyator 
pragma   # om p  parallel  duch kelishi bilanoq , parallel oqimlarni yaratish 
bo'yicha ko'rsatmalarni kiritadi.

Parallel mintaqalar uchun yaratilgan  oqim lar  soni    OMP_NUM_THREADS 
muhit o'zgaruvchisi orqali boshqariladi va dastur ichidagi funksiya 
chaqiruvi orqali ham o'rnatilishi mumkin.

Har bir ishlab chiqarilgan  oqim  struktura blokidagi kod blokini bajaradi. 
Odatiy  holatda ,  oqim lar o'rtasida sinxronizatsiya mavjud emas va 
shuning uchun turli xil  oqim lar tomonidan ma'lum bir bayonotni bajarish 
ketma-ketligi aniqlanmagan.

Kodning parallel bo'limi bajarilgandan so'ng, asosiy  oqim dan tashqari 
barcha  oqimlar  tugatiladi va faqat asosiy  oqim  bajarilishda davom 
etadi .

Har bir ip o'zining noyob raqamiga ega bo'lib, u 0 dan (asosiy  oqim  
uchun)  “oqim lar  umumiy  soni -1” ga  qadar o'zgaradi .  Oqim 
identifikat siya raqamini  omp_get_thread_num() funksiyasi yordamida 
aniqlash mumkin  .

Oqim  identifikatorini bilish,  oqim larni parallel bajarish maydoni 
ichidagi turli s oha larga yo'naltirish mumkin.                 
#pragma omp parallel

{

myid = omp_get_thread_num (); 

if ( myid == 0)

do_something ();

else

do_something_else  ( myid );

}                 Dasturning bajarilishi

OpenMP kutubxonasi ni #include<omp.h>qo’shish

Kerakli miqdordagi protsessorlarda 
bajariladigan faylni ishga tushiring, ya'ni 
OMP_NUM_THREADS muhit o zgaruvchisini ʻ
o rnatish orqali 	
ʻ oqim lar sonini belgilashingiz 
mumkin.

eksportOMP_NUM_THREADS =n  - Linux uchun .

v oid   omp_set_num_threads ( int  
num_threads )  –  oqimlar sonini belgilash.                 Vaqtni o'lchash

Omp_get_wtime ()  tizim taymer funksiyasi chaqiruvchi 
oqim da o'tmishdagi bir nuqtadan beri o'tgan astronomik 
vaqtni soniyalarda (ikki aniqlikdagi haqiqiy raqam) qaytaradi.

d ouble   omp_get_wtime ( void );

Malumot nuqtasi sifatida ishlatiladigan vaqt nuqtasi 
jarayonning amal qilish muddati davomida o'zgarmaydi. Turli 
oqimlarning  taymerlari sinxronlashtirilmagan va turli 
qiymatlarni ishlab chiqarishi mumkin.                 P arallel  direktivasi                   Optsiya(qo’shimchalar)
If(shart)
num_threads(butun son)
default(shared none)│
private(ro’yxat)
firstprivate(ro’yxat)
shared(ro’yxat)
copyin(ro’yxat)
reduction(operator:ro’yxat) Parallel direktivasi optsiyalari                 Parallellashtirishda yo’l qo’yilishi mumkin bo’lgan xatolar

1. openmp  yo’qligi  .

Agar kompilyator sozlamalarida OpenMP qo'llab-quvvatlash yoqilmagan bo'lsa , 
OpenMP direktivalari e'tiborga olinmaydi . Kompilyator xato yoki hatto 
ogohlantirish bermaydi, kod dasturchi kutganidek bajarilmaydi .
2. Parallel  so’zi tushib qolishi .
Kod direktivalarini noto'g'ri yozish.
Noto'g'ri :
Kod parchasi muvaffaqiyatli 
kompilyatsiya qilinadi, lekin # 
pragma   omp   for direktivasi 
kompilyator tomonidan e'tiborga 
olinmaydi. Shunday qilib, tsikl 
faqat bitta ip tomonidan bajariladi 
va buni aniqlash juda qiyin. To'g'ri :                                  
5. Ortiqcha parallellashtirish

#pragma omp parallel  direktivasini ishlatishda ehtiyotkor 
bo’lish lozim. 
Noto’g’ri To’g’ri
myFunc funksiyasi 20 marta 
chaqiriladi myFunc funksiyasi 10 marta 
chaqiriladi                 E'tiboringiz uchun 
rahmat!

OpenMPga kirish

OpenMP imkoniyatlari  OpenMP (OpenMulti-Processing) C, C++ va Fortran dasturlarini parallellashtirish uchun ochiq standartdir. Ko'p protsessorli, umumiy xotira tizimlarida ko'p bosqichli ilovalarni dasturlash uchun mo'ljallangan kompilyator direktivalari, kutubxona protseduralari va muhit o'zgaruvchilari to'plamining tavsifini beradi.  OpenMP interfeysi umumiy xotira modelida kengaytiriladigan SMP tizimlarida (SSMP, ccNUMA va boshqalar) dasturlash uchun standart sifatida ishlab chiqilgan.  OpenMP standarti kompilyator direktivalari, protseduralari va o'zgaruvchilari to'plami uchun spetsifikatsiyalarni o'z ichiga oladi.  C, C++ va Fortran dasturlarini parallellashtirish uchun ochiq standart  Yuqori samarali hisoblash (HPC High Performance Computing ) sohasida juda muhim.  Kompilyator qo'llab-quvvatlashini talab qiladi.  Ketma-ket va parallel sohalar bir dasturda.  Inkremental parallelizm(tsikllar).

OpenMP afzalliklari  1. “ Inkrementall 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 ichiga OpenMP direktivalarini qo'shadi.  2. Shu bilan birga, OpenMP juda moslashuvchan mexanizm bo'lib , ishlab chiquvchiga parallel dasturning xatti-harakatlari ustidan katta nazoratni ta'minlaydi.  3. Bitta protsessorli platformadagi OpenMP dasturi ketma-ket dastur sifatida ishlatilishi mumkin , ya'ni. ketma-ket va parallel versiyalarni qo'llab-quvvatlashga hojat yo'q. OpenMP direktivalari ketma-ket kompilyator tomonidan oddiygina e'tiborga olinmaydi .

OpenMP ning maqsadi  Standartlashtirish :  Umumiy xotiraga ega turli xil tizimlar/arxitekturalar/platformalar uchun yagona standart.  Etakchi dasturiy ta'minot va apparat sotuvchilari tomonidan birgalikda kuchaytiriladi .  Qisqalik va ifodalilik:  Unchalik katta bo’lmagan direktivalar va qo'shimcha elementlarning to'plami.  Foydalanish qulayligi :  Dasturchining ishiga deyarli ta'sir qilmaydigan parallel dasturlarni yaratishning soddalashtirilgan mexanizmi.  Portativlik :  C/C++ va Fortran tillarida qo'llab-quvvatlanadi .  Bir nechta platformalarda qo'llab-quvvatlanadi ( Unix / Linux , MacOS , Windows ).

OpenMP tarixi  Fortran kengaytmalari : 90- yillarning boshi  Х3Н5 loyihasi - ANSI standartidagi birinchi urinish : 1994 yil  OpenMP rivojlanishining boshlanishi : 1997 -yil  1.0-2.5- versiyalari (1997 yil oktabr - 2005 yil may) : Birinchi versiyalarida siklni oqimlar orqali parallellashtirish kiritilgan  3.0-3.1- versiyalari (2008 yil may - 2011 yil iyul) : Mustaqil vazifalarni qo'llab-quvvatlash va rivojlantirish  4.0 - v ersiya … (2013 -yil iyul) : Siklni vektorlashtirishni qo'llab- quvvatlash (SIMD), tezlatgichlarni qo'llab-quvvatlash ( target ), bog'liq vazifalar, o'rnatilgan xatolarni boshqarish mexanizmlari ( cancel ), maxsus qisqartirishlar, atom konstruktsiyalarini kengaytirish .