- •Isbn 978-601-217-247-8
- •Есептеу машиналары
- •§1.1.1 Параллель виртуалды машиналар
- •1 Сурет. Vm/sp, vм/ха, vn/еsа машиналары
- •2 Сурет. Виртуалды машина жүйесі
- •3 Сурет. VMware терезесі
- •4 Сурет. Бір компьютерде бірнеше операциялық жүйе
- •§1.1.2 Виртуалды машиналардың түрлері
- •5 Сурет. Вм консолынің мысалы
- •6 Сурет. Виртуалды машиналар жүйесінің архитектурасы
- •§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, 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)
- •Integer scount, stype, rcount, rtype, root, comm, ierr
- •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.2.1 Компьютердің аппараттық құрылымын жетілдіру
Өткен ғасырдың соңғы жылдарынан бастап микроэлектроника өте үлкен қарқынмен даму үстінде. Оған, дербес компьютерлердің өнімділігінің әрбір бір-екі жылда бірнеше еселеп ұлғайып келе жатқаны куә. Осы ретте, бүгінгі күнгі жаңа компьютерлердің өнімділігінің өте шапшаң өсуі осы себептерге ғана байланысты ма деген сұрақ туындайды. Тарихи фактілерге назар аударып, қарапайым салыстырулар жүргізіп көрелік.
1949 жылы пайдалануға берілген алғашқы компьютерлердің бірі – EDSAC (тактілік уақыты 2 микросекунд), шамамен секундына 100 арифметикалық операция орындай алған болса, 2001 жылғы HP Superdome суперкомпьютерінің (тактілік уақыты 1,3 нс, процессоры РА-8700, 770 мгц), өнімділігі шамамен секундына 190 миллиард арифметикалық операцияны құраған.
Бұдан не көріп тұрмыз? Соңғы жарты ғасырда, компьютердің өнімділігі шамамен екі миллиард есе артқан. Ал тактілік уақытының 2 мкс-тан 1,3 нс-ке дейін кемуіне байланысты өскен жылдамдықтан ұтысы бар болғаны шамамен 1500 есе ғана. Бұл цифрді микроэлектрониканың өркендеуімен байланыстырамыз. Енді қалған өсім қайдан алынды? Бұның жауабы айқын – компьютер архитектурасында жаңа инновациялық шешімдерді пайдалану, және бірнеше әрекеттерді бір мезгілде орындай алу идеясына негізделген мәліметтерді параллель өңдеу принципін қолдану.
Алайда, компьютер архитектурасындағы кездесетін параллельділік формаларының көптігіне қарамастан мәліметтерді параллель өңдеудің негізінен екі түрін ғана бөліп көрсетуге болады: параллелділік және конвейерлік. Осыларға қысқаша тоқталып өтелік.
Параллель өңдеу
Әрқайсысы 100 нақты саннан тұратын екі вектордың қосындысын табу керек делік. Бұл операцияны орындау үшін, біздің қол астымызда екі пар санның қосындысын компьютер жұмысының бес тактісінде орындай алатын есептеу құрылғысы бар және де бұл құрылғы осы операцияны орындау барысында одан басқа ешқандай пайдалы жұмыс атқара алмайтындай етіп жасалынған болсын. Бұндай шарттар негізінде барлық операция 500 тактта орындалады. Уақытқа байланысты мәліметтерді өңдеу процесі схема түрінде 7-ші суретте кескінделген.
Енді бізде, дәл осындай, бір мезгілде бір-біріне тәуелсіз жұмыс істей алатын екі құрылғы бар болсын делік. Әрбір құрылғыны ендірілетін массив элементтерімен үнемі жүктей отырып, ізделініп отырған қосынды нәтижесін 250 тактіде (8 сурет) алуға болады. Осы секілді 10 құрылғы жағдайында, қосынды нәтижесін алу уақыты бар болғаны 50 тактіні құрайды, ал жалпы жағдайда N құрылғыдан тұратын жүйе бұл операцияны орындауға шамамен 500/N уақыт жұмсайды.
Параллель өңдеу мысалдарын біздің күнделікті өмірімізде де көптеп кездестіруге болады: супермаркеттегі кассалық аппараттар, көп қатарлы автотрассадағы машиналар қозғалысы, май құю станцияларындағы бірнеше бензин колонкалары т.б. Параллель өңдеу мәселесінің алғашқы пионерлерінің бірі ретінде, академик А. А. Самарскийді атауға болады. Ол өткен ғасырдың 50-ші жылдарының басында ядролық жарылыстардың моделін жасау үшін қажетті есептеулер орындаған болатын және де бұл есепті қолдарына арифмометр беріп, бірнеше ондаған қыздарды столдарға жайғастыра отырып шешті. Қыздар мәліметтерді бір-біріне сөзбен жеткізе отырып, қажетті цифрларды арифмометрге енгізіп отырды. Осындай қарапайым «параллель есептеу жүйесінің» көмегімен А. А. Самарский ядролық жарылыс толқынының эволюциясын есептеп шығарды.
