- •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 функциялары
11 Сурет. Illiac IV матрицалық жүйесінің жобасы
Жоспар бойынша жүйе жалпы басқару арқылы жұмыс істеу керек болатын, алайда әрбір квадрантта синхронды жұмыс істейтін процессорлық элементтер үшін командалар беретін өзінің жеке басқару құрылығысы орналасты. Мұнда екі квадрантты 128 процессорлық элементтен тұратын бір квадрантқа біріктіру немесе барлық төрт квадрантты 16×16 бір матрица ретінде есептеу мүмкіндігі қарастырылған. Жоба бойынша компьютердің такті уақыты 40 нс, ал шектік өнімділігі секундына 1 миллиард нақты операцияға тең болады деп жоспарланған. Әрине, бұл өз уақытындағы күрделілігі және масштабы жағынан фантастикалық жоба екені анық. Жүйені құру 1967 жылы басталып, 1972 жылы 64 процессорлық элементтен тұратын бір квадрант дайындалды. Бұл жүйе NASA Ames (АҚШ) ғылыми-зерттеу орталығына орнатылып, 1975-ші жылдарға дейін толықтыру жұмыстары жүргізілді. Бұл бір экземпляр күйінде дайындалған жүйе нақты пайдалануда 1982-ші жылға дейін болып, соңында музейге өткізілді. Нәтижесінде не алынды? Төрт квадранттан және 256 процессорлық элементтен тұратын матрица жасау жоспарланып, біреуі ғана жасалынды, технологиялық пайымдаулар бойынша тактілік жобалау уақытын 80 нс-ке дейін арттыруға тура келді, төрттен бір бөлігін дайындау құнының өзі алдын-ала есептелген сомадан төрт есе жоғары болды, ал оның нақты өнімділігі секундына 50 млн. операцияға ғана жетті. Әрине, жобаны толық орындау мүмкіншілігі болмады, бірақ бұл жоба компьютерлердің келесі буынының архитектурасы және параллель есептеу жүйелерінің бағдарламалық қамтамасының көптеген компоненттерінің дамуына да зор үлесін қосты. Жобада қарастырылып, пысықталған технологиялар, параллельдеу компиляторлары туралы идеялар кейінірек PEPE, BSP, ISL DAP және де басқа көптеген жүйелерді, параллель компьютерлер мен супер ЭЕМ-ын құруда кеңінен пайдаланылды.
Компьютерлердің командалар жүйесіне векторлық операцияларды да енгізу идеясы көптен бері ғалымдар мен ізденушілерді қызықтырып келді. Біріншіден, векторлық операцияларды пайдалану машиналық командалар терминінде көптеген есептеу фрагментерін әлдеқайда қарапайым қысқа түрде жазуға мүмкіндік береді. Егер екі векторды қосу С = А + В керек болса, онда бірнеше қосымша командаларды (индексті үлкейту, циклдан шығу шартын тексеру, циклдің басына көшу және т.б.) орындау қажеттілігі жойылып, оның орнына, сәйкесінше, векторлық команданы пайдаланса жеткілікті. Көріп отырғанымыздай, есептеу тиімділігі дәстүрлі үлгілерден көп жоғары. Екіншіден, көптеген алгоритмдерді векторлық операциялар терминінде жеңіл өрнектеуге болатындығы. Үшіншіден, осындай операциялар конвейерлік құрылғыларды пайдалануда максимал тиімділікке жетуге мүмкіндік беретіндігі.
Векторлық командалар үлкен жетістіктермен пайдаланылған есептеу жүйелерінің жобаларына мысалдарды көптеп келтіруге болады. Солардың ішіндегі ең бастысы ретінде Cray векторлы-конвейерлік суперкомпьютерлерін айта кету керек.
1972 жылы Control Data Corporation компаниясының вице-президенті және көптеген есептеу машиналарының бас конструкторы болған С. Крэй компанияны тастап, жаңа Cray Research компанияcының негізін қалайды. Жаңа компания 1976 жылы өзінің бірінші векторлы-конвейерлік компьютерін Cray-1 құрастырып шығарады. Аталған компьютер архитектурасының негізгі ерекшеліктеріне векторлық командалар, тәуелсіз конвейерлік функционалдық құрылғылар және дамыған регистрлік структурасын айтуға болады. Конвейерлік және функционалдық құрылғылардың тәуелсіздігі компьютердің жоғары теориялық өнімділігін анықтады (бір тактіде екі операция), практика жүзінде векторлы командалар жоғары өнімділікке жету жолын қысқартты (конвейерлердің тиімді жүктелуі), ал регистрлі функционалды құрылғылар жұмысы санаулы операциялар кезінде де жоғары өнімділікке жетуге мүмкіндік берді.
Cray-1 компьютерінің жалпы сипаттамалары: тактілік уақыты 12,5 нс, конвейерлік функционалдық құрылғылар саны – 12 және де бұл конвейерлік функционалдық құрылғылардың бәрі де бір-біріне тәуелсіз бір мезгілде жұмыс істей алады, жедел жадысы 1 Мс-ға дейін, компьютердің шектік өнімділігі секундына 160 млн. операция. Кейінгі тарауларда, біз Cray-1 компьютерінің архитектурасына көп ұқсас, бірақ одан 15 жыл кейін пайда болған Cray-С90 векторлы-конвейерлік компьютерінің архитектурасы мен бағдарламалау ерекшеліктеріне жеке тоқталатын боламыз.
Сонымен, компьютер архитектурасының ерекшеліктерін талдай келе біз өте маңызды мәселелердің біріне бірнеше рет тоқталып өттік – ол мәселе процессор жұмысының жылдамдығы және жадыдан деректерді таңдау уақыты арасындағы үйлесімділік (келісімділік) мәселесі. Бір компьютерлерде жадының қабатталуы пайдаланылса, біреулеріне дамытылған регистрлік структура, көпдеңгейлі жады, кэш-жады немесе т.б. енгізілген, бірақ барлық жағдайда да жадыны осылайша ұйымдастыру ерекшеліктері тек бір мақсатқа жету үшін бағытталған – деректерді және командаларды таңдауды жеделдету.
Бағдарламалардың басым көпшілігінің орындалу процесі екі қасиетпен сипатталатыны белгілі: есептеудің жергіліктілігі және деректерді пайдалану жергіліктілігі. Екі жағдайда да бағдарламаның жұмысы үшін қажетті келесі объект (команда немесе операнда) жедел жадыда алдыңғы объектіге «жақын» жерде орналасады. Бір оператордан және көп итерациядан тұратын цикл – жоғары есептеу локальділігі ұйымдастырылған бағдарлама фрагментінің идеалды мысалы бола алады. Тәжірибе жүзінде көптеген бағдарламаларда осы екі қасиет есептеудің жергіліктілігі және деректерді пайдалану жергіліктілігі де кездеседі. Әрине, бұл заңдылық емес. Подпрограммалар және функцияларды шақыру, массивтерді жанама адрестеу, көп өлшемді массивтер және деректердің күрделі структурасымен сәтсіз жұмыс істеу, әртүрлі шартты операторларды пайдалану – мұның бәрі нақты бағдарламалардағы жергіліктілік қасиетінің әлсіздену себебінің тек шамалы тізімі ғана.
Бағдарламалау тілдеріндегі есептеу және деректерді пайдалану жергіліктілігін анықтайтын негізгі конструкция циклдар болып табылады. Әрине, цикл денесін жылдам жадыға орналастырған орынды, себебі келесі итерацияда дәл сол командаларды орындау қажет болуы мүмкін. Деректермен де осыған ұқсас ситуация: жиі пайдаланылатындардың барлығын да, оқу/жазу уақыты және процессордың жұмыс істеу жылдамдығы әруақытта үйлестірілген (келісілген) регистрларда сақтаған тиімді. Бірақ-та, деректердің үлкен көлемін регистрларде ұстау мүмкін емес. Бұндай жағдайларда жады иерархиясындағы келесі деңгей, мысалы, кэш-жады пайдаланылады. Егер кэш-жады көлемі жетпесе, онда келесі деңгейді іске қосуға және т.с. болады. Күнделікті өмірден бұл фактіге ұқсас көптеген мысалдар келтіруге болады. Мысалы, кітапхананың оқу залын қарастырып көрелік. Күнделікті қажеттінің бәрі залдағы қол жетімді жұмыс столдарына (регистрлар) қойылады, жиі пайдаланылатын кітаптар қоры осы залдағы сөрелерге жайғастырылады (кэш-жады), негізгі кітаптар қоры залға жақын маңдағы бөлмелерде сақталады (негізгі жады), кейбір жағдайларда кітапхананың абоненттік бөліміне, архив қорларына баруға тура келеді (дискілік жады), табылмаған кітаптарды басқа кітапханалардан заказ беретін кездер де кездеседі (магниттік лентадағы (дискідегі) архив).
Жадының әртүрлі деңгейлерін нақты пайдалануға өте көп мысалдар келтіруге болады. Бұл регистрлар және регистрлік файлдар, түрлі деңгейдегі кэш-жадылар, негізгі жедел жады, виртуалды дискілер, қатты дискілер, ленталық роботтар және т.б. көптеген түрлері.
Әрине, әрбір компьютердегі жады иерерхиясын қалыптастыру заңдылығы бірдей: иерархия деңгейі жоғары болған сайын деректермен жұмыс істеу жылдамдығы да жоғары.
Жады иерархиясын пайдаланудың тиімділігі ертеде белгілі болды. Жоғарыда қарастырылған ILLIAC IV компьютерінің өзінде төрт деңгейді бөлуге болады. Әрбір процессорлық элемент 6 бағдарламалық адрестелген регистрлерді және 2048 сөзге арналған өзінің жеке жергілікті жедел жадысын қамтыды. Деректерді сақтау үшін әрбірі 1 Гбит болатын екі қатты диск пайдаланылды, ал деректерді ұзақ мерзімге сақтау үшін, сыйымдылығы 1012 бит болатын бір реттік жазбалы лазерлік жады қолданылды (аргондық лазер сәулесі барабанға бекітілген, жұқа металдан жасалған пленкаға тесіктер күйдіріп түсірді).
Әрине, жады иерархиясының параллелділікке тікелей қатысы жоқ. Бірақ, ол, компьютер өнімділігін жоғарылату үшін өте үлкен роль атқаратын компьютер архитектурасының ерекшеліктерінің біріне жататыны сөзсіз. Қазіргі уақытта жады иерархиясын пайдалану, суперкомпьютерлерден бастап дербес компьютерлерге дейін жоғары деңгейде жолға қойылған
Сұрақтар мен тапсырмалар
Компьютердің тактілік уақыты және тактілік жиілігі бір бірімен қандай қатынаспен байланысқын?
Егер компьютердің тактілік уақыты 2,5 нс тең болса, және әрбір тактіде ол екі операция орындай алса, онда компьютердің шектік өнімділігі неге тең?
Мектеп немесе ЖОО өмірінен, өндірістен конвейерлік өңдеуге мысал келтіріңіз.
Мектеп немесе ЖОО өмірінен, өндірістен параллель өңдеуге мысал келтіріңіз.
Компьютер параллель жұмыс жасайтын 7 құрылғыдан тұрсын және оның әрбірі бір операцияны 7 уақыт бірлігінде орындай алсын. Қандай минимал уақытта бұл компьютер 7 тәуелсіз операцияны өңдей алады?
Конвейерлік құрылғы сәйкесінше n1 , n2, ..., nk тактіде қосылатын к деңгейден тұрсын. Осы құрылғыда m операция қандай минималді такті санында орындалады?
Не себепті конвейерлік компьютердің шектік өнімділігіне практика жүзінде дәл жету мүмкін емес?
Соңғы компьютерлердің жады иерархиясында қандай деңгейлер пайдаланылады?
