
- •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 функциялары
7 Сурет. Бір операцияны бес тактіде орындайтын тізбекті құрылғының
көмегімен С=А+В қосындысын есептеу
Конвейерлік өңдеу
Алдыңғы мысалда, бір қосу операциясын орындау үшін, құрылғы бес тактіге бұғатталып басқа ешқандай жұмыс орындамаған болатын. Бұның тиімділігі бар ма және енгізілетін массив элементтерінің барлығын өңдеу процесін одан да тиімді ұйымдастыруға бола ма?
8 Сурет. Бір операцияны әрбірі бес тактіде орындайтын екі бірдей тізбекті
құрылғының көмегімен С=А+В векторларын қосу
Бұл сұраққа жауап беру үшін нақты сандардың компьютерде берілуін еске түсіруіміз керек. Мұнда әрбір сандар жұбын қосу микрооперациялар тізбегі түрінде орындалады, ретін салыстыру, ретін теңестіру, мантиссаларын қосу, нормализациялау т.б. Жақсы жағы: әрбір енгізілген сандар жұбын өңдеу процесінде микрооперация бір рет қана және әруақытта бір тәртіппен бірінен кейін бірі іске қосылады. Бұл, бірінші микрооперация өз жұмысын орындап нәтижесін екіншісіне бергеннен кейін, ағымдағы жұпты өңдеу үшін бұдан ары оның қажеті болмайды, яғни ол, құрылғыға енгізілуді күтіп тұрған келесі аргументтер жұбын өңдеуді бастай алу мүмкіндігі бар деген сөз.
Осы айтылғандарды ескере отырып, құрылғының келесі түрде құрастырылуын қарастырайық. Әрбір микрооперацияны құрылғының жеке бөлігінде белгілеп алып, оларды орындалу тәртібі бойынша орналастырамыз. Алғашқы уақыт мезетінде енгізілген мәндер өңдеу үшін бірінші бөлікке келіп түседі. Бірінші микрооперация орындалғаннан кейін, бірінші бөлік өз жұмысы нәтижесін екінші бөлікке береді де, өзі өңдеуге жаңа жұпты алады. Осылайша, енгізілген аргументтер өңдеудің барлық этапынан өткеннен кейін, құрылғыдан шығарда операцияның орындалу нәтижесі алынады.
Есептеуді ұйымдастырудың осындай тәсілі – конвейерлік өңдеу деп аталады. Құрылғының әрбір бөлігі конвейердің баспалдағы, ал жалпы баспалдақтар саны – конвейер ұзындығы деп аталады. Нақты сандарды қосу операциясын орындау үшін әрқайысы бір тактіде қосылатын бес баспалдақтан тұратын конвейерлік құрылғы жобаланған болсын делік. Конвейерлік құрылғының бір операцияны орындау уақыты барлық конвейер баспалдақтарының қосылу уақыттарының қосындысына тең. Бұл екі санды қосу операциясы бес тактіде орындалады, яғни алдыңғы тізбекті құрылғы жағдайындағы осындай операцияның орындалу уақытымен бірдей деген сөз.
Енді екі массивті қосу процесін қарастырайық (9 сурет). Алғашында, бірінші парды қосу нәтижесі бес тактіден кейін алынады. Бірақ мұнда, бірінші пармен бірге бір мезетте басқа элементтердің де бөлшектік өңдеуден өткенін байқаймыз. Конвейерлік құрылғыда әрбір келесі тактіде кезектегі элементтер қосындысы пайда болады. Сонымен, барлық операцияны орындауға тізбекті құрылғыны пайдаланғанда 500 такті қажет етілсе, конвейерлік құрылғыда 104 такт қажет етіледі.
Шамамен жалпы жағдайда да осындай болады. Егер конвейерлік құрылғы l баспалдақты қамтыса, және әрбір баспалдақ бір бірлік уақытында қосылса (срабатывает), онда бұл құрылғының n байланыссыз (независимый) операцияны өңдеу уақыты l+n-1 бірлікті құрайды. Егер де бұл құрылғыны монопольді режимінде пайдаланса (тізбекті сияқты), онда өңдеу уақыты l×n-ге тең болады. Нәтижесінде, мәліметтерді конвейерлік өңдеуді пайдалану есебінен n-нің үлкен мәндері үшін l есе үдеу аламыз.
9 сурет. Конвейерлік құрылғының көмегімен С = А+В векторларының
қосындысын есептеу. Конвейердің бес баспалдағының
әрбірі бір тактіде іске қосылады
Мұндағы «скалярлық», «векторлық» және «конвейерлік» эпитеттерін пайдалану жиі шатасуға әкеліп соқтырады, себебі, олардың көбі мағынасы жақын «өңдеу», «команда» және «құрылғы» ұғымдары үшін де қолданылады. Скалярлық команда деп, барлық аргументі тек қана скаляр шама болатын команданы айтады. Егер команданың кемінде бір (хотя бы один аргумент) аргументі вектор болатын болса, онда мұндай қоманданы векторлық команда деп атайды. Мысалы, Сray C90 компьютерінің командалар жүйесінде екі нақты санды S1 және S2 қосып, нәтижесін S3 –ке енгізітін Ascal скалярлық командасы бар S3: Ascal S1,S2 → S3. Сонымен қатар, бір мезгілде скаляр командамен бірге екі векторды қосып, нәтижесін үшіншісіне V3 енгізетін Avekt командасы қарастырылған: AvektV1, V2 → V3.
Түскен команданың кодына байланысты (Ascal немесе Avekt) процессор операнданы скаляр адрестері ретінде немесе вектор бастамасы адресі ретінде интерпретациялайды.
Скаляр
және конвейерлік құрылғылар арасындағы
айырмашылықты біз жоғарыда талдап
өттік. Кейбір жағдайларда, процессор
архитектурасына деректер векторларын
өңдеу үшін ғана бағытталған векторлық
құрылғылар енгізіледі. Мысалы, Сray C90
компьютерінде бүтін сандарды қосудың
тек скаляр командаларын
ғана орындайтын
конвейерлік құрылғысы да және бүтін
санды қосудың векторлық командаларын
ғана орындауға арналған конвейерлік
құрылғысы
да бар. Айта кетсек, бұл компьютерде (
және
бүтін санды командаларынан ерекше)
нақты сандарды қосу командалары Ascal
және
Avekt
бір құрылғыда
орындалады.
Жоғарыда қарастырып кеткендей, конвейерлік құрылғы бір тактіде қосылатын l баспалдақтан тұрсын. n элементтен тұратын екі векторды бір векторлық команда көмегімен немесе осы векторлар элементтерін қосатын қатарынан n скалярлық командаларды орындау арқылы қосуға болады. Егер n скалярлық командалар осындай құрылғыда бірінен кейін бірі орындалатын болса, онда жалпы заңдарға сәйкес олар l+n-1 тактіде өңделген болар еді.
Ал енді осы екі векторды қосу үшін векторлық командаларды пайдаланатын болсақ жоғарыдағы формулаға тағы бір элемент қосылады: σ+l+n-1, мұндағы σ – векторлық команданы иницализациялау үшін қажетті уақыт. Негізінде, векторлық команданы орындау, сегментациялауды қолдау немесе векторлық команданы иницализациялау кезінде ғана болмаса басқалай қосымша іс-әрекеттерді қажет етпейді десе де болады. Әрине, формуладан көріп тұрғанымыздай n шамасы, яғни элементтер саны аса көп болмаған жағдайда сәйкес векторлық командаларды векторлық емес скаляр режимде орындаған тиімді екені айқын.
Формуладағы σ да l-де n–нің мәніне тәуелсіз, сондықтан, кіріс векторларының ұзындығы артқан сайын конвейерлік өңдеудің тиімділігі арта түседі. Егер өңдеудің тиімділігі ретінде орындалған операциялар санының n оның орындалу уақытына t қатынасына тең конвейерлік құрылғының нақты өнімділігін Е алатын болсақ, онда өнімділіктің кіріс векторына тәуелділігі келесі қатынаспен анықталады:
мұндағы τ – компьютердің жұмыс тактісі уақыты.
Төмендегі 10 - суретте осы тәуелділік график түрінде келтірілген.