Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зертхана ПВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
494.59 Кб
Скачать

3. «Тақ-жұп орын ауыстыру» алгоритмі.

Бұл алгоритмде n элемент n фазада сұрыпталады. Бұл алгоритмнің жұп және тақ фазалары кезектестіріледі. (a1, a2, ...,an) – тізбегін сұрыптау керек болсын. Тақ фаза кезінде тақ индексті элементтер оң жақтағы көрші элементпен салыстырылып, егер шарт орындалса, олар орындарын алмастырады, яғни (a1,а2), (a3, a4), ..., (an-1,an) жұптары салыстырылып алмастырылады. Сол сияқты жұп фаза кезінде, жұп индексті элементтер салыстырлып, егер шарт орындалса, олар орындарын алмастырады, яғни (а2, a3), (a4, a5), ..., (an-2,an-1) жұптары салыстырылып алмастырылады. Сонда тақ-жұп ауыстыру n фазасынан кейін

тізбек сұрыпталады. Әрбір алгоритмнің фазасында Q(n) салыстыру жасалса, барлығы n фаза болса, бұл алгоримтнің (sequential complexity) - Q(n2).

Программа 2. "тақ-жұп орын ауыстыру" тізбекті алгоритмі.

1. procedure ODD-EVEN(n)

2. begin

3. for i:=1 to n do

4. begin

5. if i is odd then

6. for j:=0 to n/2-1 do

7. compare-exchange(a2j+1,a2j+2)

8. if i is even then

9. for j:=1 to n/2-1 do

10. compare-exchange(a2j,a2j+1)

11. end for

12. end ODD-EVEN

-

Өз бетімен орындауға арналған тапсырмалардың нұсқалары:

1. Параллельді компьютерлердің және параллельді есептеулер қолданылатын облыстарды талдап, жазыңдар.

2. Программалар деңгейінің параллельділігіне мысал ретінде екі массив

элементтерінің қосындысын тап.

3. Куб көлемі - 100х100х100 нүктелерден тұрады.Әрбір нүктеде орындалатын функциялар – жылдамдық, қысым, температура, компоненттің концентрациясы (су, газ, мұнай, т.б. ). Барлығы 5-20 функция (орташа-10). Бұл функциялар сызықты емес. Сондықтан оларды есептеу үшін 200-1000 операция орындалу керек (орташа -500). Жүріп жатқан процестер стандартты емес, сондықтан қадамдар саны 100-1000 (орташа-500). Сонда куб ішінде орындалатын арифметикалық операциялар санын есептеп тап.

4.Берілген сандар жиынының ең кіші k-сыншы ретті санды табатын параллельді программаны жазыңдар.

5.Тақ-жұп сұрыптаудың салыстыру-және-алмастыру тәсілін пайдаланып,төмендегі 16 санды сұрыптаңдар: 12 2 11 4 9 1 10 15 5 7 14 3 8 13 616.

6.Тақ-жұп сұрыптауды орындауға кететін уақыттың O(log2n)-ге тең екенін дәлелдеңдер.

Зертханалық жұмыс №6. Прим тізбектелген және параллельді алгоритмін жүзеге асыру және салыстырмалы талдау

Мақсаты: Прим қолданған параллельді алгоритмдері түсініктерімен танысу.

Қашықтығы анықталмаған G графының қамтитын ағаштар деп - G графшасыыныең G графының барлық биіктігін қамтитын ағашын айтамыз. Өлшенген графтың суммасы ретінде доға кіретін барлық кіріс графтарының салмағын анықтап алып, минималды охватывающии ағаштардың минималды санын түсіне аламыз. МОД ты табу үшін тапсырмалар мысалға дербес компьютерлерде локальды желіге төменгі қатарлы біріккен байланыс сызықтарымен қосу мысалы кіреді.

Прим әдісімен аталатын қойылған есептің алгоритмінің қысқаша сипаттамасын берейік. Алгоритм жұмысты ағаштың түбірі ретінде алынған графтың туынды биіктігінен бастайды және орындалатын итерациялардың МОД қа дейінгі жолын кеңейтеді. Прим алгоритмінің әрбір итерациясында орындалатын әректетте келесілерден тұрады:

  • МОД құрамына кірмеген, барлық МОДтардың біріккен биіктігінің барлық биіктіктер үшін мәнін есптейді;

  • Осы биіктіктерден доғасын қамтитын минималды салмақтағы G графының биіктігі таңдалады;

  • биіктіктігіне таңдалған биіктіктің қосылуы.

