- •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 функциялары
12 Сурет. Ортақ жадылы параллель компьютерлер
Барлық процессорлар өзара жалпы жадыны «бөледі», осы себепті бұл класқа жататын компьютерлердің тағы бір атауы - бөлінген жадылы компьютерлер. Барлық процессорлар ортақ адрестік кеңістікте жұмыс істейді: егер бір процессор 1050 адресі бойынша, сөзде 61 мәнін жазса, онда басқа процессор 1050 адресінде орналасқан сөзді оқып, 61 мәнін қабылдап алады.
Екінші класс – бұл таратылған жадылы компьютерлер, кей кезде оларды мультикомпьютерлі жүйелер деп те атайды (13 сурет).
13 Сурет. Таратылған жадылы параллель компьютерлер
Әрбір есептеу торабы өзінің процессорымен, жадысымен, енгізу/шығару ішкі жүйелерімен және операциялық жүйесімен бір бүтін компьютер болып саналады. Бұл жағдайда, егер бір процессор 1024 адресі бойынша 79 мәнін жазса, онда сол адрес бойынша басқа процессордың не оқығанына әсері жоқ, себебі, олардың әрқайсысы өз адрестік кеңістігінде жұмыс істейді.
Ортақ жадылы компьютерлерге Symmetric Multi Processors (SMP) класының барлық жүйелері жатады. SMP жүйесінде бірнеше процессорлардан басқасынан бәрі бір экземплярдан: бір жады, бір операциялық жүйе, бір енгізу/шығару бағыныңқы жүйесі. Архитектураның аталуындағы «симметриялық» сөзі, әрбір процессор басқа процессорлар атқара алатын барлық қызметті атқара алады дегенді білдіреді.
Қазіргі уақытта, көбіне SMP-ны ортақ жадылы компьютерлер үшін альтернативті атау ретінде қарастырады. Бұған SMP-ның мүмкін болатын екі шартбелгіні ашу нұсқасы да қосымша демеу болды: Symmetric Multi Processors және Shared Memory Processors.
Бұл екі класс ортақ және таратылған жадылы компьютерлер кластары кездейсоқ пайда болған жоқ. Олар параллель есептеудің негізгі екі есебін көрсетеді.
Ең бірінші мәселе максимальді өнімділік беретін есептеу жүйесін құру болып табылады. Бұны таратылған жадылы компьютер көмегімен жеңіл шешуге болады. Қазіргі уақытта бірыңғай коммуникациялық орта аясында бірнеше мыңдаған есептеу тораптарын біріктіретін қондырғыларды пайдалану жүзеге асуда. Тіпті Интернеттің өзін миллиондаған есептеу тораптарын біріктіріп отырған таратылған жадылы ең үлкен параллельді компьютер деп қарауға болады. Бірақ, осындай жүйелерді қалай тиімді пайдалануға болады? Параллель жұмыс істейтін процессорлардың ара-қатынасына жұмсалатын шығындарды қалай жоюға болады? Параллель бағдарламаларды құруды қалай ықшамдауға, жеңілдетуге болады? Тәжірибе жүзінде осындай жүйелерді бағдарламалаудың бірден-бір әдісі - бұл хабар алмасу жүйесін пайдалану, мысалы PVM немесе MPI, бірақ әрдайым оңай бола бермейтінін ескеру керек.
Осыдан келіп екінші мәселе туындайды - параллельді есептеу жүйелері үшін тиімді бағдарламалық қамтамасыздандыруды құрудың әдістерін іздеу.
Бұл мәселе ортақ жадылы компьютерлер үшін біраз жеңіл шешімін табады. Ортақ жады арқылы процессорлар арасындағы мәлімет алмасудағы қосымша шығындар минимальды болады, ал мұндай жүйелерді бағдарламалау технологиясы қарапайым болып табылады. Мұндағы мәселе басқада. Технологиялық себептерге байланысты, ортақ жедел жадылы, саны көп процессорларды біріктіру мүмкін болмайды, сондықтан мұндай жүйелерде қазіргі кезде өте үлкен өнімділік ала алмайсың.
Байқасақ, екі жағдайда да процессорларды жады модулдерімен немесе процессорларды өзара байланыстыратын коммутация жүйесі көп қиындықтар туғызады. Мысалға, 32 процессор жалпы жедел жадтқа тең қатынас жасай алады немесе 1024 процессордың әрқайсысы өзара байланыса алады деу әрине оңай, бірақ тәжірибе жүзінде мұны қалай жүзеге асыру керек? Енді компьютерлерде қатынастық жүйелерді ұйымдастырудың кейбір әдістерін қарастырайық.
Мультипроцессорлы жүйелерді ұйымдастырудың ең қарапайым әдістерінің бірі процессорлар да, жады да қосылатын жалпы шинаны қолдануға негізделген (14 сурет).
Шинаның өзі қандай да бір тізбектер санынан тұрады. Бұл тізбектер, процессорлар мен жады арасында адрестер, деректер және басқарушы сигналдармен алмасу үшін қажет болып табылады.
Бірнеше процессорлардың жадымен бір уақытта қатынас жасауын болдырмау үшін, шинаны иеленген құрылғының шинаға дара иелік жасауына кепіл болатын арбитраждың қандай да бір сызбасы пайдаланылады.
Осындай жүйелерде туындайтын негізгі қиындық (мәселе) – шинадағы құрылғылар санының шамалы өсуі (4-5), оны тез арада «тар орынға» айналдырады, ал ол өз кезегінде жадпен деректер алмасу кезіндегі айқын бөгелістерге және жалпы жүйе өнімділігінің апаттық құлдырауына әкеліп соғады.
Бұдан да қуатты жүйелер құру үшін басқа жолдар іздеу қажет. Соның бірі – жадыны тәуелсіз модульдерге бөлу және әртүрлі процессорлардың басқа модульдарға бір уақытта қатынау мүмкіндігін қамтамасыз ету. Мұнда шешімдер көп болуы мүмкін, дербес жағдайда, мысалы, матрицалық коммутаторды пайдалану. Процессорлар және жады модульдері 15-ші суретте көрсетілгендей байланысады. Тізбектер қиылысында процессорлар және жады модульдері арасында ақпарат алмасуға рұқсат ететін немесе ақпарат алмасуға тыйым салатын элементарлық нүктелі айырып/қосқыштар орналасқан. Мұндай ұйымдастырудың басты артықшылығы, процессорлардың бір мезгілде, жадының әртүрлі модульдерімен жұмыс істей алу мүмкіндігі. Әрине, егер екі процессор бір жады модулімен жұмыс істегісі келсе, онда екеуінің біреуі бұғатталады. Матрицалық коммутаторлардың кемшілігі – қажетті құрылғының үлкен көлемді болуы, мысалы, n процессорларды n жады модульдерімен байланыстыру үшін n2 элементарлы айырып/қосқыштар қажет. Көп жағдайларда бұл өте қымбат шешімдерге жатқызылады, сондықтан құрастырушыларды басқа жолдарды іздеуге итермелейді.
