
- •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 функциялары
19 Сурет. Сm* есептеу жүйесінің сызбасы
NUMA-компьютерінің тағы бір мысалы максималды конфигурацияда 256 процессорды біріктірген BBN Butterfly компьютері болды (20 - сурет).
Компьютердің әрбір есептеу торабы процессордан, локальді желіден, жады контроллерінен тұрады. Ол сұраныстың локальді жадыға тиісті немесе оны Butterfly коммутаторы арқылы қашықтағы торапқа жіберу қажет екендігін анықтайды.
Бағдарламашының көзқарасы бойынша жады ортақ жалпы жады, ондағы қашыққа сілтемелер локальді сілтемелерден біршама ұзақ іске асырылады (шамамен 6мкс қашыққа, 2мкс локальді үшін).
Әрине, үлкен NUMA – компьютерлерін жасау жолымен алға қарай батыл жүре беруге болар еді, егер күтпеген бір проблема болмаса – ол жеке процессорлардың кэш-жадысы. Көп процессорлы жүйелер үшін, жеке процессорлардың жұмысын едәуір жылдамдатуға көмектесетін кэш-жады –тар орын болып табылады. Алғашқы NUMA – компьютерлерінің процессорларында кэш-жады болмағандықтан, мұндай мәселелер де туған жоқ болатын. Бірақ қазіргі заманғы микропроцессорлар үшін кэш-жады ажырамас құрамдас бөлік болып табылады. Біздің бұл мәселеге алаңдау себебімізді түсіндіру қиын емес. P1 процессоры q ұяшығында х мәнін сақтаған делік, содан кейін Р2 процессоры дәл сол q ұяшығындағы ақпаратты оқығысы келсін. Сонда Р2 процессоры не алады? Әрине, ол х мәнін алса екен деріміз анық, бірақ Р1 процессорының кэшіне түскен х мәнін ол қалай ала алады? Бұл мәселе, кэш-жады мазмұнының үйлесімділік мәселелері деген атқа ие (cache coherence problem, кэштің когеренттік мәселесі). Айтылған мәселе қазіргі заманғы SMP – компьютерлері үшін де актуалды, олардың да процессорлары кэші мәліметтерді пайдалануда сәйкессіздік туғызуы мүмкін.
Осы мәселені шешу үшін NUMA архитектурасының арнайы модификациясы – ссNUMA (cache coherence NUMA) жасалып шығарылды. Бұл жерде біз, барлық кэштер мазмұндарының үйлесімділігін қамтамасыз ететін көптеген хаттамалардың техникалық берілулеріне тоқталмаймыз.
Маңыздысы, бұл мәселе шешілетіні, пайдаланушыларға ауыртпалық әкелмейтіндігі. Пайдаланушы үшін басқа маңызды сұрақ: қаншалықты NUMA архитектурасы «біртекті емес»? Егер өз жадысына қарағанда, басқа тораптың жадысымен байланысқа 5-10% уақыт көп кетсе, онда бұл жағдайда ешқандай сұрақ болмауы да мүмкін.
20 Сурет. Bbn Butterfly есептеу жүйесінің сызбасы
Көпшілік пайдаланушылар бұл жүйеге UMA(SMP) сияқты қарайды және тәжірибе жүзінде SMP үшін құрылған бағдарламалар мұнда жеткілікті түрде жақсы жұмыс істей алады. Алайда, қазіргі заманғы NUMA жүйесі үшін тіпті олай емес, себебі локальді және қашыққа қатынас уақытының арасындағы айырмашылық 200-700% аралығын құрайды. Осындай қатынас жылдамдықтарының айырмашылығы кезінде, бағдарламалардың қажетті орындалу тиімділігін қамтамасыз ету үшін, талап етілетін деректерді дұрыс орналастыруға көп көңіл бөлу керек.
Қазіргі уақытта ссNUMA архитектурасы негізінде дәстүрлі ортақ жадылы компьютерлердің мүмкіндіктерін кеңейтетін көптеген нақты жүйелер шығарылуда. Егер жетекші өндірушілердің SMP серверлері конфигурациялары 16-32-64 процессорды құраса, онда олардың ссNUMA архитектуралы соңғы кеңейтілулері 256 және одан да көп процессорларды біріктіреді.
Параллель компьютерлердің архитектурасын жетілдіру және оларды бағдарламалық қамтамасыздандыруды дамыту қатар жүргізілді. Параллель есептеу жүйелерінің аппараттық және бағдарламалық құрамдарын дамытуды бір-бірінен бөліп қарауға болмайтынын тәжірибе көрсетті. Бір құрамдас бөлігіне жаңашылдық енгізу, басқасына да өзгеріс енгізуге тура келтіреді. Оған жақсы мысал, Cray T3D/T3E тұқымдас компьютерлерде, процестерді барьерлі синхрондауға аппараттық демеу болып табылады.
Ендігі бізді қызықтыратын ең бірінші мәселе – ол параллель бағдарламалау технологиясындағы өзгерістер. Әрине, қазіргі таңда бағдарламашылар қоржынында Ассемблер немесе Fortran ғана емес, көптеген жаңадан құрастырылған жүйелер және бағдарламалау тілдері бар екені белгілі. Алайда, қазіргі уақытта, тиімді параллель бағдарламалық қамтама құрастыру, параллель есептеудегі басты мәселе болып табылады.
Сонымен, бір есепті шешуге бірнеше процессорларды қалай жұмылдыруға және мәжбүрлеуге болады? Бұл сұрақ алғашқы параллель компьютерлердің шығуымен бір уақытта пайда болды, бүгінгі күні әртүрлі бағдарламалау технологияларының тұтас спектрі жинақталған. Нақты технологиялардың толығырақ мазмұны 2-бөлімде баяндалады, мұнда біз негізгі бағыттарды сипаттаумен шектелеміз.
Бастапқы тізбекті бағдарламаларға «параллель» спецификасын қосатын арнайы комментарилерді, дәстүрлі бағдарламалау тілдерінде пайдаланудан бастайық. Айталық, сіз Cray T90 векторлы-конвейерлік компьютерінде жұмыс істейсіз. Қолданудағы бағдарламаның кейбір циклінің барлық итерациялары бір-біріне тәуелсіз екені белгілі болса, онда оны «векторлауға» болады, яғни векторлық командалар көмегімен конвейерлік функционалды құрылғыларда өте тиімді орындауға болады. Егер цикл қарапайым болса, онда тізбекті кодты параллель кодқа айналдыру мүмкіндігін компилятордың өзі де анықтай алады. Егер компилятордың жоғары интеллектілігіне сенімділік болмаса, онда цикл басына векторлау мүмкіндігінің және тәуелсіздігінің жоқтығына айқын белгі қою керек.
Дербес жағдайда, Fortran бағдарламалау тілінде (Fortran бағдарламалау тілі параллель есептеуде жиі қолданылатынын айта кету керек) бұл былайша көрсетіледі:
CDIR$ NODEPCHK
Fortran тілінің ережесі бойынша бірінші позициядағы ´С´ әріпі ағымды жолдың комментарий екенін, ´DIR$´ тізбегі компилятор үшін арнайы комментарий екенін, ал ‘NODEPCHK’ бөлігі - орындалып жатқан циклдің итерациялары арасында ақпараттық тәуелділіктің жоқтығын көрсетеді.
Арнайы комментарийлерді пайдалану параллель орындалу мүмкіндігін ғана қосып қоймай, сонымен қатар бағдарламаның алдыңғы нұсқасын да толық сақтайды. Тәжірибе жүзінде бұл өте ыңғайлы, мысалы, егер компилятор параллельділік туралы ештеңе білмесе, онда ол бағдарламаның тізбекті семантикасын негізге ала отырып, арнайы комментарилердің бәрін ескермей өткізіп жібереді
Қазіргі уақыттағы кең тараған OPEN MP стандарты да комментарийлерді пайдалануға негізделген. Мұнда ортақ жадымен, жіптермен жұмыс істеуге және параллельділікті айқын сипаттауға басты бағдар жасалған.
FORTRAN тілінде OPEN MP арнайы коммментаридің белгісі !SOMP префиксі болып табылады, ал С тілінде «#pragma omp» директивасы қолданылады. Қазіргі күні SMP–компьютерлерінің барлық жетекші өндірушілері өз платформаларындағы компиляторларда OPEN MP-ді қолдайды.
Параллель бағдарламаларды алу үшін арнайы комментарилерді пайдаланумен қатар, қолданыстағы бағдарламалау тілдерін жетілдіруге де жиі баруда. Пайдаланушыға бағдарламаның параллельді құрылымын анық тапсыруға және кейбір жағдайларда параллель бағдарламаны басқаруға мүмкіндік беретін қосымша операторлар және айнымалыларды сипаттаудың жаңа элементтері енгізіледі.
High Performance Fortran (HPF) тіліне, FORTRAN тілінің дәстүрлі операторлары және арнайы комментарилеріне қоса, бағдарламаның параллель циклдерін сипаттау үшін енгізілген FORALL жаңа операторы кіреді. Сонымен қатар, мысал ретінде РАН жүйелік программалау Институтында құрастырылған, ANSI C кеңейтілуі болып табылатын mpC тілін айтуға болады. mpC тілінің негізгі мақсаты (қызметі) – біртекті емес есептеу жүйелеріне арналған тиімді параллель бағдарламаларды құру.
Параллель жүйелер архитектурасының спецификасын немесе қайсібір пәндік аумақтың қандай да бір есептер класының қасиеттерін дәлірек беру үшін, параллель бағдарламалаудың арнайы тілдерін қолданады. Транспьютерлік жүйелерді бағдарламалау үшін Occam тілі құрылды, ал ағынды машиналарды бағдарламалау үшін бір ретті меншіктеу тілі Sisal жобасы жасалынды. М. В. Келдыш атындағы қолданбалы математика Институтында И. Б. Задыхайлоның басқаруымен құрастырылған декларативті НОРМА тілі (есептеулерді торлық әдістермен жүргізуде пайдаланылды) өте қызықты және ерекше тіл болып саналады. Тілдің жоғары деңгейлі абстракциясы, математиктің мәселені бастапқы қоюына жуық нотацияда есептерді сипаттауға мүмкіндік береді, оны тілдің авторлары шартты түрде бағдарламашысыз бағдарламалау деп атайды. Тілде есептеу ретін бекітетін сонымен қоса, алгоритмнің табиғи параллельділігін жасыратын дәстүрлі бағдарламалау тілдерінің конструкциясы жоқ.
Массивті-параллель компьютерлердің пайда болуынан бастап, параллель процестердің ара-қатынасын қолдайтын кітапханалар мен интерфейстер кең тарай бастады. Осы бағыттағы типтік представитель, әрбір параллель платформада, яғни векторлы-конвейерлі супер ЭЕМ-нан бастап, дербес компьютерлік желілер мен кластерлерге дейін іске асырылған интерфейс Message Passing Interface (MPI) болып табылады. Мұнда, қосымшаның қандай параллель процестері бағдарламаның қай жерінде және қандай процестермен мәліметтер алмасатынын немесе өз жұмысын синхрондайтынын бағдарламашы өзі анықтайды. Негізінде параллель процестердің адрестік кеңістігі әртүрлі. Осы идеологияға сәйкес деп MPI мен PVМ-ді айтуға болады. Басқа технологияларда, мысалы Shmem, қосымшаның барлық процестеріне бірдей қолжетімді жалпы (shared) айнымалыларды да, локальді (private) айнымалыларды да қолдануға мүмкіндік береді.
Linda жүйесінде параллель бағдарлама құру үшін кезкелген тізбекті тілге төрт қосымша функция in, out, read, eval қосса жеткілікті. Өкінішке орай, бұл идеяның қарапайымдылығы оны іске асыруда үлкен мәселелерге тірейтіндіктен, бұл технология тәжірибелік құралдан гөрі академиялық қызығушылық обьектісіне алмастырылады.
Тәжірибе жүзінде қолданбалы бағдарламашылар көбіне айқын параллельді конструкцияларды мүлдем қолданбайды, қажет кезінде бағыныңқы бағдарламалар мен параллель пәндік кітапханалар функцияларын пайдаланады. Бар параллельділік және бар оптимизация шақыруларда жасырылған, ал пайдаланушыға стандартты блоктарды тиімді пайдалана отырып өз бағдарламасының тек сыртқы бөлігін ғана жазу қалады. Осыған ұқсас кітапханаларға Lapack, ScaLapack, Cray Scientific Library, HP Mathematical Library, PETSc және көптеген т.б. жатады.
Сонымен, ендігі айтылатын ең соңғы бағыт – бұл арнайы пакеттер мен бағдарламалық кешендерді пайдалану. Бұл жағдайда, пайдаланушыға бағдарлама құрудың мүлдем қажеті жоқ. Негізгі мәселе – барлық керекті енгізілетін деректерді дұрыс көрсете алу және пакеттер функционалдығын дұрыс пайдалана білу. Осылай, көптеген химиктер квантты-химиялық есептеулерді параллель компьютерлерде жүргізу үшін GAMESS пакетін пайдаланады, алайда олар параллель өңдеудің қалай іске асырылаты туралы ойланбайды да.
Сонымен, алдыңғы параграфтардағы айтылғандарды қорытындылай келе, параллель компьтерлердің аппаратурасы және бағдарламалық қамтамасындағы соңғы бірнеше он жылдықтағы үлкен өзгерістерге өз бағасын беруіміз қажет. Осы өзгерістердің нәтижесінде, қазіргі күнгі пайдаланушылар, өте күрделі есептерді шығаруға мүмкіндік беретін қуатты есептеу жүйелеріне ие болды. Алайда, тәжірибе көрсеткендей, жалпы параллель есептеу жүйелеріне қатысты мәселелер толық жойылған жоқ, олар басқа деңгейге көшті десе болады. Егер алғашқы кезде, бірнеше қарапайым компьютерді тиімді пайдалану сұрағы қойылса, ал қазір жүздеген, мыңдаған және он мыңдаған процессорлардан тұратын жүйелердің тиімділігі туралы мәселе қойылуда. Мұнда әрбір процессордың өзі де күрделі параллель жүйе екенін ескеру қажет.
Сұрақтар және тапсырмалар
Екі есептеу жүйесіне орнатылған операциялық жүйелердің версияларында ғана айырмашылық болсын. Осындай компьютерлерде орындалған бірдей бағдарламаның жұмыс уақыттарында айырмашылық болуы мүмкін бе?
Егер 10000 жолдан тұратын бағдарлама текстінде бір символды ғана өзгертсе, онда оның жұмыс уақыты 10 есе өсуі мүмкін бе?
Егер 10000 жолдан тұратын бағдарлама текстінде бір символды ғана өзгертсе, онда компьютер өнімділігі 10 есе өсуі мүмкін бе?
Арнайы процессор синхронды жұмыс жасайтын бір биттік процессорлардан тұратын матрица делік. Осындай арнайы процессорларда қандай класты есептерді тиімді шешуге болады?
Соңғы микропроцессорларда суперскалярлық және VLIW-өңдеу идеясынан басқа тағы қандай параллельділік түрлері машиналық команда деңгейінде пайдаланылады?
Қандай процессор (суперскалярлық немесе VLIW) үшін компилятор, тиімді бағдарламаларды генерациялау үшін «интелектуалды» болуы қажет?
Үлкен көлемді процессорларды біріктіру үшін, неге ортақ шинаны қолданбайды?
«Линейка» топологиясы бойынша байланыстырылған n процессорлы жүйеде екі торап арасындағы жолдың орташа ұзындағы неге n|3-ке тең?
Байланыс структурасы «кольцо» топологиясына жақсы сәйкес келетін алгоритмге мысал келтіріңіз.
Омега-сети көмегімен 64 процессорды байланыстыру үшін, 4*4 айырып/қосқыштарының минимум қаншауы қажет етіледі?
«Үшөлшемді тор» топологиясында әрбір процессордың қанша тікелей көршілері бар?
Процессорлар арасындағы ара-қашықтық дегенді қалай түсінеміз?
«Үшөлшемді тор» 4×8×8 топологиясында процессорлар арасындағы максимал арақашықтық нешеге тең?
«Екіөлшемді тор» m×n топологиясында процессорлар арасындағы максимал арақашықтық нешеге тең?
SMP-компьютерінен NUMA архитектуралы компьютерге көшкен кезде пайдаланушы нені ескеруі қажет?
Әлемдегі ең қуатты компьютерлердің соңғы тізіміндегі (Тор500) қай компьютерде процессорлар саны көп және қанша?
MPI немесе OpenMP бағдарламалау технологияларының қайсысы таратылған жадылы компьютерлерге жақсы сәйкес келеді? SMP- компьютерлерге ше?