итерациясы орындалғанннан кейін МОД әдісі формаланады; осы ағаштың салмағы көрсетілім көмегі арқылы алынл уы мүмкін.

МОД тың еңбек сиымдылығын табу G графының санынын биіктігінен квадратты түрде тәуелдігімен анықталады.

Қаралған минималды қамтылғын ағаштың алгоритмнің параллельді орындалуы үшін мүмкіндіктерін бағалаймыз. Итерация әдісі тізбектеліп орындалуы керек және распараллельді болмауы керек. Басқа бір жағынан әрбір итерацияға оындалатын алгоритмнің әсер етуі тәуелсіз болып табылады және біруақытта өңделуі мүмкін.

Сонымен, мысалға биіктігін анықтау әрбір граф биіктігі үшін жекеше бар болуы мүмкін, минималды салмақ үшін доғаны табу каскадты сызба ретінде жүзеге асуы мүмкін және т.с.с.

Есептеу жүйелеріндегі процессорлар арасында мәліметтерді анықтау Прим алгоритмінің отәуелсіздігін қамтамасыз етуі керек. Егер графтың әрбір биіктігі өзінің байланысқан ақпарат биіктігімен жекеше алғанда бұл қамтамасыз етілген деп аталуы мүмкін.

Әрбір процессорды бірқалыпты жүктегенде , осы жинаққа сәйкес келетін блок биіктіктегі берілген принципті сақтау осылай болады және G графының матрица сызықтарының вертикалды графы көрші қатарлардың сонымен қатар ортақ бөлігін биіктік көпшілігінен формирлейді.

Осындай бөліктердің тіркелуімен Прим алгоритмінің параллельді итерация варианты келесілерден тұрады:

- МОД құрамына кірмеген барлық биіктіктер үшін мәндер биіктігі анықталады; берілген есептеулер әрбір процессорға тәуелсіз жеке орындалады; осындай операцияладың еңбек сиымдылығы жоғарғы биіктігімен шектеледі (бірінші алгоритм итерациясында барлық биіктіктерді артық жинау үшін есептеу ретін қамтамасыз етеді);

- көпшілігіне дейін минималды доғаны қамтитын G графының биіктігі таңдалады; осындай биіктікті таңдау үшін биіктіктер жиынтығынан минимум жиын іздестіруіміз қажет.

- Қамтитын ағаштарға таңдалған биіктіктіктердің номерін барлық процессорларға жіберу (гиперкубтар үшін бұл операция қиыншылығы биіктігімен анықталады).

Прим алгоритм итерациясының орындалуы кезінде модтарды алу; осы тәсілдің еңбексиымдылығы нәтиже ретінде мына қатынаспен анықталады:

Параллельді алгоритм тиімділігін бағалау тіркелген тізімімен мынадай түрде болады:

,

Сұрыптаудың (пузырьек) әдісімен және тақ – жұп қайта орнатылуын қарастырайық.

сандары берілсін. Біз берілген сандардың тізімін сұрыптауымыз керек.Ъ

Тізбектелген хат келесі түрді қамтиды:

Амалдар саны мен оны ауыстыру мынаған тең:

Көбіктену әдісімен сұрыптау кодын параллельдеу үшін біз келесі “салыстыру және айырбастау” әдісін қолодана аламыз.

Салыстыру – және – айырбастау

Ішкі циклдың келесі итерациясының пузырька әдісі алдыңғы итерациядан ерте басталып, ерте аяқталуы мүмкін келесі пузырька әдісі басталғанға дейін.

Берілген тұжырым пузырек әдісімен сұрыптаудың тақ – жұптық қайта орнатылымының әртүрлілігіне әкеледі.

Алгоритм тақ және тақ емес деп аталатын келесі екі стадиядан тұрады.

процестер номері берілсін, оның әрқайсысы сәйкес келетін амалын қамтиды.

Тақ болатын стадияларда біз: т.б салыстырып – айырбастаймыз.

