1-mavzu: Kirish uslubmetdiReja


Sinxronizatsiya-kretik seksiyalar,atomic,barrier


Download 1.97 Mb.
bet38/39
Sana05.01.2023
Hajmi1.97 Mb.
#1078956
1   ...   31   32   33   34   35   36   37   38   39
Bog'liq
Paradigma maruzalar

Sinxronizatsiya-kretik seksiyalar,atomic,barrier
Parallel direktivasigacha bo’lgan barcha o’zgaruvchilar barcha oqimlar uchun umumiy hisoblanadi. Oqim ichida yaratilgan o’zgaruvchilar lokal(private) bo’ladi va faqat shu qoimga tegishli bo’ladi. Bir vaqtda bir necha oqimlar yordamida umumiy o’zgaruvchini qiymatini o’zgartirish uchun oqimlar o’rtasida musobaqa yuzaga keladi-bu muammo va uni batafsil qaramasdan o’tkazib yuborib bo’lmaydi. Bunday muammo bitta oqim umumiy o’zgaruvchining qiymatini o’qiyotgan vaqtda ikkinchi oqim uni qiyamtini o’zgartirayotgan bo’ladi.
Vaziyatni quyidagi misol orqali tushuntiramiz:

  1. #include "omp.h"

  2. #include


  3. int main() {

  4. int value = 123;

  5. #pragma omp parallel

  6. {

  7. value++;

  8. #pragma omp critical

  9. {

  10. std::cout << value++ << std::endl;

  11. }

  12. }

  13. }

Dasturda barcha oqimlar uchun umumiy bo’lgan value o’zgaruvchisi tavsiflangan. Har bir oqim o’zgaruvchining qiymatini oshiradi va hosil bo’lgan natijani ekranga chiqaradi. Mazkur dasturni ikki yadroli kompyuterda ishga tushirsak natija quyidagicha bo’ladi:

Dastur natijasidan ko’rinib turibdiki, dastlab har bir oqim o’zgaruvchining qiymatini oshiradi, so’ngra navbatma-navbat natijani ekranga chiqaradi (buning uchun ularning har biri qiymatni yana bir marta oshiradi), llekin ba’zi hollarda bajarilish tartibi boshqacha bo’ladi. Mazku misolda bizni qiziqtirgan narsa shuki, value o’zgaruvchisining qiymatini bir vaqtda oshirish-dasturning xulq-atvori yaxshi va faqat bir marta oshiriladi yoki umuman dastur ishi salbiy natija bilan tugaydi.
Mazkur muammoni yechish uchun critical direktivasidan foydalaniladi. Uning foydalanilishiga misol yuqorida keltirilgan. Bu yerda taqsimlangan resurs faqatgina xotira emas balki, konsol hamdir.
Kritik seksiyada bir vaqt momentida faqat bitta oqim joylashadi qolganlari uni bo’shashini kutadi.
OpenMP kutubxonasi yordamida parallel dastur tuzish uchun, dasturni dastlab ketma-ket ko’rinishda tuzib chiqish kerak, so’ngra uni OpenMP direktivalari yordamida parallellashtirish kerak.

Ma’lumki, dasturning bajarilish vaqtining katta qismi sikl operatorida kechadi. Shuning uchun OpenMPda maxsus parallel sikl direktivasi mavjud. Quyida ikkita misol yordamida mazkur siklni parallellashtirishni ko’rib chiqamiz:



Download 1.97 Mb.

Do'stlaringiz bilan baham:
1   ...   31   32   33   34   35   36   37   38   39




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