O’zbekiston Respublikasi Axborot Texnologiyalari va Kommunikatsiyalarini Rivojlantirish Vazirligi Muhammad al-Xorazmiy nomidagi Toshkent Axborot Texnologiyalari Universiteti Individual Loyiha Mavzu




Download 0,69 Mb.
bet15/15
Sana13.01.2024
Hajmi0,69 Mb.
#136401
1   ...   7   8   9   10   11   12   13   14   15
Bog'liq
novroz
Отчет студентов 114, Rajabov, Далолатнома , zebra, Mustaqil ish 3diskrit, Mustaqil ishi Mavzu Rekursiv algoritmlar va ularning vazifalari, 1-mavzu. Ma’lumotlar bazasini loyihalash va administratorlash-fayllar.org, Oila huquqi 2-mavzu (автовосстановление), MEHNAT KODEKSIGA SHARH 1, Развитие науки и культуры Республики Каракалпакстан в годы независимости, Yakuniy savollar, 8644, Falsafa fanidan ma’ruza matnlari Mavzu Falsafa fanining predmet, \'jamiyat falsafasi
Nomi

Yili

Samaradorligi

Kompyuter ENIAK

1946

300 flops

IBM 709

1957

5 Kflops

Cray-1

1974

160 Mflops

Cray Y-M

1988

2,3 Gflops

ASCI Red

1997

1 Tflops

Blue Gene/L

2006

478,2 Tflops

IBM Roadrunner

2008

1,042 Pflops

Jaguar

2008

1,059 Pflops

Jaguar Cray XT5-HE

2009

1,759 Pflops

Tyanьxe-1A

2010

2,507 Pflops

IBM Sequoia

2012

20 Pflops

