
- •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 функциялары
39 Сурет. Блокты-екідиагоналды жүйеге арналған Макрограф
Граф құрылымынан көрініп тұрғандай, егер (2.10) алгоритмін векторлы-матрицалық операциялар тізбегі ретінде қарастыратын болсақ, онда ол тізбекті болады және ол параллельденбейді. Іс жүзінде жеке алғанда әрбір макрооперация параллельденбейді. Сонымен бірге ол екідиагоналды жүйенің шешімін береді. Сондықтан, жүйенің оң жақ бөлігін есептеу процесі ғана параллельденуі мүмкін, егер де әрине жүйені (2.10) сияқты қайта шешетін болса.
Бұл фактілерден, қарастырылып отырған (2.9) жүйені шешу алгоритмін жақсы параллельдеу мүмкін емес деп қорытынды жасауға болар еді. Алайда бұндай қорытынды жасау асығыстық болады.
Блокты-екідиагоналды жүйені шешу алгоритмін зерттеп көрелік Алгоритмнің полиэлементті. Берілген матрица элементтері мен векторлардың жоғарыдағы жасалған белгілеулерін ескере отырып алатынымыз:
(2.11)
Бұл
жағдайда барлық i,
k
үшін
деп алынады. (2.11) формуласында b,f,
e,
x, d, y
шамалары бойынша u
шамасын есептейтін ең басты және жалғыз
скалярлы операция
и=b-1(f - ex - dy), (2.12)
Тағы да операцияны тиімсіз қарапайым қайта нөмірлеу. Алгоритм графын тұрғызу үшін тік бұрышты тор қарастырамыз және оның түйіндерінің (тораптары) координаталары i, к бүтінсанды деп алайық. Тордың барлық түйіндеріне 1 ≤ i ≤ n, 1 ≤ к ≤ m үшін граф төбелерін орналастырамыз және оларды (2.12) операцияларына сәйкес келеді деп санаймыз. Кіріс деректерімен және кейбір аргументтердің нөлдік мәндерімен жабдықтайтын төбелерді көрсетпейміз.
(2.11) өрнегін талдай келе, координатасы i, k болатын төбеге координаталары i - 1, k және i, k - 1 болатын төбелер сәйкес келетін операциялардың орындалу нәтижелері берілетініне көз жеткізу қиын емес. Координаталары i, k болатын операцияны іске асыруға қажетті қалған барлық деректер кіріс деректері болады және тек осы операцияны жүргізу үшін ғана керек. Бұл алгоритм графында (2.5) алгоритміндегі сияқты кіріс деректерін көптеп жіберу жоқ. n = 5, m = 9 болған жағдайдағы алгоритм графы 40-шы суретте көрсетілген. Одан алгоритм графы өте жақсы параллельденетінін көреміз. Максималды параллель форманың ярустары пунктирлі сызықтармен белгіленген. Кіріс деректерінің енгізілуін ескермеген кездегі алгоритмнің биіктігі m+n+1, алгоритмнің ені min(m, n). 41-суретте осы графтың төбелері пунктирлі сызықтармен біріктірілген. Осындай әрбір топ (бөлік) 39-шы суретте келтірілген графтың бір төбесіне сәйкес. Олар жалпыланған паралллель форманың ярустары болып табылады. Осы суреттерден жақсы параллельденетін алгоритмнің өзі операцияларды сәтсіз үлкейткенде қалай параллельденбеуі мүмкін екені көрініп тұр.
40 Сурет. Блокты-екідиагоналды жүйеге арналған граф
41 Сурет. Жалпыланған пралллель форманың ярустары
Мысал 3. Бірөлшемді жылу өткізгіштік теңдеуі үшін шектік есебін шешу жолын қарастырайық. Бізден u (у, z) шешімін табу талап етілсін,
мұндағы
h қадамымен z және τ қадамымен у бойында бірқалыпты тор тұрғызайық. Қандай да бір себептерге байланысты айқын схема таңдап алынды делік.
Алгоритм келесі формулаға сәйкес іске асырылатын болсын.
(2.13)
Алгоритм графын тұрғызу үшін i, j остерімен тік бұрышты координат жүйесін енгізейік. Берілген айнымалылар z, у және i, j арасындағы байланыс
қатынасымен беріледі.
Бүтінсанды тордың әрбір торабына граф төбесін орналастырамыз және оны a, b, c аргументтерінің әртүрлі мәндері үшін орындалатын келесі скаляр операцияға сәйкес келеді деп есептейміз.
(2.14)
Алгоритм графы h = 1/8, τ = Т/6 жағдайы үшін 42 а, б - суретінде көрсетілген. Облыс шекарасында төбелер орналасқан, олар бастапқы деректердің және шектік мәндердің енгізілуін білдіреді.
Бұл мысалда алгоритмдердің кезкелген компьютерде іске асырылуына қатысты өте маңызды сұрақ та қарастырылады. Бұған дейін біз оны операциялардың параллельді форманың қабаттары бойынша орындалуымен байланыстырған болатынбыз. Әрине, бір қабаттың операциялары бір-біріне тәуелді емес және оларды әр түрлі құрылғыларда бір мезгілде орындауға болады. Бірақ, параллель есептеуді осылай ұйымдастырудың тиімділігі өте төмен болуы мүмкін. 42, а – суретте, (2.13) алгоритмінің максималды параллель формасының барлық ярустары пунктирлі сызықтармен көрсетілген. Операциялар осы ярустар бойынша орындалады делік.
Бір ярустың (2.14) түріндегі әрбір операциясы үш аргументті талап етеді. Олар алдыңғы яруста орындалған операциялардың нәтижелері болып табылады. Егер, бір яруста алынған деректердің жадыдан тез алынуы мүмкін болса, онда алгоритмді параллель форманың ярустары бойынша іске асыруда ешқандай маңызды қиыншылықтар туындамайды. Дегенмен, үлкен көпөлшемді есептер үшін ярустар үлкен масштабты болып, олар туралы ақпарат жылдам жадқа сыймай қалуы мүмкін. Онда оларды орналастыру үшін баяу жадты пайдалануға тура келеді. Бұл жады үшін бір санның таңдалу уақыты (2.14) базалық операциясының орындалу уақытынан әлдеқайда асып түседі. Ол дегеніміз кезекті ярусқа өту кезінде операцияны орындауға жұмсалған уақыт жадымен өзара қатынас уақытынан біршама аз уақытты алуы мүмкін дегенді білдіреді. Операцияның орындалу уақытының жадыға қатынау уақытына қатынасы неғұрлым аз болса, параллель форманың ярустары бойынша (2.13) алгоритмін іске асырудың тиімділігі соғұрлым төмен болады. Бұл жағдайда, параллель компьютердің жұмыс уақытының басым бөлігі есептеуге емес, баяу жадпен деректер алмасуға жіберіледі.