Mavzu: Intel Cilk Plus kutubxonasi bilan tanishish va uning yordamida parallel dasturlar tuzish. Ishning maqsadi


Download 27.55 Kb.
Sana05.11.2023
Hajmi27.55 Kb.
#1748975
Bog'liq
6amaliy


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! ");
}

Download 27.55 Kb.

Do'stlaringiz bilan baham:




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