Muhammad Al-Xorazmiy nomidagi Toshkent axborot texnologiyalari universiteti Fan: Kompyuter arxitekturasi


Download 0.88 Mb.
bet3/5
Sana28.12.2022
Hajmi0.88 Mb.
#1015380
1   2   3   4   5
Bog'liq
4-topshiriq(urolov Shohruh)


OpenMP bilan tsikllarni parallellashtirish juda oddiy. Bittasi oddiygina parallellashtiriladigan tsiklni va bir nechta parametrlarni bildiradi va qolganlari bilan OpenMP shug'ullanadi. Bundan osonroq bo'lishi mumkin emas!
Direktiv ish almashish konstruktsiyasi deb ataladi va parallel bo'lim ichiga joylashtirilishi kerak:
#pragma omp for
//parallellashtiriladigan for tsiklini belgilang; jingalak qavslar yo'q
“#pragma omp for†tsiklni iplar orasida taqsimlaydi. U parallel blok ichida ishlatilishi kerak:
#pragma omp parallel
{
…
#pragma omp for
//for sikl parallellashtirish uchun …
}//parallel blokning oxiri
Misol:
//ikkita massivning parallel yig‘indisini hisoblang #include < stdio.h >
#include < omp.h > #define N 1000000 int main(void) {
float a[N], b[N], c[N];
int i;
/* a va b massivlarni ishga tushiring */
(i = 0; i < N; i++) {
a[i] = i * 2.0;
b[i] = i * 3,0;
}
/* c = a+b massiv qiymatlarini parallel ravishda hisoblash. */
#pragma omp parallel umumiy(a, b, c) private(i)
{
#pragma omp for
(i = 0; i < N; i++) {
c[i] = a[i] + b[i] ;
printf ("%f\n", c[10]);
}
}
}


OpenMP sizga mavzular qanday rejalashtirilganligini boshqarish imkonini beradi. Mavjud jadval turlari:
: Har bir ipga sobit rejimda (dumaloq robin) takrorlashlar bo'lagi tayinlanadi. Takrorlashlar iplar orasida teng taqsimlanadi. Parametr bo'lagi uchun butun sonni belgilash ma'lum bir ipga ulashgan iteratsiyalar sonini ajratadi. Eslatma: bu standartmi? tekshirish.
: Har bir ip bir parcha iplar bilan ishga tushiriladi, so'ngra har bir ip o'z iteratsiyasini tugatgandan so'ng, unga keyingi iteratsiyalar to'plami tayinlanadi. Parametr bo'lagi bir vaqtning o'zida ipga ajratilgan qo'shni iteratsiyalar sonini belgilaydi.
boshqariladi: Takrorlashlar ketma-ket eksponent ravishda kamayib boruvchi qismlarga bo'linadi, bo'lak eng kichik o'lchamdir.
Bu direktiv uchun pragmadan keyin jadvalni (turi, bo'lak) qo'shish orqali aniqlanadi:
Jadval uchun #pragma omp (statik, 5) Keyinchalik murakkab ko'rsatmalar
... bu sizga kerak emas.
-parallel blok ichidagi “bo'limlarni†belgilashi mumkin
-siklning iteratsiyalari tartibda bajarilishini so'rashi mumkin
-faqat asosiy ip tomonidan bajariladigan blokni belgilang
-faqat unga yetib kelgan birinchi ip tomonidan bajariladigan blokni belgilang
-“kritik†bo'ladigan bo'limni belgilang: har bir ish zarrachasi tomonidan bajariladi, lekin bir vaqtning o'zida faqat bitta ish zarrachasi tomonidan bajarilishi mumkin. Bu iplarni bir-biriga xalaqit bermaslikka, navbatma-navbat olishga majbur qiladi.
-bo'limni "atom" bo'lishini aniqlang: bu poyga sharoitlaridan qochish uchun iplarni umumiy xotira joyiga ketma-ket yozishga majbur qiladi
#include < stdio.h > #include < omp.h > int main(void) {
int count = 0;
#pragma omp parallel umumiy(hisoblash)
{
#pragma omp atomik
hisob++; // hisob bir vaqtning o'zida faqat bitta mavzu tomonidan yangilanadi
}
printf_s("Mavzular soni:Â %d\n", hisoblash);
}



II. Amaliy qism

Download 0.88 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling