8. openmp asosida parallel dasturlash


Bu shart sukut bo'yicha kodning parallel qismidagi o'zgaruvchilar doirasini aniqlaydi


Download 48.95 Kb.
bet4/14
Sana19.04.2023
Hajmi48.95 Kb.
#1365571
1   2   3   4   5   6   7   8   9   ...   14
Bog'liq
openmself

Bu shart sukut bo'yicha kodning parallel qismidagi o'zgaruvchilar doirasini aniqlaydi.

schedule(type[,chank])

Bu holat halqaning takrorlanishi iplar orasida qanday taqsimlanishini nazorat qiladi.

private, shared, default shartlar. Quyidagi misollarni ko'rib chiqamiz:


#pragma omp parallel shared(a) private(myid, x)
{
myid = omp_get_thread_num(); x = work(myid);
if(x < 1.0) a[myid] = x;
}
#pragma omp parallel default(private) shared(a)
{
myid = omp_get_thread_num(); x = work(myid);
if(x < 1.0) a[myid] = x;
}
Ikkala misolda ham har bir ip o'z x va myid nusxasiga ega bo'ladi. Agar bu o'zgaruvchilar shaxsiy deb e'lon qilinmasa, ularning qiymati ish vaqtida aniqlanmagan bo'ladi. Kodning parallel bo'limiga kirishda x va myid o'zgaruvchilarning qiymati aniqlanmagan va bu o'zgaruvchilarni ishga tushirish talab qilinadi.
Ikkinchi misolda, default shart avtomatik ravishda kompilyatorga har bir ip uchun o'zining x va myid o'zgaruvchilarini yaratishni aytadi.
Misollardagi shared shart a massivi iplar o'rtasida taqsimlanganligini va uning qiymati parallel kod bo'limidan chiqishda saqlanadi.
firstprivate holat. Ushbu shartga to'g'ri keladigan o'zgaruvchilar har bir ip uchun shaxsiydir, lekin ip bajarilishidan oldin ular oldingi ketma-ket kodda olingan qiymat bilan ishga tushiriladi. Shunday qilib, quyidagi misolda, kodning parallel bo'limiga kirishdan oldin, a o'zgaruvchining qiymati 10 edi. Bu o'zgaruvchi kodning parallel qismini kiritishda bir xil qiymatga ega.


int myid, a;
a = 10;
#pragma omp parallel default(private)
firstprivate(a)
{
myid = omp_get_thread_num();
printf("Thread%d: a = %d\n", myid, a);
a = myid;
printf("Thread%d: a = %d\n", myid, a);
}
Xulosa
Thread1: a = 10 Thread1: a = 1 Thread2: a = 10 Thread0: a = 10 Thread3: a = 10 Thread3: a = 3 Thread2: a = 2 Thread0: a = 0

Download 48.95 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   14




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