-
+, *, -, &, |, ^, &&, ||
operatorlarning bajarilish tartibi aniqlanmagan,
shuning uchun natija ishga tushirishdan farq qilishi mumkin;
collapse(n)
- bu parametr n ta ketma-ket bir-biriga yaqin joylashgan
sikllar ushbu direktiva bilan bogʻlanganligini bildiradi; sikllar uchun
oqimlar oʻrtasida boʻlingan umumiy iteratsiya maydoni hosil boʻladi; agar
collapse
opsiyasi koʻrsatilmagan boʻlsa, u holda direktiv faqat darhol
keyingi sikl uchun amal qiladi;
schedule(type [, chunk])
- bu parametr sikl iteratsiyasi oqimlar
orasida qanday taqsimlanishini belgilaydi;
ordered
- siklda
ordered
direktivalarini uchratish mumkinligini
koʻrsatuvchi variant; bu holda, siklning tanasi ichida blok belgilanadi, bu
iteratsiyalar ketma-ket siklda oʻtish tartibida bajarilishi kerak;
nowait
- parallel siklning oxirida parallel ishlaydigan oqimlarning
yashirin toʻsiqli sinxronizatsiyasi yuzaga keladi: ularning keyingi
bajarilishi faqat ularning barchasi shu nuqtaga yetganda sodir boʻladi;
agar bunday kechikish kerak boʻlmasa,
nowait
opsiyasi sikl oxiriga
yetgan oqimlarni boshqalar bilan sinxronlashmasdan ishlashni davom
ettirish imkonini beradi. Agar
end do
direktivasi aniq koʻrsatilmagan
boʻlsa, sinxronlash hali ham parallel siklning oxirida amalga oshiriladi.
Parallel sikllar turiga nisbatan qat’iy cheklovlar qoʻyiladi. Xususan,
toʻgʻri dastur parallel siklning qaysi iteratsiyasini qaysi oqim bajarishiga
bogʻliq boʻlmasligi kerak deb hisoblanadi. Parallel halqadan yon
chiqishdan foydalana olmaysiz.
schedule
opsiyasida koʻrsatilgan
iteratsiya blokining oʻlchami sikl ichida oʻzgarmasligi kerak.
C tilidagi parallel sikllar formatini quyidagicha soddalashtirish
mumkin:
for ([
butun son turi
] i =
sikl invarianti
;
i
{<,>,=,<=,>=}
sikl invarianti
;
i
{+,-}=
sikl invarianti
)
Ushbu talablar OpenMP siklga kirishda takrorlashlar sonini aniq
aniqlashi uchun kiritilgan.
Agar parallel bajarish direktivasi bitta operator bilan tugaydigan
sikllar uyasidan oldin kelsa, u holda direktiva faqat eng tashqi siklda
ishlaydi.
Ajratilgan siklning iterativ oʻzgaruvchisi ma’nosi boʻyicha lokal
boʻlishi kerak, shuning uchun agar u umumiy koʻrsatilgan boʻlsa, u holda
siklga kirishda bilvosita lokal boʻladi. Sikl tugagandan soʻng,
takrorlanuvchi sikl oʻzgaruvchisining qiymati, agar
lastprivate
opsiyasida koʻrsatilmagan boʻlsa, aniqlanmagan.
Takrorlash uchun savol va topshiriqlar:
1.
OpenMP da ishni taqsimlash qanday amalga oshiriladi?
2.
omp_get_thread_num() funksiyasi qanday vazifani bajaradi?
3.
Parallel sikllar
4.
lastprivate opsiyasidan foydalanishga oid misollar tuzing
5.
reduction opsiyasi
Do'stlaringiz bilan baham: |