
- •Isbn 978-601-217-247-8
- •Есептеу машиналары
- •§1.1.1 Параллель виртуалды машиналар
- •1 Сурет. Vm/sp, vм/ха, vn/еsа машиналары
- •2 Сурет. Виртуалды машина жүйесі
- •3 Сурет. VMware терезесі
- •4 Сурет. Бір компьютерде бірнеше операциялық жүйе
- •5 Сурет. Вм консолынің мысалы
- •6 Сурет. Виртуалды машиналар жүйесінің архитектурасы
- •§1.1.2 Виртуалды машиналардың түрлері
- •§1.1.3 Виртуаландыру - ақпараттық жүйелерді реттеудің басты жолы
- •§1.2.1 Компьютердің аппараттық құрылымын жетілдіру
- •7 Сурет. Бір операцияны бес тактіде орындайтын тізбекті құрылғының
- •8 Сурет. Бір операцияны әрбірі бес тактіде орындайтын екі бірдей тізбекті
- •10 Сурет. Конвейерлік құрылғы өнімділігінің кіріс деректер
- •11 Сурет. Illiac IV матрицалық жүйесінің жобасы
- •§1.2.2 Компьютерді басқарудың интеллектуалдығын жоғарылату
- •12 Сурет. Ортақ жадылы параллель компьютерлер
- •13 Сурет. Таратылған жадылы параллель компьютерлер
- •14 Сурет. Ортақ шиналы мультипроцессорлық жүйе.
- •15 Сурет. Матрицалық коммутаторлардағы
- •16 Сурет. Омега - желі мультипроцессорлық жүйесі.
- •17 Сурет. Мультикомпьютерлерлік жүйелер байланыс топологияларымен: а – сызықша; б – дөңгелек; в – жұлдызша
- •18 Сурет. Процессорлардың байланыс топологияларының нұсқалары
- •19 Сурет. Сm* есептеу жүйесінің сызбасы
- •20 Сурет. Bbn Butterfly есептеу жүйесінің сызбасы
- •§1.2.3 Функционалды құрылғылар жүйесі
- •§1.3.1 Параллель компьютерлер және жүйелер классификациясы
- •21 Сурет. М. Флин классификациясының sisd және simd кластары
- •22 Сурет. М. Флин классификациясының misd және mimd кластары
- •23 Сурет. Mimd класына р. Хокнидың қосымша
- •§1.3.2 Векторлы-конвейерлік компьютелер
- •24 Сурет. Cray c90 компьютерінің жалпы сүлбесі
- •25 Сурет. Cray c90 компьютері жадысының бөлінуі
- •26 Сурет. Cray c90 компьютерінде векторлық операциялардың орындалуы
- •27 Сурет. Cray c90 компьютерінде векторлық операциялардың ілінісуі
- •§1.3.3 Ортақ жадылы параллель компьютерлер
- •28 Сурет. Hewlett Packard Superdome компьютері
- •29 Сурет. Hewlett Packard Superdome компьютерінің
- •§1.3.4 Таратылған жадылы есептеу жүйелері
- •30 Сурет. Cray t3e компьютерінің коммуникациялық торы
- •31 Сурет. Cray т3d/t3e компьютерлеріндегі барьерлі синхрондау
- •32 Сурет. Есептеу кластерінің жалпы схемасы
- •33 Сурет. Мвс-1000м суперкомпьютерінің құрылымы
- •34 Сурет. Коммуникациялық ортаның латенттілігі және өткізу қабілеті
- •§1.3.5 Метакомпьютинг
- •§2.1.1 Үлкен есептер және үлкен компьютерлер
- •35 Сурет. Сандық эксперименттің этаптары
- •§ 2.1.2 Алгоритм графы және параллель есептеулер
- •§ 2.1.3 Шексіз параллелділік концепциясы
- •§ 2.1.4 Ішкі параллельділік
- •37 Сурет. Матрицаларды көбейту графы
- •38 Сурет. Үшбұрышты жүйелерге арналған графтар
- •39 Сурет. Блокты-екідиагоналды жүйеге арналған Макрограф
- •40 Сурет. Блокты-екідиагоналды жүйеге арналған граф
- •41 Сурет. Жалпыланған пралллель форманың ярустары
- •42 Сурет. Графтағы микро және макропараллельділік
- •§2.2.1 Дәстүрлі тізбекті тілдерді пайдалану.
- •§2.2.2 OpenMp бағдарламалау технологиясы
- •44 Сурет. ОреnМр: бағдарламаның орындалу процесі
- •§2.2.3 Хабарлама жіберу негізіндегі бағдарламалау жүйелері. Mpi бағдарламалау жүйесі
- •Int mpi_Comm_rank(mpi_Comm comm, int *rank)
- •Int mpi_Send(void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm)
- •Integer count, datatype, dest, msgtag, comm, request, ierr
- •Int mpi_Isend(void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Int mpi_Irecv(void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Integer count, datatype, source, msgtag, comm, request, ierr
- •Int main(argc,argv)
- •Int argc;
- •Include 'mpif.H’
- •Integer ierr, rank, size, prev, next, reqs(4), buf(2)
- •Integer stats(mpi_status_size, 4)
- •Int mpi_Waitany( int count, mpi_Request *requests, int *index, mpi_Status *status)
- •Integer count, requests(*), index, status(mpi_status_size), ierr
- •Int mpi_Waitsome( int incount, mpi_Request *requests, int *outcount, int *indexes, mpi_Status *statuses)
- •Integer incount, requests(*), outcount, indexes(*), ierr,
- •Int mpi_Test(mpi_Request *request, int *flag, mpi_Status *status)
- •Integer request, ierr, status(mpi_status_size)
- •Int mpi_Testall( int count, mpi_Request *requests, int *flag, mpi_Status *statuses)
- •Integer count, requests(*), statuses(mpi_status_size,*), ierr
- •Int mpi_Testany(int count, mpi_Request *requests, int *index, int *flag, mpi_Status *status)
- •Integer count, requests(*), index, status(mpi_status_size), ierr
- •Int mpi_Testsome( int incount, mpi_Request *requests, int *outcount, int *indexes, mpi_Status *statuses)
- •Integer incount, requests(*), outcount, indexes(*), ierr,
- •Int mpi_Iprobe( int source, int msgtag, mpi_Comm comm, int *flag, mpi_Status *status)
- •Include 'mpif.H’
- •Integer ierr, rank, size, n, nl, I, j
- •Integer irr, status(mpi_status_size), req(maxproc*2)
- •If(ir .Ne. Rank)
- •Int mpi_Send_init( void *buf, int count, mpi_Datatype datatype, int dest, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Integer count, datatype, dest, msgtag, comm, request, ierr
- •Int mpi_Recv_init( void *buf, int count, mpi_Datatype datatype, int source, int msgtag, mpi_Comm comm, mpi_Request *request)
- •Integer count, datatype, source, msgtag, comm, request, ierr
- •Integer сомм, ierr
- •Include 'mpif.H’
- •Integer ibuf(maxproc)
- •Integer req(2*maxproc), statuses(mpi_status_size, maxproc)
- •Integer count, datatype, root, comm, ierr
- •Integer scount, stype, rcount, rtype, root, comm, ierr
- •Integer scount, stype, rcounts(*), displs(*), rtype, root, comm, ierr
- •Integer scount, stype, rcount, rtype, root, comm, ierr
- •Int mpi_Bcast(void *buf, int count, mpi_Datatype datatype, int source, mpi_Comm comm)
- •Int mpi_Gather( void *sbuf, int scount, mpi_Datatype stype, void *rbuf, int rcount, mpi_Datatype rtype, int dest, mpi_Comm comm)
- •Int mpi_Scatter(void *sbuf, int scount, mpi_Datatype stype, void *rbuf, int rcount, mpi_Datatype rtype, int source, mpi_Comm comm)
- •Int main(argc,argv)
- •Int argc;
- •Int numtasks, rank, sendcount, recvcount, source;
- •Int mpi_Barrier (mpi_Comm comm)
- •§ 2.2.4 Бағдарламалаудың басқа тілдері және жүйелері.
- •Параллель есептеуде қолданылатын қысқаша қазақша-орысша терминологиялық сөздік
- •Параллель есептеуде қолданылатын қысқаша орысша-қазақша терминологиялық сөздік
- •Және орта айнымалылары
- •Mpi функциялары
§ 2.1.4 Ішкі параллельділік
Тізбекті компьютерлерді ұзақ уақыт бойы пайдалану процесінде сандық әдістердің және бағдарламалардың үлкен көлемі жинақталып және олар терең меңгерілді. Параллель компьютерлердің пайда болуы жаңа әдістердің де пайда болуына әкелуі керек сияқты болатын. Бірақ олай болмады. Арнайы параллель әдістерді құрастыру әрекеті, мысалы, кіші биіктік әдісі практика жүзінде өз орнын таппады, орындалмады. Онда әрине, параллель компьютерлерде қалай есептерді шығаруға болады, және оларда ескі алгоритмдік және бағдарламалық багажды қолдануға болады ма деген сұрақ туындайды? Бұл сұрақтың жауабы, формасына қарай қарапайым болғанымен, жүзеге асырғанда қиын болып табылды және ол келесідей болды.
Математикалық қатынастар түрінде, тізбекті бағдарламалар немесе қандай да бір басқаша әдіспен жазылған жарамды кезкелген алгоритмді алайық. Осы жазба бойынша ол үшін алгоритм графын тұрғызу мүмкін болды делік және де бұл граф үшін ярустарының ені жеткілікті шамада болатын параллельді форма табылды деп есептейік. Онда қарастырылып отырған алгоритмді параллель компьютерде іске асыруға болады. Өте маңызды айта кететін жайт, 1.2.2 бекітіліміне сәйкес алгоритмнің параллель іске асырылуы, кезкелген басқалары сияқты есептеу қасиеттеріне ие болады. Дербес жағдайда, егер бастапқы алгоритм сандық жағынан тұрақты болса, онда ол параллель формасында да осындай қалпында қала береді. Алгоритмдердегі осы сияқты паралллельділік ішкі деп аталады.
Ескі, яғни көптен бері қолданыстағы және жақсы меңгерілген алгоритмдерде ішкі параллельділік қорын жиі кездестіруге болады екен. Ішкі параллельдікті қолданудың көп артықшылықтары бар, себебі жаңадан құрастырылған алгоритмдердің есептеу қасиеттерін оқып-үйренудің, ол үшін қосымша күш салудың қажеті жоқ. Кемшіліктері де бар - ол алгоритмдердің графын анықтау және оларды зерттеу қажеттілігі. Кейбір жағдайларда, мысалы қандай да бір алгоритмнің ішкі параллельдігі нақты бір паралллель компьютерді тиімді пайдалану үшін жеткіліксіз болса, онда оны басқа параллельділік қасиеттері жоғары алгоритммен алмастыруымызға тура келеді. Қуантарлығы, бүгінгі күнге дейін өте көп есептер үшін үлкен көлемде әртүрлі алгоритмдер құрастырылып қойылған. Сол себепті қажетті алгоритмді таңдап алу мүмкіндігі әрқашанда болады десек артық болмайды. Бірақ мұндай таңдауды іске асыру әрқашанда оңай бола бермейді, себебі алгоритмнің параллельдік құрылымын жақсы білу керек. Ал ол болса белгісіз. Сондықтан, алгоритмнің параллель қасиеттері, құрылымы туралы мәліметтердің, және осы мәліметтерді алуға мүмкіндік беретін білімнің қаншалықты өзекті мәселелер екені түсінікті.
Бірнеше мысал қарастырып көрелік.
1 мысал. Берілген реті n болатын екі В, С квадрат матрицаның көбейтіндісін А=ВС есептеудің классикалық есебін қарастырайық [8]. А, В, С матрицаларының элементтерін сәйкесінше aij, bik, ckj деп белгілейік, және олар сандар болсын. Матрицаларды көбейту операциясының анықтамасына сәйкес
(2.4)
Бұл
формулалар
А
матрицасының элементтерін тікелей
есептеуде жиі қолданылады. Өздігінен
олар алгоритмді бірмәнді (однозначно)
анықтамайды, себебі қосу таңбасының
астындағы
көбейтіндісін қосудың реттілігі
анықталмаған. Бірақ есептеудің
параллельдігі анық көрініп тұрғанын
байқаймыз. Ол i,
j
индекстерінің қандай да болса іріктеу
реттілігі сақталуы туралы нұсқаудың
(ереженің) жоқтығымен көрсетіледі.
Егер сандарды қосу және көбейту операциялары дәл орындалса, онда (2.4) – теңдігіндегі қосудың барлық реттері эквивалентті және олардың бәрі бір нәтижеге алып келеді. Қандай да бір ойлардың нәтижесінде (2.4) формуласын іске асырудың келесі алгоритмі таңдалған делік:
(2.5)
Тағы да i, j индекстерін іріктеу параллельділігі анық көрсетілген. Бірақта к индексі бойынша паралллельділік жоқ, себебі (2.5)–тің ортаңғы формуласынан көріп отырғанымыздай, ол индекс 1-ден бастап n-ге дейін тізбекті түрде іріктелуі керек.
Енді (2.5) алгоритмінің графын тұрғызайық. Граф төбелері a + bс түріндегі операцияларға сәйкес келеді деп есептейміз. Мұндағы a, b, с сақинаның (дөңгелектің) элементтері, және А, В, С матрицаларының элементтері сол дөңгелекке тиесілі. Көрнекілік үшін оларды сан ретінде қарастырса да болады, бірақ олар мысалы, реті бірдей квадрат матрицалар болуы да мүмкін. Графты тұрғызу барысында a, b, с элементтерінің табиғатын ескермейміз. Алғашында графта В, С матрицалары элементтерінің ендірілуімен және А матрицасының элементтеріне есептелінген aij(n) мәндерін беруге байланысты болатын төбелерді және оларға инцидентті доғаларды да көрсетпейміз. Алгоритм графының зерттелуіне ақталмаған қосымша қиындықтарды ендірмес үшін, граф төбелерін еркін түрде орналастыруға болмайды. Оларды орналастырудың қолайлы да тиімді тәсілін (2.5) формуласының жазылу түрі көрсетіп тұр десе болады. Тік бұрышты торды үшөлшемді кеңістікте i, j, к координаталарымен қарастырайық. Тордың барлық бүтінсанды тораптарына 1 ≤ i, j, к ≤ n үшін граф төбелерін (шыңдарын) орналастырамыз. (2.5) формуласын талдай отырып, координаталары i, j, к болатын төбеге к > 1 үшін, координаталары i, j, к - 1 болатын төбеге сәйкес келетін операцияның орындалу нәтижесі берілетініне көз жеткізу қиын емес.