atom bo'limi. To'siqlar. To'siqlar sinxronizatsiya elementidir, qadar dasturning keyingi bajarilishini to'xtatib turadi
barcha iplar bu to'siqqa etib borguncha. To'siqni hamma bosib olgach
mavzular, dastur bajarilishi davom etadi.
C/C++ sintaksisi
#pragma omp to'sig'i
Yoki:
#pragma omp parallel
{
#pargma omp to'sig'i
}
Amalga oshirish tartibini belgilash. Buyurtma qilingan direktiv parallel ravishda davrlar (faqat u erda sodir bo'lishi mumkin) ko'rsatilgan blokni ko'rsatadi
qat'iy belgilangan ketma-ketlikda bajarilishi kerak. Ichkarida
buyurtma qilingan bo'lim bir vaqtning o'zida faqat bitta ipga ega bo'lishi mumkin.
C/C++ sintaksisi
#pragma omp buyurtma qilingan
Strukturaviy blok
Misol.
#pragma omp parallel xususiy(myid)
{
myid = omp_get_thred_num(); Shaxsiy(i) uchun #pragma omp for(i=0; i<8; i++)
137
Machine Translated by Google
#pragma omp buyurtma qilingan
printf("T%d: %d\n", myid, i);
}
Kodning natijasi quyidagicha: T0: 0
T0: 1
T0: 2
T0: 3
T1: 4
T1: 5
T1: 6
T1: 7
Yuvish konstruktsiyasi. Ushbu dizayn darhol qayta tiklashni amalga oshiradi umumiy o'zgaruvchilar qiymatlari xotiraga. Shunday qilib, bu kafolatlanadi
barcha iplarda o'zgaruvchining qiymati bir xil bo'ladi. bilvosita yuvish quyidagi ko'rsatmalarda mavjud: to'siq, kritikning boshlanishi va oxiri bo'limlar, parallel halqalar, parallel hududlar, bitta bo'limlar.
Uning yordamida siz o'zgaruvchidan foydalanib oqimdagi signallarni yuborishingiz mumkin
semafor kabi. Bir mavzu umumiy o'zgaruvchining qiymatini ko'rganda
o'zgargan bo'lsa, u voqea sodir bo'lganligini aytadi va shuning uchun siz mumkin dasturni bajarishni davom ettiring. (Misol ishlamaydi. Yo'q
blokirovka sodir bo'ladi) Sintaksis:
#pragma omp flush(var1[, var2, ...])
Do'stlaringiz bilan baham: |