Parallel Algoritmlar
BUXORO DAVLAT UNIVERSITETI
FIZIKA-MATEMATIKA FAKULTETI
AMALIY MATEMATIKA YONALISHI
ALGORITMLAR NAZARIYASI FANIDAN
MAVZU: Parallel Algoritmlar
Bajardi: Qalandarov J.
Rahbar: Mominov B.
Buxoro-2010
Mundarija:
Mavzuning dolzarbligi
Bu ishda ikki vazifa algoritmlarning dastur effektivligiga qanday tasir etishi va turli xil algoritmlarning analizini organishdir. Bazi bir zamonaviy dasturiy taminotlarga etibor qilsak, ularning ayrim tuzuvchilari na dasturning ishlash effektivligiga va na xotiraning aql bilan ishlatilishiga etibor qilishadi. Ularning fikricha, dastur kop joy olsa, foydalanuvchi qoshimcha xotira sotib olishga majbur boladi yoki yangi tezroq ishlaydigan komyuter sotib oladi.
Lekin kompyuterlarning tezligi cheksiz kattalashmaydi. U simli kabelda elektronlarning harakat tezligi bilan, optik kabellarda yoruglikning tarqalish tezligi bilan va hisoblashda qatnashadigan kompyuterlar orasidagi aloqa kanallarining komutativlik tezligi bilan chegaralanadi. Boshqa cheklovlar kompyuter imkoniyatlari bilan bogliq emas, balki qoyilgan masalaning murakkablik darajasiga bogliq. Shunday masalalar mavjudki, ularni yechish uchun eng tez ishlaydigan algoritmlar qollanilganda ham odam umri yetmaydi. Bu masalalar orasida yaqinroq javob olish uchun algoritmlar kerak boladigan, juda zarurlari ham mavjud.
Parallelikka kirish
Bu kurs ishida biz parallel dasturlashda ishlatiladigan asosiy tushunchalarni keltiramiz. Avvalo, ishni kompyuterning malumotlarni qayta ishlash tushunchasini keltirishdan boshlaymiz. Songra kompyuter sistemalarining arxitekturasiga otamiz. Oxirda parallel algoritmlarning analizida ishlatiladigan prinsiplarni tahlil qilamiz.
Komyuter sistemalarining kategoriyalari.
Komyuter sistemalarini tortta asosiy kategoriyaga ajratish mumkin. Bu uchun qanday ishlashi haqidagi korsatmani birmuncha almashtiramiz. Markaziy protssessor nuqtai nazaridandastur rasshifrovka qilish va bajarish kerak bolgan qoidalar oqimidir. Malumotlarni ham oqim korinishida kiruvchi deb hisoblash mumkin. Biz tahlil qiladigan tortta kategoriya malumot va qoidalarning bitta oqimga kirish-kirmasligi bilan aniqlanadi.
- Bitta qoida / bitta malumotlar oqimi.
Bitta qoida / bitta malumotlar oqimi (SISD) modeli ozida bitta protssesorli klassik modelni korsatadi. Unga eski avlod kompyuterlari bilan bir qatorda kopgina zamonaviy kompyuterlar ham misol boladi. Bunday kompyuter protsessori har qanday vaqt momentida faqatgina bitta qoidani bajarishga qodir va faqat bitta malumotlar toplami bilan ishlay oladi. Bu kabi ketma-ket sistemalarda boshqa kategoriyalardan farqli ravishda hech qanday parallellik yoq.
- Bitta qoida / bir nechta malumotlar oqimi.
Bitta qoida / bir nechta malumotlar oqimibolgan komyuterlarda (SIMD) bir xil operatsiyani turli xil malumotlar bilan ishlovchi bir nechta protssessorlar mavjud. SIMD - mashinalar bazan vektorli protsessorlar deb ham ataladi, chunki ular vektorlar ustida amal bajarish uchun juda qulay. Bunda har qaysi protssesorga bitta vector koordinasi beriladi va amal bajarilgandan song natija vektor kelib chiqadi. Masalan, vektorlarni qoshish koordinatalar orqali bajariladigan amal. Vektorlar yigindisining birinchi koordinatasi qoshiluvchi vektorlar birinchi koordinatalarining yigindisi, ikkinchi koordinata ikkinchi koordinalar yigindisi va hokazo. Bizning SIMD mashinada har qaysi protssesor kiritiluvchi vektorlarning ikkita koordinatasini haqida qoidasi oladi. Bu yagona qoidani bajargandan song natija toliq hisoblanadi. Etibor bersak, N ta elementdan iborat vektorni yechishga SISD mashinaga N ta iteratsion siklni bajarish kerak bolsa, protsessorlar soni N tadan kam bolmagan SIMD mashinaga bitta amalning ozi yetarli.
- Bir nechta qoida / bitta malumotlar oqimi
Bir vaqtda faqat bir xil malumotlar ustida amal bajarish avval galati tuyulishi mumkin, chunki qndaydir bir sonni kvadratga kotarish, ikkiga kopaytirish, onga bolish kabi dasturlar kamdan-kam uchraydi. Lekin bu holatga boshqa nuqtai-nazardan qarasak, bunday tipdagi mashinalarda sonning tub yoki murakkabligini tekshirishni takomillashtish mumkinligini koramiz. Agar protsessorlar soni N ta bolsa, unda biz ixtiyoriy 1 va N2 orasidagi sonlarning tub yoki murakkabligini MISD mashina orqali bitta operatsiyada tekshirishimiz mumkin. Agar X son murakkab bolsa, unda ga togri kelmaydigan boluvchisi bolishi kerak. Sonning tubligini tekshirish uchun X<N2 sonni birinchi protsessorga ikkiga bolishga, ikkinchisini uchga bolishga, uchinchisini tortga va hokazo (K-1) protsessorni K ga bolishga buyruq beramiz. Bunda K=[]. Agar bu protsessorlarning birontasida bolish muvaffaqiyatli amalga oshirilsa, X murakkab son. Shuning uchun biz natijaga bitta operatsiya bilan erishamiz. Bundan korish qiyin emaski, ketma-ket mashinaga bu algoritmni bajarish uchunkamida har birida bitta bolish amalga oshiriladigan ta otish kerak boladi.
- Bir nechta qoida / bir nechta malumotlar oqimi
Bu kategoriya kategoriyalar orasida ancha murakkabidir. MIMD sistemalar holatida biz oz qoidasini amalga oshira oladigan bir nechta protsessor bilan ish koramiz. Bundan tashqari, bir nechta bir nechta malumotlar oqimi ham mavjud va har qaysi protsessor oz malumotlar toplami bilan ishlay oladi.
Bu amaliyotda MIMD sistema har qaysi protsessorda oz dasturini yoki osha dasturning alohida qismlarini yoki SIMD konfiguratsiyaday vektorli amallarni bajara olishini anglatadi. Kopchilik parallelizmning yangicha yondashuvlarida, masalan komyuter klasterlari yoki multiprotsessorli sistemalarning asosida MIMD kategoriya yotadi.
Parallel arxitekturalar
Parallel kompyuterlar tizimlari arxitekturasida ikkita jihat asosiy rol oynaydi:
- Protesssorlar va ularning xotiralari ozaro qanday boglanganligi;
- Protsessorlarning qanday ozaro tasir qilishi.
Parallel algoritmlarni muhokama qilganda biz ana shu jihatlar haqida gapiramiz. Negaki u yoki bu yechimlar turli masalalar uchun turli samaradorlikka ega bolishi mumkin.
Kuchli va kuchsiz boglangan mashinalar.
Kuchsiz boglangan mashinalarda har protsessor oz xususiy xotirasiga ega. Lekin protsessorlar ortasidagi aloqa tarmoq kabellari orqali amalga oshiriladi. Bu kompyuterlar klasterlarining bu kompyuterlar klasterlarining arxitekturasi shunday: klasterning har bir kompyuteri alohida kompyuter tizimi va mustaqil iashlay oladi. Parallellik bosh boshqaruvchi kompyuter orqali masalani kompyuterlarga taqsimlash hisobiga amalga oshiriladi. Tor aloqali mashinalarda barecha protsessorlar umumiy markaziy xotiradan foydalanadi. Protsessorlar ortasida ozaro tasir shunday amalga oshiriladiki, bunda ulardan biri axborotni umumiy xotiraga yozadi, boshqalari esa shu yerdan oqib oladi.
Protsessorlarning ozaro tasiri.
Kuchsiz aloqali mashinalar ortasida protsessorlarning ozaro tasiri kabellar yoki similar orqali amalga oshirilishini aytib otgan edik. Bunday aloqalarning tashkil qilish mumkin bolgan hollarini qaraymiz. Spekrning bir uchida toliq aloqali tarmoq joylashgan. Bunda har bir protsessor boshqalari bilan ulangan. Boshqa bir uchida esa chiziqli tarmoq mavjud. Bunda protsessorlar zanjirsimon boglangan va har bir protsessor ikkita uchidagidan tashqari ikkita qoshnisi bilan boglangan (uchidagi kompyuterlar bitta qoshni bilan boglangan). Toliq aloqali tarmoqda (1-rasm) axborot protsessordan protsessorga juda tez uzatiladi, lekin buni tashkil qilish uchun juda uzun kabel talab qilinadi. Chiziqli tarmoqda esa axborot sekinroq uzatiladi. Sababi, axborot oraliq tugunlardan otadi va zanjiring biron joyidan uzilishi malumtlar oqimini uzib qoyadi. Chiziqli tarmoqqa alternative sifatida turgunlikni oshiruvchi halqali strukturani tashkil qilish mumkin. U ham chiziqli tarmoq kabi qurilgan. Faqat zanjirning birinchi va songgi zvenosi ozaro ulangan bunday tarmoqda axborot tez tarqaladi. Negaki, axborot protsessorning yarmidan kamidan otadi.
1-rasm. Toliq aloqali tarmoq
2- rasm. Chiziqli tarmoq
3- rasm. Halqali tarmoq
4-rasm. Chambarali tarmoq
Masalan, 2- rasmdagi chiziqli tarmoqda birinchi tugundan beshinchi tugunga borish uchun uchta oraliq tugundan otishi kerak. 3-rasmdagi halqali tarmoqda esa bitta tugundan otishi yetarli 4-rasmdagi tarmoqda protsessorlar ikki olchovli chambaraning uchlarida joylashgan. Kabellar qoshnilarni gorizontal boyicha yoki vertical boyicha ulagan. Bunday tarmoq halqalidan samarali va turgun, lekin kabel koproq sarf boladi.
Parallel arxitekturada protsessorlarni ulashning bundan boshqa imkoniyatlari ham mavjud. Bularga daraxtsimon tarmoqlar (protsessorlar bironta daraxtni hosil qiladi) va ikki olchovli chambarani umumlashtiradigan giperkublarni misol qilish mumkin.
Parallel algoritmlar analizining prinsiplari
Parallel algoritmlar bilan ishlashda bizni ikki tushuncha qiziqtiradi:
- Tezlanish koeffitsiyenti
- Qiymati
Parallel algoritmlarning tezlanish koeffitsiyenti optimal ketma-ket algoritmning qanchalik tez ishlashini korsatadi. Malumki optimal tartiblash algoritmi O(Nlog N) ta operatsiyani talab qiladi. O(N) murakkablikdagi parallel tartiblash algoritmining tezlanish koeffitsiyenti O(log N) ni tashkil qiladi.
Bizni qiziqtiadigan ikkinchi tushuncha parallel algoritmning qiymati bolib, uni biz ishlatilayotgan protsessorlar sonining algoritm murakkabligiga kopaytmasi orqali aniqlaymiz. Agar bizning holatda parallel tartiblash algoritmi O(N) ta operatsiya uchun kiruvchi yozuvlar soniga teng protsessorlarni talab qilsa, uning qiymati O(N^) ga teng. Bu parallel tartiblash algoritmi qimmatliroq ekanligini bildiradi, yani bitta protsessordagi ketma-ket tartiblash algoritmining qiymati uning murakkabligi bilan mos keladi va O(Nlog N) ga teng.
Zarur tushunchalardan yana biri vazifaning tarkibiy qismlarga ajralishidir. Agar bizning parallel tartiblash algoritmimiz uchun yagona imkoniyat protsessorlar sonining kiruvchi yozuvlar soniga tengligi shart bolsa, unda bunday algoritm kiruvchi yozuvlar sonining yetarlicha katta bolishi bilan befoyda bolib qoladi. Ketma-ket tartiblash algoritmida hech qanday oxshash cheklovlar yoq. Bizni koproq protsessorlar soni kiruvchi malumotlar potensial hajmidan yetarlicha kam bolgan va bu son kirish uzunligining ortishi bilan kattalashishni talab qilmaydigan parallel tartiblash algoritmlari qiziqtiradi.
PRAM modeli
Parallel sistemalaning muammolaridan biri malumotlarni xotiradan oqish va xotiraga yozishdir. Masalan, agar ikkita protsessor malumotlarni umumiy xotiraning aynan bitta joyiga yozishga urinsa nima boladi?
Ilgari biz korgan algoritmlarda bu algoritmni amalga oshiradigan mashina ilgaridan berilgan xotira yacheykasi (RAM) ga togridan-togri kirish imkoniyatiga ega. Hozir biz qaraydigan algoritmlar bunday mashinalarning parallel varianti (PRAM) ga asoslangan. Bizning PRAM mashinalarning protsessorlari ozaro chambarchas boglangan va umumiy xotira blokidan foydalanadi. Har bir protsessorda uncha katta hajmda bolmagan malumotlarni saqlash imkoniyatiga ega bolgan bir nechta registrlar mavjud, malumotlarning asosiy qismi esa umumiy xotirada saqlanadi.
Protsessorlar orasidagi chambarchas bogliqlikdan tashqari biz yana ular hammasi xotiradan malumotlarni oqish, ular ustida operatsiya bajarish va natijani xotiraga yozishdan iborat bolgan bir xil siklni amalga oshiradi deb faraz qilamiz. Bu barcha protsessorlar bir vaqtda xotirani oqishini, bir vaqtda oqilgan malumotlarni qayta ishlashini, bir vaqtda yozuvni ham bajarishini anglatadi. Xotira yacheykalari ustidagi bahs nafaqat malumotlarni oqishda, balki natijani yozishda ham kelib chiqadi. Uch qadamli siklning shartlari agar Y protsessor xotira yacheykasidagi malumotlarni ozgartirgan vaqtda, X protsessor hozirgina oqilgan malumotlarni qayta ishlashi natijasida biz nima bolishi haqida qaygurmasak ham bolishini anglatadi. Bundan tashqari, bitta protsessor xotiradan malumotlarni oqiyotgan vaqtda, ikkinchisi unga biron malumot yozishga urinishi kabi vaziyatlar ham yuzaga kelmaydi.
Bahslarga faqatgina xotiraga kirishga raqobatli yoki maxsus huquq berish orqali ruxsat berish mumkin. Raqobatli kirishda xotiraning aynan bitta yacheykasiga bir vaqtda bir nechta protsessor murojaat qilishi mumkin. Maxsus kirishda esa berilgan xotira yacheykasiga aniq momentda faqat bittagina protsessor murojaat qila oladi, bir vaqtdagi ikkita murojaat qilishga urinish esa xatolik haqidagi xabarning paydo bolishiga olib keladi. Raqobatli kirish oqish vaqtida muammo keltirib chiqarmaydi. Bundan tashqari bizga maxsus oqish huquqi bilan ishlaydigan algoritmlar ham kerak. Maxsus oqish huquqiga ega bolgan bir nechta protsessor bir vaqtda bitta xotira yacheykasiga murojaat qilsa xatolik paydo boladi.
Bundan tashqari yozuv vaqtida maxsus va raqobatli kirishlarni tanlashda ham muammo mavjud. Maxsus kirishda har qaysi xotira yacheykasiga yozuv huquqi faqat bitta protsessorga beriladi, bir necha protsessorlar yozishga harakat qilsa, xatolik paydo boladi. Lekin ikkita protsessor ikkita xotira yacheykasiga bir vaqtda yoza oladi. Raqobatli kirishda esa, masala birmuncha murakkab, yani kelib chiqadigan konfliktlarga ruxsat bera olish kerak. Darajaga ega modelda har bir protsessorga daraja beriladi va yozuv huquqi kattaroq darajali protsessorga beriladi.
Modelning soddalashtirilgan protsessor darajasi uning nomeriga togri keladi, yani nomer qancha kichik bolsa, daraja shuncha katta boladi. Agar, masalan, bitta xotira yacheykasiga 4- va 7- nomerli protsessorlar yozishga urinsa, huquq 4-nomerli protsessorga beriladi.
Ixtiyoriy kirishli modelda raqobat qiladigan protsessorlardan ixtiyoriy biri olinishi mumkin. Oddiy modelda esa faqatgina yoziluvchi malumotlar ustma-ust tushgandagina bir vaqtda yozishga ruxsat beriladi. Kombinatsiyali modelda yoziluvchi malumotlar ustidasistema bir qancha amallarni bajaradi. Masalan, ularning yigindisi, kopaytmasi, eng katta yoki eng kichik elementi yoki mantiqiy operatsiya natijasi (va, yoki) yozilgan bolishi mumkin. Turli holatlarda bu imkoniyatlardan har biri foydali bolishi mumkin.
Bundan kelib chiqadiki, bizda yozish va oqish imkoniyatlarining 4 xil kombinatsiyasi mavjud:
- Raqobatli oqish / raqobatli yozish (CRCW);
- Raqobatli oqish / maxsus yozish (CREW);
- Maxsus oqish / raqobatli yozish (ERCW);
- Maxsus oqish / maxsus yozish (EREW);
Oddiy parallel operatsiyalar
Endi ikkita elementar operatsiyani koramiz:
- Kiruvchi malumotlarni protsessorlarga taqsimlash;
- Royxatning eng katta va eng kichik elementini aniqlash;
Quyida biz i- protsessorni Pi , protsessorlar sonini p, kiruvchi royxatdagi elementlar sonini N, j- xotira yacheykasini Mj bilan belgilaymiz. Bajariladigan parallel operatsiyalar qavsda Parallel Start va Parallel End kabi yoziladi. Agar boshida bitta blok operatsiyasi, undan keyin ikkinchisi parallel bajarilsa, ular alohida qavslar juftiga kiritiladi.
CREW PRAM modelida berilganlarni taqsimlash
Eslaymizki, CREW modelda bitta xotira yacheykasini bir vaqtda bir necha protsessorlar oqiy oladi. Natijada, berilganlarni barcha protsessorlarga juda tez kiritish mumkin.
P[1] M[1] ga qiymatni kiritadi
Parallel Start
for k=2 to p do
P[k] M[1] dan qiymatni
oqiydi
end for
Parallel end
Taqsimlash 2 etapda bajariladi. Birinchisida malumotlar xotiraga yoziladi, ikkinchisida barcha protsessorlar uni oqiydi. Bunday tezlik faqatgina raqobatli oqish hisobiga bolishi mumkin. Endi bu protsedura chekli oqish modeli uchun qanday korinishda bolishini koramiz.
EREW PRAM modelda berilganlarni taqsimlash
Maxsus oqish modelida PL protsessor tomonidan malumotni faqatgina bitta protsessor oqiy oladi. Agar biz shunchaki, qolgan protsessorlar bilan ketma-ket oqish siklini tashkil qilsak, unda parallelizmling barcha ustunliklarini korsatuvchi ketma-ket algoritmga ega bolamiz. Mabodo, agar biz ikkinchi protsessorda malumotni boshqa xotira yacheykasiga yozish uchun oqish / qayta ishlash / yozish siklidan foydalansak, unda keying qadamda malumotni ikkita protsessor oqiy oladigan boladi. Keyin uni yana ikkita yachekaga yozsak, biz tortta protsessordan foydalana olamiz. Natijada bizda quyidagi algoritm kelib chiqadi.
Р[1] М[1] ga qiymat kiritadi
procLoc=1
for j=1 to log p do
Parallel Start
for k=procLoc+1 to 2*procLoc do
P[k] M[k-procloc] ni oqiydi
P[k] M[k] ga yozadi
end for k
Parallel End
procLoc=procLoc*2
end for j
Avval algoritm malumotni M1 yacheykaga yozadi. Tashqi siklning birinchi qadamida, P2 protsessor bu malumotni oqiydi va uni M2 ga yozadi, PL ozgaruvchi bolsa, 2 ni qabul qiladi. Ikkinchi otishda P3 va P4 protsessorlar M1 va M2 yacheykalar tarkibini oqiydi, PL ozgaruvchi esa 4 ni qabul qiladi. Uchinchi otishda P5 dan P8 gacha protsessorlar M1 dan M4 gacha yacheykalarning tarkibini oqiydi va uni M5 dan M8 gacha yacheykalarga yozadi.
Korinib turibdiki, (p 2 ning darajasi bolganda) oxirdan bitta oldingi qadamda protsessorlarning yarmi kerakli qiymatni oqiydi va M1 dan Mp/2 gacha bolgan yacheykalarga yozadi, undan keyin esa qolgan protsessorlar uni oqiy oladi. Bundan kelib chiqadiki, oqish va yozish qadamlarini bitta siklda bajarish mumkin ekan, parallel blok bitta siklni bajaradi, tashqi sikl esa, log p iteratsiyani ishlab chiqaradi. Shuning uchun bu parallel taqsimlash algoritmi O(log p) ta operatsiyani bajaradi.
Royxatning eng katta elementini qidirish
Bunda va bundan keying royxatlar ustid bajariladigan amallarda biz faraz qilamizki, royxat M1 dan MN gacha bolgan xotira yacheykalarida joylashgan. Bundan tashqari yana faraz qilamizki, bizning ixtiyorimizda p=N/2 ta protsessor mavjud. (p<N/2 bolgan holatni algoritmni tuzgandan keyin muhokama qilamiz.)
Birinchi otishda Pi protsessor M2i va M2i+1 yacheykalarning qiymatlarini taqqoslaydi va Mi yacheykaga ulardan kattasini yozadi. Ikkinchi otishda bizga protsessorlarning faqat yarmi kerak va ularning yordamida biz Mi dan MN/2 gacha bolgan yacheykalardagi elementlar juftliklarni taqqoslaymiz hamda juftliklarning katta elementini M1 dan MN/4 gacha bolgan yacheykalarga yozamiz. Natijada quyidagi algoritmga ega bolamiz.
count=N/2
for i=1 to log(count)+1 do
Parallel Start
for j=1 to count do
P[j] M[2j] ni X ga va M[2j+1] ni Y ga oqiydi
if X>Y
P[j] Х ni M[j] ga yozadi
else
P[j] Y ni M[j] ga yozadi
end if
end for j
Parallel End
count=count/2
end for i
Korinib turibdiki, har bir qadamda orasidan kattasi topiladigan qiymatlar soni biz yagona sonni topmagunimizcha 2 martadan kamayadi. Bu bitta protsessorda turnir metodini amalga oshirishga juda ozshaydi. Agar p<N/2 bolsa, oldindan qiymatlar sonini 2*p gacha kamaytirish mumkin, keyin esa algoritm yuqoridagiday bajariladi.
Korinib turibdiki, sikldagi otishlar soni log N ga teng, murakkabligi esa O(log N) tartibga ega.eslaymizki, algortmning qiymatini yuqorida muhokama qilgan edik, yani biz qiymatni ishlatilgan protsessorlar sonining sarflangan vaqtga kopaytmasi kabi aniqlagan edik. Shuning uchun algoritmning qiymati N/2*O(N log N) ga teng. Oddiy ketma-ket algoritm shu ishni O(N) operatsiya bilan bajaradi, shuning uchun u arzon, parallel algoritm esa anchagina tez ishlaydi.
Agar parallel hisoblashlar haqiqatan ham foyda keltiradigan bolsa, unda ketma-ketdan qolishmaydigan alternative qarash bolishi kerak. Biz avvalgi variantga diqqat bilan qarasak, protsessorlar soni juda katta qiymatni berganini koramiz. Bu sonni kamaytirish mumkinmi? Agar biz butun qiymati O(N) tartibda va parallel algoritmning bajarilish vaqti esa (O log TV) tartibda bolishini xohlasak, protsessorlar sonining tartibi ham O(N/log N) tartibda bolishi kerak. Bu shuni anglatadiki, birinchi otishda har qaysi N/(N/log TV) tartibda bolishi kerak. Bu shuni anglatadiki, birinchi otishda har qaysi N/(N/log TV)=log N ta qiymatni qayta ishlashi kerak. Natijada quyidagi algoritmga otamiz.
Parallel Start
for j = 1 to N/log N do
P[j] M[l+(j-1)*log N] dan M[j * log N] gacha yacheykalarning maksimum qiymatini ketma ket algoritm bilan topadi
P[j] M[j] ga topilgan maksimumni yozadi
end for
Parallel End
count=N/2
for i=1 to log(count)+1 do
Parallel Start
for j=1 to count do
P[j] M[2j] ni X ga va M[2j+1] ni Y ga oqiydi
if X>Y
P[j] Х ni M[j] ga yozadi
else
P[j] Y ni M[j] ga yozadi
end if
end for j
Parallel End
count=count/2
end for i
Bu variantda dastlabki qayta ishlash bosqichi mavjud bolib, har qaysi protsessor log N ta elementdan tashkil topgan royxat ustida ketma-ket algoritm bajaradi. Bu esa O(log TV) operatsiyani talab qiladi. Algoritmning ikkinchi qismida bizning boshlangich urinishimiz keltirilgan. Bunda talab qilinadigan protsessorlar soni (TV/log N)/2 gacha kamaygan (lekin baribir bu bosqichda dastlabki qayta ishlash uchun avvalgiday N/log N ta protsessor talab qilinadi).
Shuning uchun algoritmning toliq qiymati quyidagiga teng:
Qadam |
Qiymat |
Vaqt |
Dastlabki qayta ishlash |
(N / log N)*O(log N)=O(N) |
O(log N) |
Asosiy sikl |
[(N / log N)/2]*O(log N)=O(N) |
O(log N) |
Jami |
O(N) |
O(log N) |
Parallel izlash
Izlashning parallel metodlarini organishni biz eng oddiy, yani protsessorlar soni royxatning elementlari soniga teng bolgan korinishidan boshlaymiz. Analiz bizga bu yechim qiymati boyicha optimal yechimdan qanchalik yiroqligini korsatadi. Undan keyin undan keyin biz maksimumni hisoblashda qollanilganiday, qiymatni protsessorlar sonini kamaytirish hisobiga kamaytirishga harakat qilamiz. Bunda faraz qilamizki, royxatda dublikatlar yoq.
Agar protsessorlar soni royxatning elementlari soniga teng bolsa (p=N), unda har qaysi protsessor qidirilayotgan qiymatni royxatdagi oziga tegishli element bilan taqqoslaydi. Agar oxshashlik sodir bolsa, oxshashlikni topgan protsessor, yacheyka nomerini xotiraning bazi maxsus joylariga yozishi mumkin. Keyingi algoritmda faraz qilamizki, royxat M1 dan MN gacha yacheykalarda joylashgan, qidirilayotgan qiymat esa MN+1 yacheykada, u aniqlangan yacheyka nomeri esa, MN+2 ga yozilgan bolishi kerak.
Parallel Sort
for j=1 to N do
P[j] M[j] ni Х ga va M[N+1] ni target ga oqiydi
if X=target then
j ni M[N+2] ga yozadi
end if
end for
Parallel End
Biz faraz qilamizki, barcha bosh xotira yacheykalariga boshlangich nolga teng qiymat kiritilgan, shuning uchun algoritm ishining yakunida agar qidirilayotgan qiymat royxatda topilmasa, MN+2 yacheyka nolga teng boladi. Lekin agar qiymat royxatda topilsa, uni aniqlagan yagona protsessor u joylashgan yacheyka nomerini MN+2 ga yozadi.
N ta MN+2 ning har birida bu algoritm oqish / qayta ishlash / yozishning bitta siklini bajaradi, shuning uchun umumiy ishlash vaqti O(1), qiymati esa O(N) ga teng. Eslaymizki, optimal ketma-ket izlash algoritmining qiymati O(log N) ga teng edi.
Quyida keltirilgan alternativ parallel algoritm qiymatni va ishlatiladigan protsessorlar soniga bogliq ravishda ish vaqtini ozgartirish imkonini beradi.
Protsessorlar soni p<=N bolganda
Parallel Start
for j=1 to p do
P [j] М[(j-l)*(N/p)+l] dan M[j*(N/p)] gacha bolgan yacheykalardaketma-ket ikkilangan izlashni bajaradi va X tarkib topgan yacheyka nomerini M[N+2] ga yozadi
end for
Parallel End
Agar protsessor bitta bolsa, u izlashni M1 dan MN gacha bolgan yacheykalarda, aniqrogi butun royxatda olib boradi. Shuning uchun bitta protsessorda bu algoritm ketma-ket ikkilangan izlashga kelib qoladi. Demak uning qiymati O(log N) ga teng, bajarilish vaqti ham O(log N) ga teng.
N ta protsessor ishlatilganda esa, biz qiymati O(N) va bajarilish vaqti O(1) bolgan birinchi parallel variantga qaytamiz. Oraliq variantlarda esa biz har biri N/p ta elementdan tarkib topgan p ta royxat bilan ish koramiz. Bu variantning bajarilish vaqti O(log (N/p)), qiymati esa O(p log (N/p)) ga teng. Lekin p log TV bolgan holatni alohida qarash lozim, bunda log (N/log TV) = log N log (log N). Bu holatda qiymat O((log N)*(log N)) = O(log2 N) bolganda, bajarilish vaqti O(log N).
Parallel algoritmning bajarilish vaqti tartibi ketma-ket ikkilamchi izlash tartibiga togri keladi, lekin baholashdagi konstanta kamroq boladi, shu sababdan parallel algoritm tezroq bajariladi. O(log2 N) qiymat optimal ketma-ket izlashning O(log N) qiymatini oshirib yuboradi, lekin bu parallel algoritm manosini yoqotadigan darajaga bormaydi.
Xulosa
Odamlar allaqachon kop hollarda 2 ta odam ishni alohida bajarganga nisbatan birgalikda tezroq bajarishlarini tushunganlar. Amaliyotda ham parallellik anchagina keng qollaniladi. Katta hajmdagi malumotni bir necha ishchiga bolib berganda tezroq tartiblash mumkin. Yoki chelak tola suvni qolma-qol uzatganda bir joydan ikkinchisiga yugurgandan kora tezroq yuborish mumkin.
Parallel dasturlashda ham xuddi shunga oxshash holatlar qollaniladi. Shunday kop funksiyali sistemalar mavjudki, ularda har qaysi protsessor bir xil operatsiyani turli xil berilganlar bilan bajaradi. Konveyer sistemalarida har qaysi protsessor vazifaning faqatgina bir qadaminigina bajaradi va navbatdagi qadamni qoyish uchun natijani keyingi protsessorga yuboradi. Shunday qilib, malumotlar oqimi bilan ishlovchi sistemalar malum bir vazifani bajarishga moljallangan protsessorlar ketma-ketligidan iborat.
Foydalanilgan adabiyotlar:
- Дж. Макконел
Основы современных алгоритмов
М: Москва. 2001
- А. Ахо, Дж. Хопкрофт, Дж. Ульман
Построение и анализ вычислительных алгоритмов
М.: Мир, 1979 - А. Ахо, Дж. Хопкрофт, Дж. Ульман
Структуры данных и алгоритмы
М.: Вильямс, 2000 - М. Гэри, Д. Джонсон
Вычислительные машины и труднорешаемые задачи
М.: Мир, 1982 - Емеличев В.А
Лекции по теории графов
М.: Наука, 1990 - Т. Кормен, Ч. Лейзер, Р. Ривест
Алгоритмы. Построение и анализ
МЦНМО, Москва, 1999 - Кристофидес Н
Теория графов. Алгоритмический подход
М.: Мир, 1978 - Л. Ловас, М. Пламмер
Прикладные задачи теории графов
М.: Мир, 1998 - Липский В
Комбинаторика для программистов
М.: Мир, 1988 - Новиков Ф.А
Дискретная математика для программистов
СПб.: Питер, 2001 - Э. Рейнгольд, Ю. Нивергельт, Н. Део
Комбинаторные алгоритмы
М.: Мир, 1980
boshlash
N
P[1] M[1] ga qiymatni kiritadi
k=2…p
P[k] M[1] dan qiymatni oqiydi
Parallel Start
Parallel end
Tamom
P[k] M[k-procloc] ni oqiydi
P[k] M[k] ga yozadi
Parallel end
procLoc=procLoc*2
Tamom
boshlash
N
P[1] M[1] ga qiymatni kiritadi
procLoc=1
j=1…log p
arallel Start
k= procLoc+1 … 2* procLoc
ha yoq
boshlash
N
count=N/2
i=1 … log(count)+1
Parallel Start
j=1 … count
P[j] M[2j] ni X ga va M[2j+1] ni Y ga oqiydi
X >Y
P[j] Х ni M[j] ga yozadi
P[j] Y ni M[j] ga yozadi
Parallel end
procLoc=procLoc*2
Tamom
boshlash
N
Parallel Start
j = 1 … N/log N
P[j] M[l+(j-1)*log N] dan M[j * log N] gacha yacheykalarning maksimum qiymatini ketma-ket algoritm bilan topadi
Parallel end
P[j] M[j] ga topilgan maksimumni yozadi
P[j] Х ni M[j] ga yozadi
X >Y
count=N/2
i=1 … log(count)+1
Parallel Start
j=1 … count
P[j] Y ni M[j] ga yozadi
Parallel end
count=count/2
Tamom
Ha
Yoq
boshlash
N
Parallel Start
j=1 … N
P[j] M[j] ni Х ga va M[N+1] ni target ga oqiydi
X=target
j ni M[N+2] ga yozadi
Parallel end
Tamom
boshlash
P
Parallel Start
j=1 to p
P [j] М[(j-l)*(N/p)+l] dan M[j*(N/p)] gacha bolgan yacheykalardaketma-ket ikkilangan izlashni bajaradi va X tarkib topgan yacheyka nomerini M[N+2] ga yozadi
Parallel end
Tamom
Parallel Algoritmlar