G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon


Download 1.46 Mb.
bet74/85
Sana24.12.2022
Hajmi1.46 Mb.
#1062519
1   ...   70   71   72   73   74   75   76   77   ...   85
Bog'liq
ParVychGafGal (1)

[shart [,shart] ...] uchun #pragma omp


uchun tsikl


bu erda shartlardan biri:
xususiy (var1, var2, ...)
umumiy (var1, var2, ...) firstprivate(var1, var2, ...) lastprivate (var1, var2, ...)
qisqartirish (operator: var1, var2, )
buyurdi


jadval (turi[, blok hajmi]) hozir
agar (ifoda)
parallel bo'limlar. Ba'zan parallel ravishda ehtiyoj bor tsiklning takrorlanishi bo'lmagan amallarni bajaring. Albatta
bu maqsadlar uchun oddiy parallel direktivadan foydalaning, lekin keyin kerak o'rtasida turli ishlarni taqsimlash uchun qo'shimcha kod yozing
oqimlar. Bu muammoni oddiyroq parallel yordamida hal qilish mumkin
bo'limlar.
#pragma omp parallel bo'limlar
{
#pragma omp bo'limi
{
printf("T%d: foo\n", omp_get_thread_num());
}
#pragma omp bo'limi
{
printf("T%d: bar\n", omp_get_thread_num());
126
Machine Translated by Google
}
}// omp bo'limlari
Har bir bo'lim alohida ipda bajariladi, bu imkon beradi
kod parchalanishini amalga oshirish. Sinxronizatsiya nuqtasi - bu oxir
bo'limlar bloki . Asosiy ipni kutmaslik kerak bo'lganda boshqa mavzular nowait sharti yordamida tugatilishi kerak .
C/C++ da Parallel Bo'limlar sintaksisi
#pragma omp bo'limlari \
[shart [,shart...]]
{
#pragma omp bo'limi qurilish bloki [#pragma omp bo'limi qurilish bloki
...]
}
bu erda shartlardan biri:
xususiy (var1, var2, ...) firstprivate(var1, var2, ...) lastprivate (var1, var2, ...)
qisqartirish (operator: var1, var2, )
hozir


yagona qurilish. Agar parallel bo'limda uni bajarish kerak bo'lsa har qanday harakat va ayni paytda bu harakat faqat bajarilishi kerak bitta ip (masalan, oraliq natijani hisoblash), keyin buning uchun yagona dizayn ideal .
C/ C++ tilidagi sintaksis:


#pragma omp yagona [shart [, shart ]]
qurilish bloki
127
Machine Translated by Google
bu erda shartlardan biri:
xususiy (var1, var2, ...)
firstprivate(var1, var2, ...) hozir
Amalga oshirish shartlari (2). agar shart. Hisob-fakturalar bo'lgan hollarda urug'lanish iplarining narxi daromaddan kattaroq bo'lishi mumkin
parallellashtirish, keyin siz if shartidan foydalanishingiz kerak.
#pragma omp parallel
{
if (n>2000) uchun #pragma omp
{
for(i=0; i i++) a[i] = ish(i);
}
}
Yuqoridagi misolda, agar shunday bo'lsa, tsikl parallellashtiriladi

2000 dan ko'ra ko'proq sikl iteratsiyasi mavjud.




Oxirgi shaxsiy holat. Bu holat shaxsiy holatga o'xshash ishlaydi bundan mustasno, o'zgaruvchining qiymati oxirgida hisoblangan
tsiklning takrorlanishi saqlanadi.


#pragma omp parallel
{
#pragma omp shaxsiy(i) lastprivate(k) uchun
for(i=0; i<10; i++) k = i*i;
}
printf("k = %d\n", k);
128
Machine Translated by Google
Tsikldan chiqishda k o'zgaruvchining qiymati 100 ga teng bo'ladi
k o'zgaruvchisi shaxsiy deb e'lon qilindi, keyin esa chiqish paytida uning qiymati sikl aniqlanmagan bo'ladi.
kamaytirish holati. Bu holat xavfsiz holatga keltiradi
global hisoblash. Har bir ro'yxatga olingan o'zgaruvchining shaxsiy nusxasi

ga muvofiq parallel bo'limga kirishda ishga tushiriladi


belgilangan operator (+ operatori uchun 0). Parallel chiqishda qisman hisoblangan qiymatlardan bo'limlar, natijada va asosiy mavzuga o'tdi.
#pragma omp parallel
{
#pragma uchun umumiy(x) xususiy(i) qisqartirish(+:sum)
for(i=0; i<10000; i++)
summa += x[i];
}
#pragma omp parallel
{
#pragma umumiy(x) shaxsiy(i) qisqartirish(min:gsum)
for(i=0; i<10000; i++)


kommuna = min(kommuna, x[i]);


}
Quyidagi operatorlar va agregat funktsiyalar C/C++ da mavjud: +, -, *,
&, ^, |, &&, ||, min, maks.
jadval holati. Bu holat ish qanday bo'lishini nazorat qiladi

iplar orasida taqsimlanadi.




jadval (turi[, blok hajmi])


Bu shart ish o'rtasida qanday taqsimlanishini nazorat qiladi



oqimlar


jadval (turi[, blok hajmi])


129


Machine Translated by Google
Blok o'lchami ip tomonidan qayta ishlanadigan har bir paketning hajmini belgilaydi.
(iteratsiyalar soni).
Jadval turi quyidagi qiymatlarni olishi mumkin:

  • statik - takrorlashlar iplar orasida teng taqsimlanadi. Bular. agar

1000 ta takroriy va 4 ta ipdan iborat tsiklda, keyin bitta ip hamma narsani qayta ishlaydi

iteratsiyalar 1 dan 250 gacha, ikkinchisi - 251 dan 500 gacha, uchinchisi - 501 dan 750 gacha,


to'rtinchisi 751 dan 1000 gacha. Agar blok hajmi ham ko'rsatilgan bo'lsa, keyin ma'lum o'lchamdagi bloklar bo'yicha barcha iteratsiyalar tsiklik iplar orasida taqsimlanadi. Statik taqsimot


iteratsiya vaqtlari teng bo'lganda samarali ishlaydi yoki
taxminan teng. Agar bunday bo'lmasa, undan foydalanish oqilona ish taqsimotining keyingi turi.

  • dinamik - ish ma'lum o'lchamdagi partiyalarda taqsimlanadi (ko'ra standart o'lcham - 1) iplar orasidagi. Nima bilanoq

yoki iplardan ma'lumotlarning o'z qismini qayta ishlashni tugatadi, u keyingisini oladi. Shuni ta'kidlash kerakki, bu yondashuv bilan
biroz balandroq, lekin yaxshiroq iplar orasidagi yukni muvozanatlash.

  • yo'naltirilgan - bu turdagi ishlarni taqsimlash shunga o'xshash oldingi, yuz blokdan tashqari hajmi o'zgartirildi

qancha xom-ashyoga qarab dinamik ravishda iteratsiyalar qoldi. Blok hajmi asta-sekin kamayadi
belgilangan qiymatga. Ushbu yondashuv bilan erishish mumkin kam qo'shimcha xarajatlar bilan yaxshi muvozanat.
1   ...   70   71   72   73   74   75   76   77   ...   85




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