
- •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 функциялары
18 Сурет. Процессорлардың байланыс топологияларының нұсқалары
а)решетка, б)тор в)толық байланыс г)гиперкуб
Алғашқы гиперкуб архитектуралы көппроцессорлы есептеу жүйелерінің бірі болып саналған COSMIC Cube компьютері 1983 жылы Калифорния технологиялық институтында Intel 8086/8087 микропроцессорлары негізінде құрастырылған. 1985 жылы Intel фирмасы алғашқы өндірістік гиперкуб жасап шығарды. Бұл тораптық процессорлар ретінде 80286/80287 сериялы микропроцессорларды пайдаланған iPSC (Intel Personal Supercomputer) компьютері еді. Нақ осы жылы 1024 торапқа дейін құрайтын, NCUBE Corporation фирмасының коммерциялық NCUBE/ten гиперкубы жарық көрді.
Жекелеген компьютерлерде гиперкуб басқа типті архитектуралар комбинациясында қолданылды. Thinking Machines фирмасының Connection Machine сериялы машиналарында 216 дейінгі қарапайым тораптар пайдаланылды. Осы компьютердің бір кристалында, бірімен бірі байланысқан 16 торап орналасқан, ал 212 осындай кристалдар 12-өлшемді гиперкубқа біріктірілген.
Енді ортақ және таратылған жадылы компьютерлердің ерекшеліктеріне қайта оралайық. Көріп отырғанымыздай, екі кластың да өз артықшылықтары бар, бірақ та олар біртіндеп оның кемшіліктеріне де айналуы мүмкін. Ортақ жадылы компьютерлер үшін параллель бағдарламалар құру қиындық тудырмайды, бірақ олардың максималды өнімділігі көбіне процессорлардың кішігірім санымен шектеледі. Ал таратылған жадылы компьютерлер үшін барлығы керісінше. Осы екі кластың артықшылықтарын біріктіруге бола ма? Мүмкін бағыттардың бірі – NUMA (Non Uniform Memory Access) архитектуралы компьютерлерді жобалау.
Неліктен ортақ жадылы компьютерлер үшін параллель бағдарламаларды жазу жеңіл? Себебі, бірыңғай адрестік кеңістік бар, қолданушыға мәлімет алмасу үшін процестер арасында хабар жіберуді ұйымдастырумен айналысып қажеті жоқ.
Егер қолданушылар бағдарламалары компьютердің барлық біріккен физикалық жадысына, ортақ адрестік жады деп қарайтын механизм құрылса онда барлығы көп жеңіл болар еді.
Өткен ғасырдың 70-ші жылдарының соңында бірінші NUMA –компьютерін құрастырған, Cm* жүйесін құрастырушылар осы жолмен жүрген. Бұл компьютер бір-бірімен кластер аралық шиналар арқылы байланысқан кластерлер жиынынан тұрады.
Әрбір кластер өзара локальді шиналар (19-сурет) арқылы байланысқан процессор, жады контроллері, жады модулі, кейбір енгізу/шығару құрылғыларын өзіне біріктіреді. Егер процессорға оқу немесе жазу операциясын орындау қажет болса, ол өзінің жады контроллеріне қажетті адреспен сұраныс жібереді. Контроллер адрестің үлкен разрядтарын талдау арқылы, қажетті мәліметтердің қай модульде сақтаулы екенін анықтайды. Егер адрес локальді болса, онда сұраныс локальді шинаға қойылады, кері жағдайда, қашықтағы кластер үшін арналған сұраныс кластер аралық шина арқылы жіберіледі. Бұл режимде жадының бір модулінде сақталатын бағдарлама жүйенің кез-келген процессорында орындалады. Жалғыз ғана айырмашылық – орындалу жылдамдығында. Барлық локальді сілтемелер қашықтағыларына қарағанда тез өңделеді. Сондықтан бағдарлама сақталған кластер процессоры оны басқа процессорларға қарағанда бірнеше есе жылдамырақ орындайды.
Осы ерекшелігіне қарай мұндай компьютерлер класы – жадыға біртекті емес қатынас компьютерлері деп аталады. Осы мағынада, классикалық SMP - компьютерлері UMA (Uniform Memory Access) архитектурасымен қамтылған, ондағы әрбір процессор кез келген жады модуліне бірдей қатынас жасауы қамтамасыз етілген деп айтылады.
Локальді
шина
Локальді
жады
Жады контроллері