
- •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 функциялары
§1.3.1 Параллель компьютерлер және жүйелер классификациясы
Кез-келген ЭЕМ-да есептеу нәтижесіне қол жеткізу үшін қолданылатын стандартты схема:
мақсат құру;
модельдеу;
алгоритм дайындау;
бағдарлама дайындау;
тестілеу және түзетулер енгізу;
нәтижені талдау,
2-5 пункттерінің қайталанатын этаптарының қажеттілігінше математикалық моделін жасау;
бағдарламаның қорытындысын әзірлеу екені белгілі.
Параллель есептеу спецификасын ескерсек, бұл схемаға тағы 4 пункт енгізу қажет болады:
Ақпараттық талдау – есептің алгоритмін, алгоритм графының көмегімен ондағы параллельділіктің қолданылуын анықтауға зерттеу;
процесті параллель тарату (қанша процесті қанша процессорға бөлуін анықтайды);
параллель бағдарламаны құрастыру;
параллель бағдарламаның тиімділігін бағалау:
тиімді бағдарламалау алгоритмін таңдау;
ол алгоритмді қолданып, жүйелік бағдарлама жасау;
жүйелі бағдарламалардың жұмыс уақытын өлшеу;
таңдалған жүйелік алгоритмді қолданып, параллельді бағдарлама жасау;
алынған бағдарламаның тиімділігін арттыру (әр түрлі көлемді деректерде);
алынған нәтиже бойынша сәйкес алгоритмді және параллель бағдарламаның ең тиімдісін таңдау;
Сонымен, әрбір дербес компьютерлер үшін маңызы зор, ал параллель компьютерлерде, кезкелген есепті шешу процесіне қатысты ерекше мәнге ие келесі этаптарды айта кетсе болады:
есептің қойылуы;
оның шешу әдісін таңдау;
оның алгоритмін дайындау;
бағдарламалау технологиясын таңдау;
бағдарламаны құрастыру;
қандай да бір компьютерде бағдарламаны орындау.
Әрине, бұл этаптардың бәрі де қрапайым компьютерлер үшін де маңызды, бірақ параллель есептеу машиналарын пайдалануда олар ерекше мәнге ие болады. Кезкелген параллель компьютер – фантастикалық нәтижелерге қол жеткізуге мүмкіндік беретін өте мұқият дайындалған есептеу жүйесі. Мұндай компьютерлер өте үлкен өнімділікпен жұмыс істеу үшін арнайы жобаланады. Бірақ, параллель компьютерлер кезкелген бағдарламада бірдей өнімділікпен жұмыс істей алмайды. Егер бағдарлама құрылымы компьютер архитектурасының ерекшеліктеріне сәйкес келмесе, онда оның өнімділігі міндетті түрде төмендейді.
Бұл сәйкессіздік есепті шешудің кезкелген этапында пайда болуы мүмкін. Егер қандай да бір қадамда біз компьютердің ерекшелігін ескермеген болсақ, онда бағдарламадан үлкен өнімділікті күту бекер болмақ. Негізінде, векторлы-конвейерлік компьютерге немесе таратылған жадылы есептеу кластеріне бағытталуды көп жағдайда есепті шешу әдісі анықтайды. Бір жағдайда бағдарламада ішкі циклдарды векторлау қажет болса, ал келесі бір жағдайларда бағдарламаның жекелеген фрагменттерін параллельдеу жайын ойластыру керек. Бағдарламаның аталған қасиеттері ондағы есептеу әдістерінің қасиеттерімен анықталады. Егер таңдалған әдісте бұндай қасиеттер болмаса, онда олар бағдарламада да болмайды, яғни үлкен өнімділікке де қол жеткізу мүмкін емес деген сөз.
Қазіргі уақытта шектік өнімділігі рекордты көрсеткіштерімен компьютерлерді құрастыру оншалықты қиыншылықтар тудыра қоймайды. Алайда сол компьютерлерді тиімді пайдалану тәсілдерін ұсыну әлдеқайда күрделі екені белгілі, себебі мұнда жоғарыда аталған тізбектегі барлық алдыңғы этаптарын да ескеру керек болады.
Заман ағымына сәйкес параллель есептеу жүйелері өте үлкен қарқынмен даму үстінде.
Есептеу кластерлерінің пайда болуы, көп жерлерде параллель есептеулерге қол жеткізді. Егер ертеректе параллель компьютерлер үлкен арнайы центрлерде тұрса, ал қазір кластерлер шағын зертханаларда да орналасуы мүмкін. Дәстүрлі суперкомпьютерлерге қарағанда кластерлік шешімдердің бағасы да анағұрлым төмен. Оларды құрастыру үшін әдетте кәдімгі процессорлар, стандартты желілік технологиялар және еркін таратылымдағы бағдарламалық қамтама пайдаланылады. Әрине, бұл бірінші тілек, ал екіншісі – осы салаға қатысты минимум құрылғылар мен білім болса, онда жеке дербес параллель жүйе құрастыруға аса принципиалды кедергілер болмайды.
Интернет. Интернет – бір-бірімен байланыс каналдары және бірегей қабылдау, мәліметтерді беру стандарттары арқылы өзара байланысқан компьютерлер мен компьютерлік желілерінің жиынтығы. Ол деген жер шарын қамтып жатқан ауқымды бүкіләлемдік ақпарат жүйесі болып отыр. Енді осы бір желіге біріктірілген миллиондаған компьютерлерді бір ғана есепті шешу үшін пайдаланса қалай болар еді? Әрине, онда бүгінгі күні пайдаланудағы барлық суперкомпьютерлердің шектік өнімділіктерінің қосындысынан да өнімділігі көп жоғары болатын ең қуатты параллель компьютер алған болар едік.
Уақыт өте келе, кезкелген пайдаланушыға ауқымды бүкіләлемдік желіге шығуға мүмкіндік беретін Интернет әрбір квартираға да жететіні анық. Онда ауқымды бүкіләлемдік есептеу желісіне де қосылу мүмкіндігін аламыз. Егер сізге қандай да бір есептеу жүргізу керек болса, онда сіз желіге қосылып, онда тапсырма бере де және нәтижесін ала да аласыз және сіздің тапсырмаңыздың қайда, қалай өңделгені маңызды емес, сіз оны білмеуіңіз де мүмкін. Осыдан келіп бүкіл дүние жүзі бойынша сансыз көп есептеу ресурстарын қамтитын метакомпьютерлерді құрастыру идеялары туындайды.
Параллель есептеу жүйелерін құруда қызықты идеялар өте көп. Компьютерлер құрамына әртүрлі есептеу тораптары көптеп енгізілуде. Осындай құрылғылар жиынының үйлесімді жұмыс істеуін ұйымдастыру да өз алдына күрделі мәселелердің бірі. Ішкі үйлесімділікпен қатар кезкелген параллель компьютердің нақты есептерді шешу инструменті екенін де естен шығармаған жөн.
Сонымен, алдыңғы параграфтардан параллель есептеу жүйелерін ұйымдастыру тәсілдерінің әртүрлі және қаншалықты көп екенін көріп отырмыз. Бұл жерде векторлы-конвейерлік компьютерлер, массивті-параллель және матрицалық жүйелер, арнайы процессорлар, кластерлер, көпағынды архитектуралы компьютерлер және т.б. көптеген есептеу машиналарын айта кетеміз. Егер осы аталғандарды толық сипаттау үшін, жадыны ұйымдастыру, процессорлар арасындағы байланыс топологиясы, жекелеген құрылғылар жұмысының синхрондылығы немесе операцияларды орындау тәсілі сияқты маңызды параметрлер туралы мәліметтерді қосатын болсақ, онда түрлі архитектуралар саны шексіз көбейген болар еді.
Неге параллель архитектуралар саны өте көп? Олар бір-бірімен қалай байланысты? Әрбір архитектураны қандай негізгі факторлар сипаттайды? Бұл сұрақтардың жауабын есептеу жүйелері архитектурасын классификациялау [23] арқылы алуға болады. Бұл бағыттағы жұмыстар өткен ғасырдың 60-шы жылдарының соңында М. Флин ұсынған (қазіргі уақытта да пайдаланылуда) классификацияның бірінші нұсқасынан кейін басталды. Олардың барлығы дерлік М. Флин классификациясына толықтырулар және түзетулер енгізу, қандай да бір жүйеге келтіру бағытында алынды.
Қазіргі уақытта әртүрлі параметрлерге, белгілерге негізделген параллель есептеу машиналарының классификациялары көп [10]. Оларға М. Флин (1966 ж.), Р. Хокни, Т. Фенг (1972 ж.), Дж. Шор (1973), В. Хендлер, Л. Шнайдер (1988 ж.), Д. Скилликорн (1989 ж.), С. Дазгуп (1990 ж.) және т.б. классификацияларын жатқызуға болады.
Бұл кітапта біз М. Флин және Р. Хокни классификацияларына ғана тоқталамыз.
М. Флин (M. Flynn) классификациясы.
Флин классификациясы ағын түсінігіне негізделеді. Ағын - процессорда өңделетін командалар немесе деректер тізбегі. Командалар мен деректер ағымы санына байланысты Флин архитектураны 4 класқа бөледі. Біріншісі, SISD (Single Instruction stream/Single Date stream) – командалардың жеке ағыны және деректердің жеке ағыны (21 сурет). Бұл суретте келесі белгілеулер пайдаланылған: ПР – бір немесе бірнеше процессорлық элементтер, БҚ – басқарушы құрылғы, ДЖ – деректер жадысы. Бұл класқа классикалық тізбекті машиналар немесе басқаша айтқанда фон-Нейман типті машиналар жатады, мысалы, PDP-11 немесе VAX 11/780. Мұндай машиналарда командалардың бір ағыны ғана болады, барлық командалар кезекпен бірінен кейін бірі өңделеді (орындалады) және әрбір команда бір скалярлық операцияны көрсетеді. Бұл класқа командаларды өңдеу жылдамдығын және арифметикалық операцияларды орындау жылдамдығын жоғарылату үшін конвейерлік өңдеу қолданылуы мүмкін: мысалы, скалярлық функционалды құрылғыларымен CDC 6600 және конвейерлік CDC 7600 машиналары кіреді.
Екінші класс – SIMD (Single Instruction stream/Multiple Date stream) - командалардың жеке ағыны және деректердің көптеген ағыны (23 сурет). Алдыңғы, яғни SISD класынан айырмашылығы, мұндай архитектураларда векторлық командалар енетін командалардың бір ағыны сақталады. Ал бұл өз кезегінде бірден көптеген берілгендермен, мысалы, вектор элементтерімен, бір арифметикалық операцияны орындауға мүмкіндік береді. Векторлық операцияларды орындау тәсілі арнайы айтылмайды, сондықтан вектор элементтерін өңдеу процессорлық матрица арқылы, мысалы, ILLIAC IV – тегі сияқты немесе конвейер көмегімен, мысалы, Cray-1 машинасындағы сияқты жүргізілуі мүмкін.