Fanidan 6 – Amaliy ishi Bajardi: S. Omonov Qabul qildi: Sh. Muqimov

|
Fanidan 6 – Amaliy ishi Bajardi: S. Omonov Qabul qildi: Sh. Muqimov
|
Sana | 02.12.2023 | Hajmi | 57,52 Kb. | | #109515 |
Bog'liq 6-amaliy ishi.Omonov Sarvar
O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR
VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
QARSHI FILIALI
KOMPYUTER INJINIRINGI FAKULTETI
K I-11-20 GURUH TALABASINING
Parallel ishlov berish
FANIDAN
6 – Amaliy ishi
Bajardi: S.Omonov
Qabul qildi: Sh. Muqimov
6-Amaliy ishi.
Mavzu: Intel Cilk Plus kutubxonasi bilan tanishish va uning yordamida parallel dasturlar tuzish.
Ishning maqsadi: ntel Cilk Plus kutubxonasi bilan tanishish va uning yordamida parallel dasturlar tuzish haqida tushunchaga ega bulish va bajarish.
Intel Cilk Plus - bu ko'p bosqichli dasturlarni yozishni soddalashtirish uchun mo'ljallangan C++ tilining kengaytmasi . Cilk Plus - bu dinamik mavzuni rejalashtiruvchi va kompilyatorga ma'lum bir rejalashtirish sxemasidan foydalanish imkoniyati haqida gapiradigan kalit so'zlar to'plami. ICC kompilyatori uchun Cilk Plus qo'llab-quvvatlashi amalga oshirildi .
Cilk Plus va ish vaqtini qo'llab-quvvatlash kutubxonasi ABI uchun texnik xususiyatlar Intel tomonidan 2010 yilda nashr etilgan [1]
2011 yil avgust oyida Intel bepul GCC kompilyatorining 4.7 filialiga va BSD3 litsenziyasi ostida ish vaqtini qo'llab-quvvatlash kutubxonasining ochiq manba kodiga Cilk Plus buyruqlari qo'shilganligini e'lon qildi
Mana cilk_spawn dan aniqroq foydalanish . Quyidagi misolda biz “Salom dunyo!” xabarini chop qilmoqchimiz. va keyin "Bajarildi!" dastur tugashidan oldin. Kodni bir necha marta ishga tushiring.
#include
#include
static void hello(){
int i=0;
for(i=0;i<1000000;i++)
printf("");
printf("Hello ");
}
static void world(){
int i=0;
for(i=0;i<1000000;i++)
printf("");
printf("world! ");
}
int main(){
cilk_spawn hello();
cilk_spawn world();
printf("Done! ");
}
#include
#include
using namespace std;
static void hello(){
for(int i=0;i<1000000;i++)
cout << "";
cout << "Hello " << endl;
}
static void world(){
for(int i=0;i<1000000;i++)
cout << "";
cout << "world! " << endl;
}
int main(){
cilk_spawn hello();
cilk_spawn world();
cout << "Done! ";
}
Ehtimol siz payqagan narsa shundaki, xabarlar ko'pincha tartibsiz chop etiladi. Buning sababi, cilk_spawn ularni asinxron tarzda ishga tushiradi. Hello() va world() funksiyalarining har biri ichida tsikllar bo'lgani uchun "Bajarildi!" ba'zan hello() , world() yoki ikkalasidan oldin chop etishi mumkin . E'tibor bering, biz dastur uchun qo'shimcha ishlarni yaratish uchun tsikllardan foydalanganmiz - agar siz tsikllarni olib tashlasangiz, bayonotlar tartibda chop etiladi, ya'ni cilk_spawn quvvatidan to'liq foydalanish uchun sizga katta hajmdagi ish kerak bo'ladi.
2.2. cilk_sync
Oldingi misolni ko'rib chiqsangiz, parallel ravishda ishlarni bajarishning ba'zi nojo'ya ta'sirlarini ko'rishingiz mumkin - vazifalar ko'pincha tugaydi. Ba'zan siz ba'zi vazifalarni tartibda bajarilishini xohlaysiz, chunki ular bir-biriga bog'liq bo'lishi mumkin, bu holda siz cilk_sync dan foydalanasiz .
Agar siz cilk_sync kodini kodning biror joyiga joylashtirsangiz, bu dastur davom etishi uchun avval yaratilgan barcha vazifalar bir-birini bajarishini kutishiga olib keladi. Oldingi "Salom dunyo! Bajarildi!" Masalan, bitta cilk_sync iborasini "Bajarildi!" chop etilgan bo'lsa, "Bajarildi!" hello() va world() lar o'z ishini tugatgandan keyingina chop etiladi .
#include
#include
.
.
.
int main(){
cilk_spawn hello();
cilk_spawn world();
cilk_sync;
printf("Done! ");
}
|
| |