MAVZU: OpenMP PAKET TARKIBINI VA ISHLASHINI O‘RGANISH
Ishdan maqsad: OpenMP paketini va uning ishlash algoritmlarini o‘rganish va shaxsiy kompyuterda OpenMP kutubxonasini sozlash hamda undan foydalana olish ko‘nikmasiga ega bo‘lish.
Nazariy qism OpenMP faqat kompilyatsiya vaqtida ishlaydi, u preprotsessor ko‘rsatmalarini mahalliy Fortran/C/C++ kodiga o‘zgartiradi, keyin esa bajariladiganga kompilyatsiya qilinadi. Bu OpenMP-ga unumdorlikni yo‘qotmasdan “foydalanuvchiga qulay” interfeysni taqdim etish imkonini beradi. C/C++ dasturlash tillarida dasturning parallel muhitda aniqlangan static o‘zgaruvchilar umumiy (shared) o‘zgaruvchi hisoblanadi. Dinamik ajratilgan xotira ham umumiy hisoblanadi, ammo ko‘rsatgich ham umumiy, ham lokal bo‘lishi mumkin. OpenMP da parallel muhitdagi o‘zgaruvchilar 2 turga bo‘linadi: shared (umumiy, hamma oqimlar ushbu turdagi o‘zgaruvchilarni ko‘radi) va private (lokal, har bir oqim o‘zgaruvchining nusxasini o‘zida ko‘radi).
Umumiy o‘zgaruvchi hamma qismlar uchun har doim faqat bitta nusxada bo‘ladi va barcha oqimlarga bitta nomda bo‘ladi.Lokal o‘zgaruvchilar e’lon qilinganda, har bir oqim uchun bir xil tipdagi va o‘lchamdagi nusxalari yaratiladi. Bitta oqimdagi lokal o‘zgaruvchining qiymati o‘zgarsa ham qolgan oqimlardagi nusxalariniki o‘zgarmaydi.Bundan tashqari dasturning kod qismida har bir kvadrat matritsa ustida parallelashtirish amallari qo‘llanilgan. For siklida oqimlarga ajratish #pragma omp parallel for diriktivasi bilan amalga oshiriladi.
Parallel direktivasi yordamida parallel muhit hosil qilinadi. C/C++ dasturlash tilida quyidagicha ko‘rinishda bo‘ladi:
#pragma omp parallel [shart [[,] shart ]…] pragma omp parallel {
#pragma omp for
for (int i = 1; i < size; ++i)
x[i] = (y[i - 1] + y[i + 1]) / 2; }