Тақ болмайтын стадияларда біз т.б салыстырып – айырбастаймыз.

Есептеу сызбасы мына суретте көрсетілген.

Осындай тәсілмен, екі жағдайда да тақ емес процестер бірінші send() подпрограмманы орындайды, ал жұп номерленген процестер бірінші recv() подпрограммасын орындайды.

Берілген сұрыптаудың параллельді кодын жазамыз.

(тақ емес) (тақ)

Тапсырма: Сұрыптаудың тізбектелген және параллельді алгоритмдерін кері қайтару және жүзеге асыру.

Зертханалық жұмыс №7. Параллель бағдарламалау C++ тілін қолдана отырып параллель алгоритмдер үшін бағдарламалық кодтарды құру.

1 тапсырма. MPI қолданатын және

Hello world from process i of n”

әр процесстің теретін программаны жазыңыз. i үшін PI_COMM_WORLD пен n өлшемінің (саны) PI_COMM_WORLD қолданыңыз. Барлық процессор осы компьютер үшін қорытынды шығара алады деп ойлай беруіңізге болады. Экранға көрінетін қорытынды тәртібін байқаңыз. MPI орындалуын тәуелді <http://www-unix.mcs.anl.gov/mpi/www/www1/MPI.html> символдары аралас болуы мүмкін.

2. n бүтін көпшілігінің ішінен минималды мәнді есептеп шығарыңда р.

3. Р жұмыс процесінің қолданылуымен сандардың суммасын есптеп шығарыңыз: әр процесс мәліметтерінің жекеше бөлігін қосу керек.

Көптік мөлшерлі (n), бөліктер бөліктер саны (q) және жұмыс процестері (Р) командалық жолдың аргументтері болу керек.

Негізгі әдебиеттер 6[71-78]

Қосымша әдебиеттер 12[229-237]

Бақылау сұрақтары

  1. MPI программасының жалпы құрылымын сипаттаңыз.

  2. MPI программадағы хаттардың түрлерін сипаттаңыз.

  3. MPI – процесспен мәліметтердің бөлінуін қалай ұйымдастыруға болады?

Зертханалық жұмыс №8. Тізімді өңдеудің параллелдік алгоритмін жүзеге асыру - көрсеткіштер бойынша ауысу әдісі.

Мақсаты: Тізімді өңдеудің параллелдік алгоритмдердің ауысу әдісімен танысу.

Көрсеткіштер бойынша ауысу әдісі – тізімді өңдеу параллелді алгоритмінің маңызды құралы. Бұл әдістің көмегімен O(log n) уақытында тізімде(тізім соңына дейінгі аралықта) тізім ұзындығы n барлық элементтер үшін орналасуын табуға мүмкіндік береді.

Айталық, тізімнің әрбір элементі үшін өзінің процессоры жауап береді, сондықтан тізімнің барлық элементтерін паралелді өңдеуге болады.

Алгоритм әдісі:

1 for (үшін) әрбір I процессор

2 do if next[i] = NIL

3 then d[i] ←0

4 else d[i] ←1

5 while I объектісі болғанда , next[i] ≠ NIL болады

6 do for (үшін) әрбір i процессоры үшін

7 do if next[i] ≠ NIL

8 then d[i] ← d[i] + d[next[i]]

9 next[i] ← next[next[i]]

Бірінші қадамда соңғысынан басқа барлық объектілерде, көрсеткіштер NIL-ге тең емес, сондықтан 8 – 9 жолдар n -1 алғашқы процессорлері үшін орындалады. Келесі қадамда 8 – 9 жолдары n -2 алғашқы процессорлері үшін орындалады. Циклдың соңғы орындалуы кезінде тек қана алғашқы екі процессор жұмыс істейді. Көрсеткіштер бойынша ауысу композиция идеясы next[i] ← next[next[i]] амалы орындалатын 9 жолда жүзеге асырылған. Ескерте кететіні, бұл іс-әрекет тізімнің құрылымын бұзады, себебі көрсеткіш жолы өзгереді. Егер тізімді сақтау қажет болса, онда көрсеткіш жолының көшірмесін алуға әрі осы көшірмемен жұмыс жасауға болады.

Тапсырма: кез-келген тізім үшін көрсеткіш бойынша ауысу әдісін жүзеге асыр.