OpenMP (Open Multi - Processing ) - ko’p oqimli ilovalarni yaratish uchun mo’ljallangan amaliy dasturlashning interfeysi bo’lib, asosan umumiy xotiraga ega bo’lgan parallel hisoblash tizimlari uchun ishlab chiqilgan. OpenMP kompilyatorlar va maxsus funktsiyalar kutubxonasi uchun direktivalar to’plamidan iborat. OpenMP standarti yaqin 15 yil ichida umumiy xotiraga ega arxitekturalarga qo’llanilgan holda yaratilgan. So’nggi yillarda taqsimlangan xotirali parallel hisoblash tizimlari uchun OpenMP standartining kengaytirilgan holda ishlab chiqilmoqda. 2005 - yilning oxirida Intel kompaniyasi Cluster OpenMP mahsulotini taqdim etdi, unda kengaytirilgan OpenMP ishlab chiqilgan bo’lib taqsimlangan xotirali parallel hisoblash tizimlari uchun mo’ljallangan.
OpenMP spetsifikatsiyasini hisoblash va dasturlash texnikasi bo’yicha bir nechta yirik ishlab chiqaruvchi kompaniyalar (Intel, Hewlett-Packard, Silicon Graphics, Sun, IBM, Fujitsu, Hitachi, Siemens, Bull) yaratishmoqda, ularni OpenMP Architecture Review Board(ARB) deb nomlangan notijorat korxonasi tomonidan boshqariladi.
OpenMP ko’p oqimli ilovalarni tez va yengil yaratishni Fortran va C/C++ algoritmik tillarda amalga oshiradi. OpenMP ning birinchi versiyasi 1997 - yilda Fortran tili uchun yaratilgan. C/C++ dasturlash tillari uchun esa 1998 - yilda yaratilgan. 2008 - yilda esa OpenMP ning 3.0 versiyasi taqdim etildi.
OpenMP da parallel va ketma – ketlik.
Parallel muhitga kirilgandan so’ng yangi OMP_NUM_THREADS-1 oqimlar yaratiladi, har bir oqim o’zining unikal nomeriga ega bo’ladi, bunda dastlabki oqim 0 nomer bilan belgialanadi va u bosh oqim (master) bo’ladi. Qolgan oqimlar raqam sifatida butun sonlar 1 dan OMP_NUM_THREADS - 1gacha bo’ladi. Oqimlar soni belgilangan parallel muhitda bajariladi va ushbu muhitdan chiqib ketishgacha o’zgarmay qoladi. Parallel muhitdan chiqib ketgandan so’ng sinxronizatsiya yordamida bosh oqimdan boshqa barcha oqimlar yo’q qilinadi.
Quyidagi misolda parallel direktivasi ishlashi keltirilgan. Natijada bosh oqim “1 - ketma - ket muhit” matnini ekranga chop etadi, keyinchalik parallel direktivasi yangi oqimlarni hosil qiladi va ushbu oqimlarning har biri “parallel muhit” matnini ekranda chop etadi, keyin yaratilgan oqimlar tugatiladi va bosh oqim “2 - ketma - ket muhit” matnini ekranga chop etadi. #include "stdafx.h" #include
using namespace System;
int main(array ^args)
{
Console::WriteLine(“1 – ketma – ket muhit”); #pragma omp parallel
{
Console::WriteLine(“parallel muhit”);
}
Console::WriteLine(“2 – ketma – ket muhit”);
}
Ayrim hollarda tizimning o’zi parallel muhitda bajarilayotgan oqimlar sonini tizim resurslarini optimizatsiya qilish uchun dinamik ravishda o’zgartirishi mumkin. Oqimlar sonini dinamik ravishda o’zgartirish OMP_DYNAMIC o’zgaruvchisiga true qiymatni berish orqali amalga oshiriladi. Masalan, Linux operatsion tizimining bash komanda obolochkasida ushbu qiymatni quyidagi buyruq orqali amalga oshirish mumkin:
export OMP_DYNAMIC = true;
Dinamik ravishda o’zgaradigan tizimlarda oqimlar soni odatda belgilanmagan bo’ladi va uning qiymati falsega teng bo’ladi.
omp_in_parallel() funksiyasi 1 qiymatni qaytaradi, agar aktiv holatdagi parallel muhitdan chaqirilgan bo’lsa.
Quyidagi misolda omp_in_parallel() funksiyasi qo’llanilgan. Mode funksiyasi qaysi muhitdan chaqirilishiga qarab, “parallel muhit” yoki “ketma - ket muhit” qatorlarini chop etishda qo’llaniladi.
#include "stdafx.h" #include
using namespace System; void mode(void)
{
C/C++ dasturlash tillarida yuqoridagi barcha shartlar single direktivasi bilan birgalikda e’lon qilinadi.
Dasturning belgilangan qismini qaysi oqim bajarishi tavsiflanmaydi. Agarda nowait sharti e’lon qilinmasa, bitta oqim belgilangan fragmentni bajaradi, qolgan oqimlar uning ishini tugashini kutib turadi. Single direktivasi umumiy o’zgaruvchilar bilan ishlaganda kerak.
Master direktivasi kodning ma’lum bir qismini faqat bosh oqim bajarishi uchun belgilaydi. Qolgan oqimlar ushbu qismni o’tkazib yuborishadi va undan quyida turgan operator bilan dasturni ishlashini davom ettiradi. Ushbu direktivada sinxronizatsiya amalga oshirilmaydi. C/C++ dasturlash tilida direktiva quyidagicha e’lon qilinadi:
#pragma omp master
Quyidagi misolda master direktivasining ishlashi keltirilgan. n o’zgaruvchi lokal hisoblanib, har bir oqim o’zining nusxalari bilan ishlaydi. Dastavval barcha oqimlar n o’zgaruvchiga 1 qiymatini o’zlashtirishadi. So’ngra bosh oqim n o’zgaruvchiga 2 qiymatini o’zlashtiradi va barcha oqimlar ushbu qiymatni ekranga chop etadi. Misolda ko’rinib turibdiki, master direktivasini har doim bitta oqim bajaradi. Ushbu misolda barcha oqimlar 1 sonini ekranga chiqarsa, bosh oqim dastlab 2 sonini, so’ngra esa 3 sonini ekranga chop etadi:
#include "stdafx.h" #include
using namespace System;
int main(array ^args)
{
int n;
#pragma omp parallel private(n)
{
n=1;
#pragma omp master
{
n=2;
}
Console::WriteLine("n ning birinchi qiymati: "+ n); #pragma omp barrier
#pragma omp master
{
n=3;
}
Console::WriteLine("n ning keyingi qiymati: "+ n);
}
return 0;
}
Quyidagi misolda private shartini ishlashi keltirilgan. Ushbu misolda parallel muhitda n o’zgaruvchi lokal o’zgaruvchi sifatida e’lon qilingan. Bu har bir oqimning n ning nusxlari bilan ishlashini bildiradi va har bir oqimning boshida n o’zgaruvchi initsializatsiya qilinadi. Dasturning bajarilish vaqtida
o’zgaruvchining qiymati 1 ga o’zlashtirilgandan keyin ketma - ket muhitda chop etiladi, ikkinchi marta barcha oqimlar n o’zgaruvchining nusxasini parallel muhitning boshida chop etadi. Keyin barcha oqimlar o’zining tartib nomerini omp_get_thread_num() funksiyasi yordamida olingan
qiymatini n ga o’zlashtirib chop etishadi. Parallel muhit tugagandan so’ng n o’zgaruvchining qiymati yana bir marta chop etiladi, bunda uning qiymati 1 ga teng bo’ladi (parallel muhit ishlashi davomida o’zgarmagan):
#include "stdafx.h" #include
using namespace System;
int main(array ^args)
{
int n;
Console::WriteLine("ketma-ket muhitga kirishdagi n ning qiymati: " + n); #pragma omp parallel private(n)
{
Console::WriteLine("parallel muhitga kirishdagi n ning qiymati: " + n); n=omp_get_num_threads();
Console::WriteLine("parallel muhitdan chiqishdagi n ning qiymati: " + n);
}
Console::WriteLine("ketma-ket muhitdan chiqishdagi n ning qiymati: " + n); return 0;
}
C/C++ dasturlash tillarida dasturning parallel muhitda aniqlangan statik o’zgaruvchilar umumiy (shared) o’zaruvchi hisoblanadi. Dinamik ajratilgan xotira ham umumiy hisoblanadi, ammo ko’rsatgich ham umumiy ham lokal bo’lishi mumkin.
Thread private direktivasi C/C++ dasturlash tillarida umumiy bo’lgan o’zgaruvchilarni lokal ko’rinishiga o’tkazib berishi mumkin. Global obyektlarni lokal o’zgaruvchilarini to’g’ri ishlatilishda dasturning turli qismlarida bir xil oqimlar tomonidan ishlatilishiga ishonch hosil qilish kerak. Lokal o’zgaruvchilarga turli parallel muhitlardan murojaat qilinsa, unda ularning qiymatini saqlab qolish uchun hajmli parallel muhitlar bo’lmasligi kerak, oqimlar soni ikkala muhitlarda ham bir hil bo’lishi kerak va OMP_DYNAMIC o’zgaruvchisining qiymati birinchi muhit boshlangandan ikkinchi muhit boshlangancha false deb o’rnatilgan bo’lishi kerak. Thread private tipida e’lon qilingan o’zgaruvchilar OpenMP direktivalarining copy in, copy private, schedule, num_threads_if shartlaridan boshqa shartlarida ishlatib bo’lmaydi.
Qulflar. OpenMP da sinxronizatsiya variantlaridan biri qulflar (locks) mexanizmidan foydalanish mumkin. Qulflar sifatida umumiy butun sonli o’zgaruvchilar (hajmi adresni saqlash uchun yetarli bo’lishi kerak) ishlatiladi. Ushbu o’zgaruvchilar sinxronizatsiya primitivlari parametrlari kabi ishlatilishi kerak.
Qulflar quyidagi uchta holatda bo’lishi mumkin: initsializatsiya qilinmagan, bloklangan yoki bloklanmagan. Bloklanmagan qulf ayrim oqimlar tomonidan egallangan bo’lishi mumkin. Undan so’ng uning holatini bloklashga o’tadi. Bloklanmagan qulfni aynan o’sha oqim ozod qilishi mumkin, undan so’ng qulf bloklanmagan holatiga o’tadi.
Ikkita turdagi qulflar mavjud: oddiy qulflar va murakkab qulflar. Murakkab qulflar bitta oqim tomonidan ozod qilinishidan oldin ko’p marotaba egallanishi mumkin, oddiy qulflar esa faqat bir marta egallanishi mumkin. Murakkab qulflar uchun egallanganlik koeffitsienti (nesting count) tushunchasi kiritiladi. Dastlab uning qiymati nolga teng bo’ladi, har bir egallanganda uning qiymati birga oshadi va har bir ozod qilinganda birga kamayadi. Murakkab qulflar egallanganlik koeffitsienti nolga teng bo’lsa bloklanmagan hisoblanadi.
Oddiy va murakkab qulflarni initsializatsiya uchun C/C++ dasturlash tillarida quyidagi funksiyalar ishlatiladi:
void omp_init_lock(omp_lock_t *lock);
void omp_init_nest_lock(omp_nest_lock_t *lock); C/C++ dasturlash tillarida quyidagicha e’lon qilinadi:

Xulosa
Xulosa qilib aytish mumkinki endilikda python dasturlash tilini o'rganish istagi sizda paydo bo'lgan bo'lsa uni qayerdan o'rganish mumkin degan savol bo'ladi. Agar siz ingliz tilini bilsayiz Youtube da bir qancha videolar bor siz o'zbek tilini bilsangiz unda uzbek developer kannalida python dasturlash tili videolari bor. Ushbu maqola tajribali Python tamerlari uchun emas, ular uchun bu ilon to'pini ochish bolalar o'yinidir, aksincha, yangi qo'shilgan python uchun juda ko'p o'qish qobiliyatlarini qisqacha ko'rib chiqish. Afsuski, Pythonda multithreading mavzusida rus tilida juda ko'p materiallar mavjud emas va masalan, GIL haqida hech narsa eshitmagan pitonchilar menga hasad qilayotgan muntazamlik bilan duch kela boshladilar. Ushbu maqolada men ko'p qirrali pythonning eng asosiy xususiyatlarini tavsiflashga, GIL nima ekanligini va u bilan qanday yashashni (yoki u holda) va boshqalarni aytib berishga harakat qilaman.


Foydalanilgan manbalar ro'yxati


1. Azizxujayeva N.N. Pedagogik texnologiya va pedagogik maxorat. T.:TDPU, 2003.


2. Ishmuxamedov R.J. Innovasion texnologiyalar yordamida ta’lim samaradorligini oshirish yullari. T.: TDPU, 2004.
3. Yunusovna, S. Z. The Role of the Conversational Implicative in Linguopragmatics on the Basis of Formal and Informal Letters. TDO'TAU, 2022
4. Ochilova G.O., Musaxanova G.O. Pedagogik maxorat. Toshkent. TDIU, 2007 yil
5. www. Inter- pedagogika. ru.


Download 0,69 Mb.
1   ...   7   8   9   10   11   12   13   14   15




Download 0,69 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



O’zbekiston Respublikasi Axborot Texnologiyalari va Kommunikatsiyalarini Rivojlantirish Vazirligi Muhammad al-Xorazmiy nomidagi Toshkent Axborot Texnologiyalari Universiteti Individual Loyiha Mavzu

Download 0,69 Mb.