Файл қосу

ПАРАЛЛЕЛЬДІ ЕСЕПТЕУЛЕР




|ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ                       |
|Семей қаласының ШӘКӘРІМ атындағы МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ                 |
|3 деңгейдегі СМК құжаты      |ПОӘК            |                            |
|                             |                |                            |
|                             |                |ПОӘК                        |
|                             |                |042-39.1.ХХ/02-2013         |
|ПОӘК                         |                |                            |
|«Пареллельді есептеулер»     |18.09.2013 ж    |                            |
|пәнінің оқу-әдістемелік      |№1 басылым      |                            |
|кешені                       |                |                            |














                          «ПАРАЛЛЕЛЬДІ  ЕСЕПТЕУЛЕР»
                       ПӘНІНІҢ ОҚУ-ӘДІСТЕМЕЛІК КЕШЕНІ


                5B060200 - «Информатика» мамандығына арналған
                           ОҚУ-ӘДІСТЕМЕЛІК ЖИЫНТЫҚ









































                                    Семей
                                    2014


                                   МАЗМҰНЫ

|Глоссарий                                                                    |
|Дәрістер                                                                     |
|Практикалық сабақтар                                                         |
|Студенттердің өздік жұмыстарының құрылымы                                    |
|Әдебиеттер тізімі                                                            |
















































Глоссарий

call pvmfexit( info )  - PVM жұмысын аяқтайды.
call pvmfkill( tid, info ) – tid - идентификаторымен жұмысты аяқтайды.
call pvmfspawn( task, flag, where, ntask, tids, numt ) task   -  орындалатын
файл аты;
INTEGER  ntask – орындалатын программалар саны;
INTEGER  tids  - мәндер массиві.
INTEGER flag   - іске қосу опциясы;
MPI(Message Passing Interface ) – хабарламаларды  беру интерфейсі.
MPI_Comm_rank – процесстер рангісін анықтайды.
MPI_Comm_size -  процесстер санын анықтайды.
MPI_Recv – хабарламаның блокталынып алынуы.
MPI_Send – хабарламаның блокталынып берілуі.
msgtag – осы хабарлама тэгі;
nlnts – бүтін сандар саны;
PVM _Recv – блоктап алау.
PVM _Send – тағайындалған процесске хабарламаның асинхронды берілуі
PVM параллельді виртуальды машина.
PVM_initsend (int encoding) – үнсіз келісім бойынша инициализациялайды;
PVM_pkint – бүтін сандарды жинау.
PVM_rnkbuf  (int  encoding)  –   хабарламаны   орналастыратын   жаңа   буфер
құрып, идентификаторды қайтарады;
PVM_setsbuf (int bufid) – ағымдағы  буферді хабарлама жіберуге дайындайды;
PVM_upkint – жиналған бүтін сандарды қайта ашу.
startAddress – бірінші бүтін сан адресі;
tid – хабарлама жіберетін есеп идентификаторы;
where   - іске қосылатын орын;
Параллельді   компьютер  –  есепті  сандық  түрде  шешіп,  үйлесімді  шешуге
қабілетті процессорлардың жиынтығы.
Параллельді  программа – бұл әр процесс өзінің меншікті процессорында  жүріп
қана қоймай, параллель орындалатын программа.
Дәріс 1. Кіріспе. Параллель компьютерге сұраныс.  Параллель  программалаудың
дамуы

Мақсаты: Параллельдік  есептеулер  пәнінің  негізі  параллель  компьютерлер,
параллель программалар, параллель есептеулер туралы түсінік беру.

Кілттік сөздер: параллель, параллель программалар,  параллель  компьютерлер,
векторлы-конвейрлі компьютерлер, жоғары өндіруші программалар

Жоспары:
1. Кіріспе. Параллель программалаудың дамуы.
2. Параллель компьютерге сұраныс
3. Параллельді есептеулер туралы негізгі түсініктер.

      1. Соңғы жылдары  пайдаланып  жүрген  есептеуіш  машиналардың  есептеу
жылдамдығы мен сапасына көп көңіл бөлінетін болды. Сондықтан  қазіргі  кезде
қуатты  суперкомпьютерлер  және  көппроцессорлы   компьютерлер   жасалынуда.
Олардың мүмкіншіліктері өте зор. Берілген операцияның  орындалуы  жеделдеді,
әрі нәтижеге жету жылдамдығы өте жоғары.
      Жоғарғы  өндіруші  техникалар  қазірде  мынадай:   Векторлы-конвейерлі
компьютерлер, үлестірімділі-жадылы массивті-параллельді компьютерлер,  ортақ
жадылы   параллель   компьютерлер,   кластер   архитектуралы    компьютерлер
бағыттарда  дамуда.  Олар  деректерді   параллель   өңдеу   және   параллель
алгоритмдерді өңдеуді қолдануға негізделеді.  Арнаулы  программалы  жасақпен
жұмыс жасай білу үшін және параллель алгоритмін құрып  және  программалаудың
параллельділік тәсілін меңгеру үшін сәйкес білім мен біліктілік қажет.
      Бұл пәннің мақсаты  –  параллельді  есептеудің  негізін  қалыптастыру,
параллельді алгоритмдерді талдау. Пәнде үш мәселе қарастырылады:  аппараттық
жабдықталуы, программалау, алгоритмдер.


      2.Параллель компьютерлерге сұраныс және параллель программалаудың даму
кезеңдері
      Параллель компьютер дегеніміз – есепті сандық түрде  шешіп,  үйлесімді
шешуге қабілетті процессорлардың жиынтығы.
      Параллельді программа – бұл әр процесс өзінің  меншікті  процессорныда
жүріп қана қоймай, параллель орындалатын программа.
      Есептеу жылдамдығы жоғары, есептеу уақыты аз, сонымен  бірге  деректер
массивін өңдей алатын сұраныс қай кезде де орын алып отырған.
      Бірақ  компьютерлік   технологияның   дамуына   байланысты   параллель
компьютерлерді дамыту техника мен экономика салаларына өте қажет болды.  Жай
өмірден  параллельділікке  мысал  келтірсек,   көктем   басталысымен,   ағаш
жапырақтарының барлығы бірге өркендей бастайды, ал оркестрде барлық  әртүрлі
аспаптар ойнағанда, бір ғана әуенді естиміз.
      Параллельді  компьютерлер  мен  параллельді  есептеулер   қолданылатын
облыстарға тоқталсақ:
      -  күрделі  жүйені  сандық  модельдеуде:  ауа-райын   болжау,   гендік
инженерия,  интегралдық  схеманы  жобалау,  жаңалықтар,   кезекті   космосқа
ұшырылу туралы жедел хабар, т.б.
      -  бизнесте,  коммерциялық  салада:   видеоконференциялар,   параллель
мәліметтер қоры, банктік транзакция, т.б.
      - техникада: медицина саласында,  автоматты  түрде  диагноз  қою,  жер
сілкінуді  болжау,  айналадағы  ортаның  ластануын  анализдеу,   дәрі-дәрмек
препараттарын жасау, т.б.
      - білім беру саласында:  кеңейтілген  графика  және  виртуальды  әлем,
әсіресе, компьютерлік ойындар құрастыру.
      Жоба   жасаушылар   параллельділікті    қолдану    кезінде    көптеген
қиыншылықтарға  кезігуде.  Себебі,  компьютер  жұмысы   негізгі   операцияны
орындауға  кететін  уақытқа  тәуелді.  Ал,  келіп  түскен   командалар   мен
мәліметтер ағынын бір мезгілде өңдеп отыратын  процессор  «тактілі  циклмен»
жұмыс  жасау  керек.  Бұл  қиыншылықтарды  шешу   үшін   компьютер   жобасын
жасаушылар компьютерді күрделендіріп,  түрлендіру  үшін  мынадай  тәсілдерді
қолдана бастады:
      - конвейерлі өңдеу (бірнеше команданың әртүрлі стадиялары бір мезгілде
орындалады);
      -  функционалдық  модулдер  жиынын  кірістіру  (бірнеше  көбейткіштер,
сумматорлар, және т.б. жеке командалар ағынымен басқарылады),
      - жеке процессоры,  жадысы  және  логикалы  өзара  байланысты(желімен)
«компьютерлер жиынының бірігуі».
      Pentium III компьютерін 70  жылдардағы  компьютерлермен  салыстырғанда
суперкомпьютер болып есептелетін еді, қазір ол  атау  мұндай  компьютерлерге
сай  емес.  Суперкомпьютерлердің  өнімділігі  жоғары  және  жедел  жады  мен
дискілік жады көлемі үлкен болады.  Қазірде  дүние  жүзінде  500  ең  қуатты
компьютерлердің арасында 1-ші орын алып  отырған  компьютер  –  ASCI  WHITE.
Оның архитектурасы – 8192 процессорлы, жедел жадысы 4  терабайт,  өнімділігі
– секундына 12 триллион операция жасайды.
      Әрине, бұл компьютерлердің құны да арзан емес, бірнеше миллион  доллар
тұрады. Осыншама қымбат компьютерлерді пайдаланатындай бізде қандай  күрделі
есептер бар? Ол есептер соншама маңызды ма? Осы сұрақтарға жауап  беру  үшін
мынадай бір мысал қарастырайық.
      3. Мұнай  өндіретін  процесті  қарастырайық.  Жер  асты  резервуарлары
қазылған скважиналардан тұрады,  біреуінен  мұнай  сорылса,  екіншісінен  су
төменге айдалады. Бізге мынадай есеп  қойылады:  осы  резервуардан  алынатын
мұнайдың запасын анықтау керек немесе бізге қаншама қосымша скважина  керек,
осыны есептеу үшін біз схеманы қарапайым елестетейік.  Резервуарды  куб  деп
қарастырайық. Куб көлемі - 100х100х100  нүктелерден  тұрады.  Әрбір  нүктеде
орындалатын  функциялар  –  жылдамдық,  қысым,   температура,   компоненттің
концентрациясы (су, газ, мұнай, т.б.).  Барлығы  5-20  функция  (орташа-10).
Бұл  функциялар  сызықты  емес.  Сондықтан  оларды  есептеу  үшін   200-1000
операция орындалу керек (орташа -500).
      Жүріп жатқан процестер стандартты емес, сондықтан қадамдар  саны  100-
1000 (орташа-500). Сонда куб ішінде  орындалатын  арифметикалық  операциялар
саны:
      106 (нүктелер)*10 (функция)*500 (операция)*500 (қадам)=2.5*1012,  яғни
2500 млрд. арифметикалық операция.  Әрине,  мұндай  операцияларды  қарапайым
компьютерлермен орындасақ қаншама уақыт кетер еді.


      Бақылау сұрақтары
   1. Параллель компьютерлер дегеніміз не?
   2. Параллель есептеулер қандай салларда қолданылады.
   3. Суперкомпьютерлер дегеніміз не?
   4. Суперкомпьютерлердің қандай түрлері бар?


      Әдебиеттер
   1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2002
   2.  Грегори   Р.   Эндрюс.   Основы   многопоточного,   параллельного   и
      распределенного программирования. Пер. с. англ. –М.: Издательский  дом
      «Вильямс», 2003
   3. Акжалова А.Ж. Параллельные вычисления  (учебное  пособие).  –  Алматы,
      2004
   4.  Немнюгин  С.А.,  Стесик  О.Л.   Параллельное   программирование   для
      высокопроизводительных многопроцессорных систем – СПб., 2002


Дәріс 2-3. Параллельділік.  Программалаудың екі моделі. Тізбектелген және
параллель Параллельді компьютерлер: аппараттық жабдықталуы

Мақсаты: Параллельділік және программалаудың модельдері ұғымымен
таныстыру.

Кілттік сөздер: параллельділік, тізбектелген,  параллель,  модель,  дискілік
жады, процессор, көп деңгейлі.

Жоспары:
   1. Параллельділік
   2. Программалау модельдері
   3. Параллель компьютерлердің аппараттық жабдықталуы


      1. Параллельділік. Қазіргі бір  процессорлы  машиналар  компоненттері:
орталық  процессордан, бастапқы жадыдан, бір және көп деңгейлі кэш  жадыдан,
екінші  ретті  жадыдан  (дискілік   жады)   және   әр   түрлі   периферийлік
құрылғылардан тұрады.
      Программа орындауға қатысты  түйінді  (өзекті)  компоненттер:  орталық
процессор, кэш және жады.
      Жалғыз процессорлы компьютерлер архитектурасын дамыту үшін мынадай  әр
түрлі тәсілдерді қолдануға болады:
   1. Орталық процессордың бір ішкі  бөлігін  4  функционалдық  модульдермен
      (сумматор, көбейткіштер) алмастыру;
   2. Орталық процессордың өткізу  жолағын  (қабілетін)  үлкейту  үшін  оған
      жадының 2 не оданда көп блоктарын қосу;
   3. Уақыт бірлігінде орындалатын  командалардың  санын  арттыру  үшін  бір
      жадылы екі және одан да көп процессорларды қосу;
   4. Барлық компьютерлердің жұмыстары бір бағытта бағытталу үшін, яғни  бір
      программаны орындау үшін толық компьютерді машиналар желісіне қосу;
      Параллельділікті әртүрлі деңгейіне қарай классификацияланады:
         - тапсырма деңгейінің параллельдігі;
         - программа деңгейінің параллельдігі;
         - командалар деңгейінің параллельдігі;
         - арифметикалық және биттік туралау параллельдігі;
   1) Тапсырма деңгейінің параллельділігі  -  параллельділіктің  ең  жоғарғы
      деңгейі. Бұл  деңгейде  орталық  процессор  мен  енгізу-шығару  жүйесі
      параллель жұмыс жасайды.
      Мысал келтірсек:  бірнеше  тапсырмалар  бір  уақытта  жадыда  сақталып
тұрады да, тек олардың біреуі кез-келген берілген уақытта  орындалады.  Егер
бұл тапсырма енгізу-шығару қызметін керек ететін болса немесе  дискіден  оқу
керек болса,  бұл  операция  инициализацияланады,  яғни  тоқтатылады,  басқа
тапсырма орындауға жіберіледі. Ары қарай енгізу-шығару операциясы  аяқталған
соң және мәліметтер алынған соң,  басқару  кейін,  яғни  алғашқы  тапсырмаға
қарай қайтарылып процесс жалғасады.
   2)  Программа  деңгейінің  параллельдігі  -  бір  программа  оны  құраушы
      бөліктеріне бөлініп орындалатын процесс.  Параллельділіктің  бұл  типі
      процессордың жиынымен іске асады. Бұл көп процессорлары машина  барлық
      берілген есептеулерді бір мезгілде орындай алады.
   3) Командалар деңгейінің параллельдігі - бұл типті іске асыратын  негізгі
      тәсіл – конвейерлер. Бұл жағдайда не жеке командалар  қалқаланады,  не
      берілген  команда  бағыныңқы  операцияларға  жіктеледі.  Олар  да   өз
      кезегінде қалқалану жағдайына келтіріледі.
   4) Арифметикалық және биттік туралау параллельдігі - параллельдігінің  ең
      төменгі  деңгейі.  Бұл  деңгей  -  орталық  процессордағы  арифметика-
      логикалық құрылғыға жатқызылады.

2.   Программалау   модельдері.   Параллельді   есептеулер   сапасына   мына
көрсеткіштер әсер етеді:

1. Есептеудің жедел орындалуы.
2. Есептелу тиімділігі.
3. Есептелу құны.
4. Есептелу көлемі.

Есептелудің жедел орындалуы (speedup) мына шамамен анықталады:
[pic]
p – процессорлар саны
Есептелудің тиімділігі мына шамамен анықталады:
[pic]

p-процессорлар саны
Есептелу  құнының  пайдалы  бағасы  –   параллельді   есептелетін   уақыттың
процессорлар санына көбейтіндісін айтамыз.
[pic]               p - процессорлар саны

      Мысалдар келтірейік:
      1-мысал.  «Операциялар-операндтар»  графы  түрінде   есептеу   моделі.
Есептеу моделін  жеңілдету  үшін,  есептеу  барысындағы  кез-келген  есептеу
операциясына кететін уақытты бірдей және 1-ге  тең  деп  қабылдаймыз  (өлшем
бірлігін өз бетімізше аламыз).
      Мынадай  есеп  қойылсын:   Қарама-қарсы   бұрыштарының   координаттары
берілген  тіктөртбұрыштың  ауданын  есептеудің   алгоритмін   граф   түрінде
көрсетейік.
                                    [pic]

      Бұл мысалдан, есеп шешуде таңдалған алгоритмді  орындау  үшін  есептеу
схемасын басқаша да  құруға  болады  және  басқаша  есептеу  моделін  құруға
болады.  Сонда  әртүрлі  есептеу  схемалары   параллельділіктің   әр   түрлі
мүмкіншіліктерін қарастыруға мүмкіндік береді,  яғни  есептеу  моделін  құру
кезінде біздің алдымызда алгоритмді есептеу схемасының параллельді  орындалу
тәсілдерінің ең қолайлысын таңдау мақсаты тұрады.

2-мысал. Сандардың қосындысын табу алгоритмдерін қарастырайық.
[pic]
n- қосындылардың саны.
      Бұл есепті шешудің параллельді әдісін бастамас бұрын алдымен қарапайым
жағдайды қарастырамыз, яғни
      [pic]
      Мұның алгоритмі тізбектеп қосудан шығады.
S=0,
S=S+x1,...
Бұл алгоритмді тізбектеп есептеу схемасы мынадай:

                                    [pic]


      Бұл «стандартты» алгоритм тізбекті орындалады да, параллельді орындала
алмайды. Параллельді орындалу үшін қосындыны табу  операциясын  ассоциативті
орындап, есептеу процесін басқаша  құру  керек.  Бірінші  итерацияда  барлық
берілгендер екі  бөлікке  бөлінеді,  және  әр  жұп  үшін  олардың  қосындысы
табылады, Әрі қарай барлық алынған қосынды тағы  жұп  бөлікке  бөлініп,  жұп
мәндерінің қосындысы табылады, тағы с.с. Бұл  есептеу  схемасы  –  қосындыны
есептеудің каскадты схемасы деп аталады, оны граф түрінде тұрғызуға болады.

                                    [pic]

n=2k
Мұндағы итерациялардың саны: k=log2n,
Ал, қосу операцияларының саны Kсонғы=n/2+n/4+...+1=n–1
1. Параллельді программалық жабдықтау.
2. Параллельді компьютерлердің типі.

Енді соларды қарастырайық.

3. Параллельді программалық жабдықтау үшін мынадай талаптар орындалу керек:
    – параллельді (көптеген іс-әрекетті бір мезгілде орындай алу қабілеті);
    – кең көлемді (процессор санының көбеюіне бейімделу қасиетінің болуы);
    –  локальды  (жергілікті  қашықтатылған  жадыға  (байланыс)  қатынасының
      жоғарғы коэфиценттілігі);
    –  модулді   (күрделі   обьектілердің   өте   қарапайым   компоненттерге
      декомпозициялануы);


      Программалау модельдері: параллельді және тізбекті.
      Көпшілік қолданарлық (общедоступный) көп процессорлы  жүйе  аты  айтып
тұрғандай көптеген процессордың жыйынынан тұрады, олар  бір-бірімен  жадының
модульдер   жиынымен   өзара   байланысты.   Процессорлармен   жады    өзара
байланысатын желінің бір формасымен байланысады. Бұл типтің жалпы формасы

                                    [pic]

      Жадының әрбір ұяшығының адресі болады, сол адреспен процессор берілген
ұяшыққа  сұраныс  жасайды.  Жадының  ұяшықтарының  виртуальді   және   нақты
адрестері болады. Параллельді компьютерлердің екінші типіне  компьютерлердің
жиыны кіреді. Оларда бір–бірімен байланыстырушы желімен жалғанады.
      Әрбір компьютерлердің өзі процессоры, жергілікті жадысы болады,  бірақ
басқа процессормен байланыс жасай алмайды.  Жалпы  жады  барлық  компьютерге
үлестірілген.   Әрбір   компьютердің   өзіндік   адрестік   кеңістігі   бар.
Процессорлар арасындағы өзара байланыс бір-бірінен хабар алып не  жіберулмен
жүзеге  асады.  Хабарда  басқа  процессорың  есептеулеріне   керек   болатын
мәліметтер болуы мүмкін.

Үлестірілген жадылы мультикомпьютерлердің жалпы типі


Бақылау сұрақтары
   1. Параллельділік дегеніміз не?
   2. Программалаудың қандай модельдері бар?
   3. Тізбектелген модель дегеніміз не?
   5. Параллель модель дегеніміз не?

Әдебиеттер
   1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2002
   2. Грегори Р. Эндрюс. Основы многопоточного, параллельного и
      распределенного программирования. Пер. с. англ. –М.: Издательский дом
      «Вильямс», 2003. – 512с.
   3. Акжалова А.Ж. Параллельные вычисления (учебное пособие). – Алматы,
      2004
   4. Немнюгин С.А., Стесик О.Л. Параллельное программирование для
      высокопроизводительных многопроцессорных систем – СПб., 2002




Дәріс  4-5.  Параллельді  компьютерлер.  Тезорындалуын  арттыруға   арналған
техникалық  қамсыздандыру.  Параллель  компьютерлер  түрлері.  Ортақ  жадылы
(бөлінетін   жадылы)    көппроцессорлы    жүйелер.    Хабарламаларды    беру
мультикомпьютері   немесе   үлестірілімді   жадылы    компьютерлер.    Флинн
таксономиясы. Жаңа таксономияны құру тәсілдері

Мақсаты:   Студенттерді   тезорындалатын    аппараттық    және    ақпараттық
қамсыздандырумен таныстыру.

Кілттік сөздер:  мультикомпьютерлер,  процессор,  Флинн,  таксономия,  SIMD,
құрылымы, SISD құрылымы, MIMD құрылымы, MISD құрылымы.

Жоспары:
1. Параллель компьютерлер түрлері.
2.  Хабарламаларды  беру  мультикомпьютері   немесе   үлестірілімді   жадылы
  мультикомпьютер
3. Флинн таксономиясы

1. Процессорлар мен жады арасындағы байланыс  қандай  да  бір  өзарабайланыс
желісінің формасы арқылы жүзеге асырылады. Ортақ жадылы  конфигурациясы  бар
параллель компьютердің жалпы түрі төменде көрсетілген.
                                    [pic]
Жады келесі ерекшеліктермен шектеледі:
   1. Өлшемімен – қолданушыларға көп жағдайда жады жетіспейді,
      сондықтан виртуал жады ұғымы ойлап табылды.
   2. Жадының өткізу қабілеттілігі (latency) және иерархиясымен.
   3. Жадының өткізу қабілеттілігі (bandwidth)  –  жадыға  жазылатын  немесе
      жадыдан оқылатын мәліметтер көлемі.
   4. Жадыны қорғау – көптеген архитектуралар  программалық  қамсыздандыруды
      модификациядан  не  жүйелік  жадыдан   немесе   басқа   программаларды
      қолданғандағы жадыдан қорғауды қосады.
      Барлық жедел жадыдағы әрбір ұяшықтың қайталанбайтын адресі болады және
берілген  адресті  әрбір  процессор  берілген   ұяшықтарға   хабарлау   үшін
қолданылады. Жады ұяшығында  виртуал  адрес  және  физикалық  адрес  болады.
Виртуал адрестеу процессормен генерацияланған.
      Физикалық адрес жадыдағы нақты орынға ену  үшін  қолданылады.  Виртуал
және физикалық адрес арасында TLB (Translation Lookaside Buffer)  адрестерді
түрлендіру көмегімен автоматты түрде ауысу жүргізіледі.

2. Берілген компьютерлік жүйе жалғастырушы  желі  арқылы  өзара  байланысқан
компьютерлер  жиынын  береді.  Әрбір  компьютер  басқа  компьютерлерден  тыс
процессор  мен  локальді  жадыдан   тұрады.   Жады   компьютерлер   арасында
үлестірілген.
      Процессорлер үшін өзара байланыс бір-біріне хабарламаларды  беру  және
қабылдау көмегімен қамтамасыз етіледі.  Хабарламаларда  басқа   процессорлер
есептеу үшін қажет мәліметтер болуы мүмкін. Сондықтан, берілген  жүйеде  кэш
пен жадыны  сәйкестендіру  мәселесі  туындалмайды.  Процессорлар  арасындағы
хабарлама беру программамен тағайындалады. Берілген жүйенің  негізгі  идеясы
–  шешіліп  жатқан  есептің  бөлшектері  бір  уақытта  орындалатындай   етіп
бөлшектерге бөлу, сол кезде қойылған есепті тұтасымен шешуге болады.
      Жұмыс станцияларының жиынынан  тұратын  желілік  жүйе  –  жалпы  жұмыс
станциясының  желісі  (NOW  –  network   of   workstations)   немесе   жұмыс
станциясының кластері (COW –  cluster  of  workstation)  д.а.  Барлық  жұмыс
станциялары  бір-бірімен  байланысқан  бір   немесе   бірнеше   қосымшаларды
орындайды. Үлестірілімді жадылы қымбат  емес  мультипроцессорды  құрудың  ең
кең таралған әдісі – ол Beowulf машинасын құрастыру. Ол  базалық  аппараттық
қамсыздандырудан және Pentium процессорының  чипы,  желілік  карта,  дисктер
және Linux операциялық желісі сияқты ақысыз программалардан тұрады.


      3. Флинн таксономиясы.
      1. SIMD SISD MIMD MISD құрылымдары.
      SIMD құрылымы.

[pic]
                                                                       [pic]

МІМD номері  көптеген  өзара  байланысты  процестерден  тұрады,  олардың  әр
қайсысының жеке басқару блогы бар.
      Процесстердің өздерінің жеке командалары мен жеке мәліметтерін  етеді.
Әр түрлі процестердің орындаған жұмысы (есебі)  әртүрлі  уақытта  басталады,
әртүрлі  уақытта  бітуі  мүмкін.  Яғни,  олар  «аяқтарын   бірге   баспайды»
асихронды орындайды.
      МІМD құрылымды компьютерде жолды не үлестірілген, не барлығына жететін
(обще доступный) болуы мүмкін.
Мысалы:
Cray – 2, SI;
Cray  X -  MP;
IBM 370/168 MP, IPSC

[pic]

      Мұнда  да  процесстің  жиыны  жұмыс  жолы,  бірақ  барлығы  1  –  ғана
мәліметтер ағынына әсер етеді.
      Мұндай құрылымды 1 космпьютер белгілі. Ол, C. mmp, Carnegie  –  Mellon
университетінде жасалған.
      Бұл компьютер басқа режимде де (SIMP, MISD,  MIMD)жұмыс  жасай  алады.
Параметрлерді программалауды тиімділігін бағалау.
Ол мына функцияларға байланысты:
    – Орындалу уақытына
    – Жады конфигурациясына және орындалуға кететін шығынға
    – Қызмет көрсету және ақысына, тағы басқалары;
Мысалы: ауа райын болжау жүйесін құруда.
ЭЕМ өнімділігін қалай арттыруға болады?
      1949 жылы шыққан компьютерлердің тактілік уақыты 2 микросекунд (2*10-6
сек), яғни орташа 100 арифметикалық операцияны 1 секундта орындайды.
      Қазіргі заманғы компьютерлердің тактілік уақыты 1,8 наносекунд (1,8*10-
9 сек), яғни 1 секундта 77  млрд.арифметикалық  операция  орындалады.  Жарты
ғасырда компьютер өнімділігі 700 млн. есе өскен, яғни 2  микросекундтан  1,8
наносекундқа дейін өскен. Бұл компьютер архитектурасы жаңаша құрылған  деген
сөз.   Мәліметтерді   параллель   өңдеуді   бір   уақытта   бірнеше   әрекет
жасалатындығымен түсіндіруге болады.  Бұны  былайша  түсіндіруге  болады.  1
құрылғы 1 операцияны 1 бірлік уақытта орындайды, осы құрылғы  100 операцияны
100 бірлік уақытта орындайды. Егер  осындай  5 құрылғы  бір  мезгілде  жұмыс
жасаса, онда кететін уақыт 200 бірлікке тең болар еді, яғни  N  құрылғы  1/N
уақыт бірлігінде жұмысты орындап шығады. Тағы бір мысал, 1 солдат  жерді  10
сағатта қазса, рота (50 солдат) бірдей күшпен, бірдей  уақытта  12   минутта
қазып шығады екен. Міне, параллельділік принципі осыдан шыққан!
      Бақылау сұрақтары
   1. Қандай параллель компьютерлер бар?
   2. Ортақ жадылы процессорлер не үшін қолданылады?
   3. Флинн таксономиясы неше бөлімнен тұрады?

Әдебиеттер
1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2002
2.   Грегори   Р.   Эндрюс.   Основы   многопоточного,   параллельного    и
   распределенного программирования. Пер. с. англ.  –М.:  Издательский  дом
   «Вильямс», 2003
3. Акжалова А.Ж. Параллельные вычисления (учебное пособие). –Алматы, 2004
4.  Немнюгин  С.А.,   Стесик   О.Л.   Параллельное   программирование   для
   высокопроизводительных многопроцессорных систем – СПб., 2002

Дәріс 6-7.  Есептеуіш  жүйелер  процессорларының  мәлімет  алмасу  желісінің
топологиясы. Амдал заңы. Густафсон заңы

Мақсаты:  Студенттерді  параллель  программалаудағы  топология   принципімен
таныстыру

Кілттік сөздер: желі, топология, Амдал заңы, жұлдызшалы топология,  сақиналы
топология, тізбектелген топология, Густафсон заңы

Жоспары
1. Параллель программалауды тиімді бағалау
2. Амдал заңы
3. Густафсон заңы

1. Есептеуіш жүйелер процессорларының мәлімет алмасу желісінің топологиясы.
      1. Топология түрлері.
      2. Желі топологиясына сипаттама.
      3. Амдал заңы.
      4. Процесстер және синхронизация
      Топология – процессорларды, жады блоктарын  және  ажыратқыштарды  бір-
бірімен  өзара  байланыстырушы  желі.  Топология  атрибуттары   процессорлар
мәліметтерді бірге  пайдалану  жағын  және  бұл  жағдайда  шығын  қаншалықты
екенін анықтайды.  Егер  екі  түйін  бір-бірімен  байланысса,  оларды  көрші
түйіндер  деп  атайды.  Түйін  дәрежесі  оған  көрші   түйіндердің   санымен
анықталады. Есептеуіш  жүйелер  процессорларының  мәлімет  алмасу  желісінің
топологиясына тоқталайық.
      Топология түрлері:
     1. Толық граф немесе толық байланысқан желі – кез-келген екі процессор
        түзу сызықты желімен байланысады. Бұл топологияда мәліметтер берілу
        жағдайында шығын көлемі аз болады, бірақ процессорлар саны көбейген
        сайын, жұмыс істеу қабілеті баяулайды.
                         [pic]  [pic]  [pic]   [pic]

        1) толық граф          2)   сызықты                  3) сақина
                      4) жұлдызша




                             [pic]         [pic]

   5) екі және үш өлшемді                        6) гиперкуб

2. Сызғыш тәрізді бұл топологияда әрбір процессор екі  көрші  (алдыңғы  және
  келесі) процессормен байланысады. (Бұл конвейерлік есептеуде қолданылады)


3. Сақиналы топология – сызғыш  тәрізді  топологиядағы  бірінші  және  соңғы
  процессорды байланыстыру нәтижесінде пайда болады.
4. Жұлдызша тәрізді топология – процессорлар  жиыны  басқарушы  процессормен
  бір сызықпен байланысады, (кейбір параллель есептеулерде қолданылады).
5. Торлы топология (екі және үш өлшемді) - бұл жүйе  тіктөртбұрыштан  тордан
  тұрады (математикалық модельдеуден, дифференциалдық теңдеулерді шешуде).
6. Топологияның тағы бір түрі –гиперкуб (торлы топологияның  жеке  жағдайы).
  Бұл   топология   параллельді   есептеулер   орындалатын   процессорларда
  қолданылады.
Оның түрлері:
- бірөлшемді куб – түзумен байланысқан екі түйін.
- екіөлшемді куб – төрттүйінді квадрат.
[pic]
үшөлшемді куб – сегіз түйінді куб.
[pic]
      Яғни, N желімен байланысқан  2  n  процессорлардан  тұрады.  Енді  осы
мәліметтер берілу желісі топологиясының  сипаттамаларын  беру  үшін  мынадай
көрсеткіштер прайдаланылады:
1) Желі диаметрі – кез-келген екі түйіннің арасын байланыстыратын  ең  ұзын
   жол. Бұл шама процессорлар арасындағы мәліметтер  берілуінің максимальді
   уақытын сипаттайды. Себебі, мәлімет берілу уақыты  жол  ұзындығына  тура
   пропорциональды. N түйінді сақиналардың диаметрі n/2  деп  есептелінеді.
   Ал  толық  байланысқан  желінің  диаметрі  1-ге  тең  (түйіндер   санына
   тәуелсіз) деп есептеледі.
2) Есептеу құны –  бұл  шама,  көппроцессорлы  жүйедегі  мәліметтер  берілу
   жолының (сызығының) саны. Төменде мәліметтер берілу  желісітопологиясына
   сипаттама берілген. (р-процессорлар саны).

|Топология          |Диаметр      |Ені     |Бисекцилық   |Есептеу құны |
|                   |             |        |байланысы    |             |
|Толық граф         |1            |p2 /4   |p - 1        |p(p-1)/2     |
|Жұлдызша тәрізді   |2            |1       |1            |p-1          |
|Толық екілік ағаш  |2log((p+1)/2)|1       |1            |p-1          |
|Сызғыш тәрізді     |p-1          |1       |1            |p-1          |
|Сақиналы           |[p/2]        |2       |2            |p            |
|N=2                |[pic]-1)     |[pic]   |2            |[pic]        |
|Гиперкуб           |log p        |p/2     |log p        |(p log p)/2  |

Амдал заңы. Параллельді есептеулерді модельдеу
Параллельді есептеулер сапасына мына көрсеткіштер әсер етеді:
   1. Есептеудің жедел орындалуы.
   2. Есептелу тиімділігі.
   3. Есептелу құны.
   4. Есептелу көлемі.
Есептелудің жедел орындалуы (speedup) мына шамамен анықталады:

[pic]
p – процессорлар саны

Есептелудің тиімділігі мына шамамен анықталады:
[pic]

p-процессорлар саны

      Есептелу құнының пайдалы бағасы  –  параллельді  есептелетін  уақыттың
процессорлар санына көбейтіндісін айтамыз.
[pic]  р- процессорлаp саны
      Мысалдар келтірейік:
      1-мысал.  «Операциялар-операндтар»  графы  түрінде   есептеу   моделі.
Есептеу моделін  жеңілдету  үшін,  есептеу  барысындағы  кез-келген  есептеу
операциясына кететін уақытты бірдей және 1-ге  тең  деп  қабылдаймыз  (өлшем
бірлігін өз бетімізше аламыз).
      Мынадай  есеп  қойылсын:   Қарама-қарсы   бұрыштарының   координаттары
берілген  тіктөртбұрыштың  ауданын  есептеудің   алгоритмін   граф   түрінде
көрсетейік.
                                    [pic]
      Бұл мысалдан, есеп шешуде таңдалған алгоритмді  орындау  үшін  есептеу
схемасын басқаша да  құруға  болады  және  басқаша  есептеу  моделін  құруға
болады.  Сонда  әртүрлі  есептеу  схемалары   параллельділіктің   әр   түрлі
мүмкіншіліктерін қарастыруға мүмкіндік береді,  яғни  есептеу  моделін  құру
кезінде біздің алдымызда алгоритмді есептеу схемасының параллельді  орындалу
тәсілдерінің ең қолайлысын таңдау мақсаты тұрады.
      2-мысал. Сандардың қосындысын табу алгоритмдерін қарастырайық.
[pic]
n- қосындылардың саны.
      Бұл есепті шешудің параллельді әдісін бастамас бұрын алдымен қарапайым
жағдайды қарастырамыз, яғни
      [pic]
      Мұның алгоритмі тізбектеп қосудан шығады.
S=0,
S=S+x1,...
Бұл алгоритмді тізбектеп есептеу схемасы мынадай:
                                    [pic]

      Бұл «стандартты» алгроитм тізбекті орындалады да, параллельді орындала
алмайды. Параллельді орындалу үшін қосындыны табу  операциясын  ассоциативті
орындап, есептеу процесін басқаша  құру  керек.  Бірінші  итерацияда  барлық
берілгендер екі  бөлікке  бөлінеді,  және  әр  жұп  үшін  олардың  қосындысы
табылады, Әрі қарай барлық алынған қосынды тағы  жұп  бөлікке  бөлініп,  жұп
мәндерінің қосындысы табылады, тағы с.с. Бұл  есептеу  схемасы  –  қосындыны
есептеудің каскадты схемасы деп аталады, оны граф түрінде тұрғызуға болады.
                                    [pic]
      Мұндағы итерациялардың саны: k=log2 n,
      Ал, қосу операцияларының саны K посл =n/2+n/4+...+1=n–1


      Процесстер және синхронизация. Семафорлар. Мониторлар.
      Процесс   операцияның   тізбегін   орындайды.   Оператор   бөлінбейтін
әрекеттердің  тізбегінен  орындалады.  Бөлінбейтін   әрекеттер   программаны
бөліктерге  бөлмей  тексереді  және  өзгертеді.  (Мысалы,  жадыға   сөздерді
жүктеу, сақтау – бөлінбейтін іс-әрекеттер). Сонда  параллельді  программаның
орындалуы бөлінбейтін іс-әрекеттер тізбегінің кезектесуіне алып келеді.
      Бөлінбейтін әрекеттер кезінде бір процесте жүретін  кез-келген  аралық
жағдайды екінші процесс байқамауы керек. Тізбектелген программада  меншіктеу
операторлары – бөлінбейтін  әрекеттер  болып  табылады.  Бірақ,  параллельді
программада ол бөлінбейтін әрекеттерге жатпайды. Мысалы, төмендегі  жағдайда
бөлінбейтін әрекет – айнымалыны оқу және жазу:
      Int y=0, z=0;
      Parallel: x=y+z; // y=1; z=2; end parallel;
      Егер   x=y+z өрнегі былай алынса: регистрге у мәні жүктеліп  және  ары
қарай z  –мәні  қосылып  отырса,   онда   х   айнымалының   ақырлы   мәндері
0,1,2,3 болады.  Бұл  процесте  х  -     у   пен   z-тің   бастапқы,   соңғы
немесе  олардың комбинациясын алып отыр.
      Бақылау  сұрақтары
      1.  Параллель есептеулер  сапасына қандай көрсеткіштер әсер етеді?
      2.  Есептеудің жедел орындалуы қандай шамамаен есептеледі?
      3.  Семофорлар, мониторлар дегеніміз не?


      Әдебиеттер
      1.  Воеводин Вл.  Параллельные  вычисления.  Санкт-Петербург,  2002  -
600с.
      2.  Грегори  Р.  Эндрюс.  Основы   многопоточного,   параллельного   и
распределенного     программирования. Пер. с. англ.  –М.:  Издательский  дом
«Вильямс», 2003. – 512с.
      3.  Акжалова   А.Ж.   Параллельные   вычисления   (учебное   пособие).
–Алматы, 2004





Дәріс 8.  Процесстер және синхронизация. Семафорлар. Мониторлар

Мақсаты:  Студенттерді  параллель   программалаудағы   амалдардың   орындалу
принципімен таныстыру

Кілттік сөздер: процесстер, семафорлар, мониторлар.

Жоспары: Процесстер және семафорлар


      Процесс   операцияның   тізбегін   орындайды.   Оператор   бөлінбейтін
әрекеттердің  тізбегінен  орындалады.  Бөлінбейтін   әрекеттер   программаны
бөліктерге  бөлмей  тексереді  және  өзгертеді.  (Мысалы,  жадыға   сөздерді
жүктеу, сақтау – бөлінбейтін іс-әрекеттер). Сонда  параллельді  программаның
орындалуы бөлінбейтін іс-әрекеттер тізбегінің кезектесуіне алып келеді.
      Бөлінбейтін әрекеттер кезінде бір процесте жүретін  кез-келген  аралық
жағдайды екінші процесс байқамауы керек. Тізбектелген программада  меншіктеу
операторлары – бөлінбейтін  әрекеттер  болып  табылады.  Бірақ,  параллельді
программада   ол   бөлінбейтін   әрекеттерге  жатпайды.  Мысалы,   төмендегі
жағдайда бөлінбейтін әрекет – айнымалыны оқу және жазу:
Int y=0, z=0;
Parallel: x=y+z; // y=1; z=2; end parallel;
Егер x=y+z өрнегі былай алынса: регистрге у мәні жүктеліп және ары  қарай  z
–мәні қосылып отырса, онда х айнымалының ақырлы мәндері 0,1,2,3 болады.  Бұл
процесте х - у пен z-тің бастапқы, соңғы немесе олардың  комбинациясын  алып
отыр.

Бақылау сұрақтары
1. Топологияның  қандай түрлері бар?
2. Процесстер дегеніміз не?
3. Семофорлар, мониторлар дегеніміз не?

Әдебиеттер
   1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2002
   2.  Грегори   Р.   Эндрюс.   Основы   многопоточного,   параллельного   и
      распределенного программирования. Пер. с. англ. –М.: Издательский  дом
      «Вильямс», 2003
   3.  Акжалова   А.Ж.   Параллельные    вычисления    (учебное    пособие).
      –Алматы, 2004
   4.  Немнюгин  С.А.,  Стесик  О.Л.  Параллельное    программирование   для
      высокопроизводительных многопроцессорных систем – СПб., 2002




      Дәріс 9-11. Параллельді алгоритмдер.  Сұрыптаулар  (ранг,  көпіршіктер
      әдістері)


      Мақсаты: Студенттерді  параллель  программалаудағы  мәліметтер  ағынын
сұрыптаудың әдістеріне үйрету


      Кілттік сөздер:  сұрыптау,  көпіршіктер  әдісі,  ранг  әдісі,  тақ-жұп
әдісі,  мәліметтер,  алгоритмдер,  программа,  салыстыру   және   алмастыру,
біріктіріп сұрыптау, тез сұрыптау.
      Жоспары:
      1. Көпіршіктер әдісімен сұрыптау.
      2. Тақ-жұп әдісімен сұрыптау.


      Сұрыптаудың мынадай алгоритмдері қарастырылады.
      1. Ранг әдісімен сұрыптау
      2. салыстыру және алмасу сұрыптауы алгоритмдер:
            ✓ Салыстыру және алмастыру
                  ✓  Көпіршіктер  әдісімен  сұрыптау  (метод  пузырка)  және
                    «тақ-жұп» сұрыптауы
                  ✓ Біріктіру бойынша сұрыптау
                  ✓ Тез сұрыптау


      1. Салыстыру-және-алмастыру әдісімен сұрыптау
      Көптеген программаларда сұрыптау кезінде ағымдағы санды  басқа  санмен
орны бойынша алмастыру мақсатында уақытша сақтау  үшін  базалық  айнымалылар
пайдаланылады.  Ал,  параллельді  есептеулерде  ол  сандарды  сақтап   қоюға
процессорларды пайдаланады.
      if (A>B)
      temp=A; A=B;  B=temp;


      2. Көпіршіктер әдісімен сұрыпау
      (a1 , a2 , ...,an ) сандарының тізбегі берілсін . Сандарды өсу ретімен
орналастыру керек, яғни i>j  үшін ai B)
temp=A; A=B; B=temp;
      2.  Көпіршіктер әдісімен сұрыпау
      (a1, a2, ...,an) сандарының тізбегі  берілсін.  Сандарды  өсу  ретімен
орналастыру керек, яғни i>j үшін ai buf =a[p];
      p=p+1;
      }
      }
      Process Consumer
      {
      Int b[n]; While (cc); > b[c]=buf; c=c+1;
      }
      }


      Әдебиеттер
      1. А. Ж. Акжалова. Параллельные вычисления. Учебное пособие. – Алматы:
         Издательство ТОО «Print S»,- 2004
      2.  Грегори  Р.  Эндрюс.  Основы   многопоточного,   параллельного   и
         распределенного программирования. Пер. с англ.-М.: Издательский дом
         «Вильямс», 2003.
      3. Воеводин Вл. Параллельная обработка данных. Санкт-Петербург, 2002.
      4.  Немнюгин  С.А.,  Стесик  О.Л.  Параллельное  программирование  для
         высокопроизводительных многопроцессорных  систем.  Санкт-Петербург,
         2002.




                          №9,10 Зертханалық жұмыс.
               Ағындарды қолданып, Linux- те программалар құру


      Жұмыстың мақсаты: Linux операциялық жүйесінде ағындарды қолдану
      Материалдар және жабдықтар: ДК, параллельді есептеулерді  программалау
ортасы, Linux операциялық жүйесі.


      Жұмыстың мазмұны және орындалу тәртібі:
      Өз бетімен орындауға арналған тапсырмалардың нұсқалары:
      1. Linux операциялық жүйесінің ерекшеліктері талдау
      2. Ағындар. Ағындар түрлерін қарастыру
      Зертханалық жұмыстың орындалуы туралы есебінің формасы:
      1. Linux  операциялық  жүйесіндегі  ағындар  туралы  конспекті  жазып,
         түсіндіру.
      2. Орындалған жұмыс жөнінде есеп беру.


      Зертханалық жұмыстың мазмұны:
      Ағындарды құру үшін  pthread  кітапханасы  қолданылып,  pthread_create
функциясы  шақырылады,  осы   кітапханада   синхронизациялау   үшін   арнайы
объектілер мен текстер сипатталған.


      /*sem.h*/
      #include  #include  #include 
      // semafore #include 
      #include  #include  #include 
      /*
    * В моей системе данное объединение не объявлено в подключенных файлах -


    * если компилятор напишет что оно ранее объявлено - просто сотрите :)
      */
      union semun {
      int   val;  /* Value for SETVAL */
      struct semid_ds *buf;  /* Buffer for IPC_STAT, IPC_SET */
      unsigned short  *array;  /* Array for GETALL, SETALL */
      struct seminfo  *__buf;  /* Buffer for IPC_INFO
      (Linux specific) */
      };
      class sem
      {
      private:
      int sid;    // идентификатор семафора
      key_t key;   // ключ по которому получаем идентификатор
      int res_count; // количество ресурсов у семафора
      public:
      /*
    * кол-во ресурсов
    * некое случайное число
    * путь в системе - обязательно должен существовать !
      */
      sem(int max_res, int id, const char* identify); /*
    * деструктор - тут удаляем семафор, иначе он останется до
    * следующей перезагрузки системы или пока его кто-то явно не удалит
      */
      ~sem();
      /*
      * обертки для занятия/освобождения ресурсов
      */
      bool lock(int res); bool unlock(int res);
      };
      typedef sem* psem;
      Cледующий файл:
      /*sem.cpp*/ #include "sem.h"
      sem::sem(int max_res, int id, const char* identify)
      {
      sid = -1; res_count = 0; /*
      * получаем ключ для семафора
      */
      if ((key = ftok(identify,id)) == -1)
      {
      return;
      }
      /*
    * 0666 - rw для всех, чтобы потом можно было обратиться к семафору
    * от любого пользователя системы, в общем то личное дело каждого
    * сначала пытаемся открыть имеющийся семафор с таким ключом - и
    * удалить его, старый нам ни к чему
      */
      if ((sid = semget(key, 0, 0666)) != -1)
      {
      if (semctl(sid, 0, IPC_RMID, 0) == -1)
      {
      sid = 0;
      }
      }
      if (sid != 0) // проверяем что семафор был найден и удален или не
существовал
      {
      /*
    * создаем с флагом IPC_EXCL - означает что в случае если семафор уже
    * имеется - вызов будет провален c значением EEXIST,
    * без возврата значения отрытого уже существующего семафора
      */
      if ((sid = semget( key, 1, IPC_CREAT | IPC_EXCL | 0666 )) != -1)
      //
      {
      union semun semopts; semopts.val = max_res;
      semctl(sid, 0, SETVAL, semopts); res_count = max_res;
      }
      } else sid = -1;
      }
      sem::~sem()
      {
      if (sid != -1)
      {
      semctl(sid, 0, IPC_RMID, 0);
      }
      }
      bool sem::lock(int res)
      {
      /*
    * отсекаем неверные запросы сразу, не используя обращения  к  структурам
      семафора
      */
      if ((res > res_count) || (sid == -1))
      {
      return false;
      }
      /*
    * параметры в структуре
    * 0 - номер семафора
    * количество ресурсов - если захватываем, должно быть отрицательным
    * 0 - ждать если на данный момент нет достаточного
    * количества ресурсов или IPC_NOWAIT - возвращать ошибку
      */
      struct sembuf sem_lock={0,(-1)*res,0}; /*
    * параметры запроса
    * - идентификатор семафора
       структура которую заполняли выше - ее адрес
    * - сколько раз выполнить операцию
      */
      if ((semop(sid, &sem_lock, 1)) == -1)
      {
      return false;
      }
      return true;
      }
      bool sem::unlock(int res)
      {
      /*
      * аналогично функции lock */
      if ((res > res_count) || (sid == -1))
      {
      return false;
      }
      struct sembuf sem_unlock= { 0, res, IPC_NOWAIT}; if ((semop(sid,
&sem_unlock, 1)) == -1)
      {
      return false;
      }
      return true;
      }


      Бақылау сұрақтары.
      1.  Linux  операциялық  жүйесі  мен  Windows   операциялық   жүйесінің
         айырмашылығы
      2. Неліктен ағындарды Linux операциялық жүйесінде құрады.


      Глоссарий.
      Параллельді компьютер – есепті сандық түрде шешіп, үйлесімді шешуге
қабілетті процессорлардың жиынтығы.
      Параллельді программа – бұл әр процесс өзінің меншікті процессорында
жүріп қана қоймай, параллель орындалатын программа.
      Әдебиеттер
      1. А. Ж. Акжалова. Параллельные вычисления. Учебное пособие. – Алматы:
         Издательство ТОО «Print S»,- 2004
      2.  Грегори  Р.  Эндрюс.  Основы   многопоточного,   параллельного   и
         распределенного программирования. Пер. с англ.-М.: Издательский дом
         «Вильямс», 2003.
      3. Воеводин Вл. Параллельная обработка данных. Санкт-Петербург, 2002.
      4.  Немнюгин  С.А.,  Стесик  О.Л.  Параллельное  программирование  для
         высокопроизводительных многопроцессорных  систем.  Санкт-Петербург,
         2002.

         №11-12 Зертханалық жұмыс Хабарламаларды беруді программалау
      Жұмыстың мақсаты: MPI - параллельді программалау құралымен жұмыс жасау
принципімен танысу.
      Материалдар және жабдықтар: ДК,  параллельді  есептеулер  программалау
ортасы, MPI кітапханасы.


      Жұмыстың мазмұны және орындалу тәртібі:
      1. MPI_Send және MPI_Recv процедураларын қарастырайық:


      int MPI_Send (void* buf, int count, MPI_Datatype dataType,
      int dest, int tag, MPI_Comm_comm)


      Мұндағы: buf - буфер адресінің басы;
      count – міндетті түрде жіберілетін элементтер саны;
      dataType    –  әрбір элементтің типі,  мысалы:   MPI_INT,  MPI_DOUBLE,
MPI_CHAR, және т.с.с.;
      dest - адресат рангісі (процесс идентификаторы); tag – хабарлама тэгі;
      comm - коммуникатор.
      int MPI_Recv (void* buf, int count, MPI_Datatype dataType, int source,
int tag, MPI_Comm comm, MPI_Status* status)
      Мұндағы: status – кері қайту жағдайын қайтарады,
      source – MPI_Send процедурасындағыдай берілу идентификаторы.
      MPI программасында белгілі бір ережелерді қатаң  сақтау  керек,  онсыз
жұмыс  жүруі  мүмкін   емес.   Алдымен,   программының   басталуында,   оның
тақырыбынан кейін сәйкес тақырыптық файлды  іске  қосу  керек.  С  тіліндегі
программада  бұл  -  mpi.h.  Программада  MPI  кітапханалық   процедурасының
алғашқы шақырылымы  MPI_Init  инициализациясының  ішкі  программасын  шақыру
болып табылады.  С  тілінде  инициализация  функциясының  параметрі  негізгі
программа   қосылған   жағдайда    оның    аргументінің    адресін    алады:
MPI_Init(&argc, &argv);
      2. MPI  кітапханасының  көмегімен  екі  процесс  арасындағы  мәндермен
алмасу программасын қарастырайық:
      #include  #include 
      Main(int argc, char *argv[]) {int myid, otherid, size;
      Int length=1, tag=1;
      Int myvalue, othervalue; MPI_Status status;
      MPI_Init(&argc, &argv);
      MPI_Comm_size(MPI_COMM_WORLD, &size);
      MPI_Comm_rank (MPI_COMM_WORLD, &myid);
      if (myid==0) (otherid=1; myvalue=14;}
      else
      {otherid=0; myvalue=25;}
      MPI_Send(&myvalue, length,  MPI_INT,  otherid,  tag,  MPI  COMM_WORLD,
&status);
      MPI_Recv(&othervalue,  length,  MPI_INT,  MPI_ANY_SOURCE,   tag,   MPI
COMM_WORLD, &status);
      printf("npoцecc  номер %d  алынды %d\n",  myid, othervalue);
      MPl_Finalize();}


   3. Әр біреуі стандартты құрылғыға  процесс  номерін  және  іске  қосылған
      процесстердің саны туралы хабарлама шығаратын  бірнеше  поцессті  іске
      қосатын қарапайым программаны келтірейік:


      #include  #include 
      int main(int argc,char *argv[])
      {
      int myid, numprocs;
      MPI_Init(&argc, &argv);
      MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
      MPI_Comm_rank(MPI_COMM_WORLD, &myid);
      printf(stdout,"Process %d of %d\n", myid, numprocs)
      MPI_Finalize();
      return 0;
      }
   4.  Келесі  программа  жұп  және  тақ   рангілі   процесстер   арасындағы
      хабарламалар алмасуға мысал болады, size мәні жұп болсын делік:
      #include 
      #include 
      int main(int argc,char *argv[])
      {
      int myrank, size, message; int TAG = 0;
      MPI_Status status; MPI_ Init(&argc, &argv);
      MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
      MPl_Comm_size(MPI_COMM_WORLD, &size);
      message=myrank;
      if((myrank%2)-0)
      {
      If((myrank+1)1-size)
      MPI
      {
      if((myrank+ 1)1- size)
      MPI_Send(&message, 1, MPI_INT, myrank+1, TAG,MPI_COMM_WORLD);
      else {if (myrank !- 0)
      {  MPI__Recv(&message,  1,  MPI_INT,  myrank-1,  TAG,  MPI_COMM_WORLD,
&status);
      printf("I am %i received :%i \n", rank, message);
      return 0;
      }


      Өз бетімен орындауға арналған тапсырмалардың нұсқалары:
      1. MPI программасын қондыру және күйін келтіру.
      2. Процессорлардың жалпы санын анықтау (MPI_Comm_Size).
      3. Процесстердің жеке номерін анықтау (MPI_Comm_Rank).
      4. “Нүкте-Нүкте” типті блокталынған коммуникациялық функция  көмегімен
         мәліметті жіберуді ұйымдастыру (MPI_Send, MPI_Recv).
      5. Бір мезгілде мәліметті жіберуді ұйымдастыру (MPI_Sendrecv)


      Зертханалық жұмыстың орындалуы туралы есебінің формасы:
      1. Берілген  есептердің  қойылымын  талдау,  қолданылатын  процедураны
         түсіндіру.
      2. Берілген есептерді шешудің параллельді алгоритмін түсіндіру.
      3. Орындалған жұмыстың программасын ЭЕМ –де көрсетіп, есебін рәсімдеп,
         тапсыру.


      Бақылау сұрақтары.
      1. Хабарламаларды беруді программалауды түсіндір.
      2. MPI (Message Passing Interface ) программалау құралы не үшін қажет?
      3. MPI функционалдық сұраныстарын ата.
      4. MPI_Send процедурасын түсіндір.
      5. MPI_Recv процедурасын түсіндір.


      Глоссарий.
      MPI(Message Passing Interface ) – хабарламаларды беру интерфейсі.
      MPI_Send – хабарламаның блокталынып берілуі. MPI_Recv  –  хабарламаның
блокталынып   алынуы.   MPI_Comm_size   -   процесстер   санын    анықтайды.
MPI_Comm_rank – процесстер рангісін анықтайды.


      Әдебиеттер
      1. А. Ж. Акжалова. Параллельные вычисления. Учебное пособие. – Алматы:
         Издательство ТОО «Print S»,- 2004
      2.  Грегори  Р.  Эндрюс.  Основы   многопоточного,   параллельного   и
         распределенного программирования. Пер. с англ.-М.: Издательский дом
         «Вильямс», 2003.
      3. Воеводин Вл. Параллельная обработка данных. Санкт-Петербург, 2002.
      4.  Немнюгин  С.А.,  Стесик  О.Л.  Параллельное  программирование  для
         высокопроизводительных многопроцессорных  систем.  Санкт-Петербург,
         2002.



                         № 13-15 Зертханалық жұмыс.
    PVM-де жұмыс. Ағындарды құру және PVM-де мәліметтерді параллель өңдеу
      Жұмыстың мақсаты: PVM - параллельді виртуальді машинасының жұмыс жасау
принципімен танысу, хабарламаларды беру  және  процессті  синхронизациялауға
арналған кітапханалармен жұмыс жасау.
      Материалдар және жабдықтар: ДК,  параллельді  есептеулер  программалау
ортасы, PVM кітапханасы.
      Жұмыстың мазмұны және орындалу тәртібі:
      1. PVM жүйесін қондыру (1-әдіс).
      Linux ОЖ-мен жұмыс жасайтын компьютерге PVM жүйесін қондыру үшін  бума
құру керек, мысалы /pvm3 бумасы құрылсын. Осы бумада tar  zxvf  pvm3.3.4.tgz
архивтелген  файлын  ашу  керек.  PVM  қосылу  үшін  $PVM_ROOT  айнымалысына
буманың жолын көрсету керек.  Командалық  қабықша  ретінде  csh  қолданылса,
.cshrc файлына келесі командалық жолды қосу керек:
      setenv PVM_ROOT=/pvm3
      Егер  командалық  қабықша  ретінде  sh  немесе  ksh  қолданылса,  онда
.profile файлына келесі командалық жолды қосу керек:
      export PVM_ROOT=/pvm3
      2-әдіс. pvm_spawn() функциясы үшін орындалатын файл қатаң түрде бумада
сақталынады.     Linux ОЖ-де      мына каталогтар пайдаланылады:
      $PVM_ROOT/bin/$PVM  ARCH/  және $HOME/pvm3/bin/$PVM_ARCH,
      PVM_ROOT/ usr/local/pvm/current
      PVM-де орындалу үшін   aimk қолданылады, сонда master және slave
компиляцияланады және байланысады.
      PVM-ді іске қосу үшін  pvmd.exe –даемонды пайдалану керек. Жаңа
компьютерлер қосу керек: addhost <хост аты>. Тапсырманы орындау үшін spawn-
>  командасы орындалады (консольдық режим). PVM-ді тоқтату exit
командасының көмегімен жүзеге асады.
      PVM іске қосу үшін,  әрі  қарай  make  командасы  орындалады  да,  PVM
жүйесінде жұмысты бастауға болады.
      PVM-де есептерді басқару белгілі бір функциялар негізінде жүргізіледі.
Алдымен, call pvmfmytid( tid ) функциясы шақырылады, ол идентификатор  мәнін
tid >= 0 қайтарады.
      Әрі қарай есептің қалған бөлімдері басқа процессорларда орындалады. Ол
мына функциялардың көмегімен іске асады:
      call pvmfspawn(  task,  flag,  where,  ntask,  tids,  numt  )  task  -
орындалатын файл аты;
      INTEGER flag - іске қосу опциясы; where - іске қосылатын орын;
      INTEGER ntask – орындалатын программалар саны; INTEGER tids  -  мәндер
массиві.
      call pvmfkill( tid, info )- tid идентификаторымен жұмысты аяқтайды.
call pvmfexit( info ) - PVM жұмысын аяқтайды.
      Хабарлама жіберерден бұрын оны мына функциялар көмегімен буферге
орналастыру керек:
      pvm_initsend (int encoding) – үнсіз келісім бойынша
инициализациялайды; pvmrnkbuf (int encoding) – хабарламаны орналастыратын
жаңа буфер
      құрып, идентификаторды қайтарады;
      pvm_setsbuf (int bufid) – ағымдағы буферді хабарлама жіберуге
дайындайды;
      tid – хабарлама жіберетін есеп идентификаторы;
      msgtag – осы хабарлама тэгі; startAddress – бірінші бүтін сан адресі;
nlnts – бүтін сандар саны;


      Өз бетімен орындауға арналған тапсырмалардың нұсқалары:
      1. PVM-ді қондыру және күйін келтіру.
      2. Кластердің коммуникациялық ортасын тестілеу.
      3. Кластердің өнімділігін тестілеу.
      4. PVM –де мәліметті жіберуді ұйымдастыру.
      5. Тағайындалған процесске хабарламаның асинхронды берілуі.


      Зертханалық жұмыстың орындалуы туралы есебінің формасы:
      1. Берілген  есептердің  қойылымын  талдау,  қолданылатын  процедураны
         түсіндіру.
      2. Берілген есептерді шешудің параллельді алгоритмін түсіндіру.
      3. Орындалған жұмыстың программасын ЭЕМ –де көрсетіп, есебін рәсімдеп,
         тапсыру


      Бақылау сұрақтары.
      1. Хабарламаларды беруді программалауды түсіндір.
      2. PVM параллельді виртуальды машина не үшін қажет?
      3. PVM функционалдық сұраныстарын ата.
      4. PVM _Send процедурасын түсіндір.
      5. PVM _Recv процедурасын түсіндір.


      Глоссарий.
      PVM- параллельді виртуальды машина.
      PVM _Send – тағайындалған процесске хабарламаның асинхронды берілуі
      PVM _Recv – блоктап алау.
      PVM_pkint – бүтін сандарды жинау.
      PVM_upkint – жиналған бүтін сандарды қайта ашу.


      Әдебиеттер
      1. А. Ж. Акжалова. Параллельные вычисления. Учебное пособие. – Алматы:
         Издательство ТОО «Print S»,- 2004
      2.  Грегори  Р.  Эндрюс.  Основы   многопоточного,   параллельного   и
         распределенного программирования. Пер. с англ.-М.: Издательский дом
         «Вильямс», 2003.
      3. Воеводин Вл. Параллельная обработка данных. Санкт-Петербург, 2002.
      4.  Немнюгин  С.А.,  Стесик  О.Л.  Параллельное  программирование  для
         высокопроизводительных многопроцессорных  систем.  Санкт-Петербург,
         2002.




Студенттің Өздік Жұмыстарының мазмұны
      Кесте 4 – СОӨЖ және СӨЖ жоспарлары(тапсырмаларды  орындау және
тапсыру)

|№  |Тақырып      |Тапсырманың    |Ұсынылатын   |Бал|Жұмысты   |Бақылау   |
|   |             |мақсаты мен    |әдебиеттер.  |л  |тапсыру   |формасы   |
|   |             |мазмұны        |Негізгі/     |   |мерзімі   |          |
|   |             |               |қосымша      |   |          |          |
|1  |Сұрыптаудың  |Сұрыптаудың    |[1,2,3]/[1,2]|15 |4 апта    |Реферат   |
|   |параллель    |параллель      |             |   |          |және      |
|   |әдістері     |әдістеріне     |             |   |          |ауызша    |
|   |             |мысал есептер  |             |   |          |қорғау    |
|   |             |қарастыру      |             |   |          |          |
|2  |Графтардағы  |Графтардағы    |[4,5,7,8]/[1,|15 |6 апта    |Реферат   |
|   |параллель    |параллель      |2,3]         |   |          |және      |
|   |әдістер      |әдістерге мысал|             |   |          |ауызша    |
|   |             |есептер        |             |   |          |қорғау    |
|   |             |қарастыру      |             |   |          |          |
|3  |Матрицаны    |Мысал есептер  |[1,2,7,8,9]/[|20 |10 апта   |Электрон-д|
|   |векторге     |қарастыру      |1,2,3]       |   |          |ық нұсқа  |
|   |көбейтудің   |               |             |   |          |          |
|   |параллель    |               |             |   |          |          |
|   |әдістері     |               |             |   |          |          |
|4  |Параллель    |Есептер шығару |[1,2,7,8,9]/[|20 |14 апта   |Электрон-д|
|   |әдістерді    |               |1,2,3]       |   |          |ық нұсқа  |
|   |өңдеу        |               |             |   |          |          |
|   |есептері     |               |             |   |          |          |

      Студенттің  өзіндік  жұмысы  дәpicтiк  материалдарды   талқылау   және
практикалық  сабақтарға  дайындалу,  Практикалық   және   өздік   жұмыстарды
қорғау, тест бақылауына дайындалу мен  қатар,  косымша  материалдарды  оқуды
және  курстық жұмысты орындауды қамтиды.  Ақпараттар  көзі  ретінде  студент
оқулықтарды, оқу құралдарын,  компьютерлер  мен  компьютерлік  технологиялар
туралы мерзімдік басылымдарды, анықтамалық әдебиеттерді  және  институт  пен
кафедра сайттарындағы оқу материалдарын және Интернет қорын пайдаланады.

                     СӨЖді орындау және тапсыру графигі
      СӨЖ үй тапсырмасы ретінде дәптерге не А4 форматтағы қағазға орындалып,
оқытушыға тапсырылады. СӨЖ электронды нұсқасын  оқытушыға  электронды  түрде
өткізіледі.
     Өздік жұмысын бақылау келесі түрде болуы мүмкін:
– орындалған жұмыстың презентациясы;
– өзбетімен оқылған тақырыптың баяндамасы;
– оқытушының ауызша сұрауы;
– жазбаша түрде;
    Ескерту:  Жақсы бағада  аттестация  алу  үшін  СОӨЖ,  СӨЖ  тапсырмалары
аттестация уақытына дейін оқытушыға 1 апта бұрын тапсырылуы қажет.






ӘДЕБИЕТтер тізімі

Негізгі әдебиеттер
   1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2002 -600с.
   2.  Грегори   Р.   Эндрюс.   Основы   многопоточного,   параллельного   и
      распределенного программирования. Пер. с. англ. –М.: Издательский  дом
      «Вильямс», 2003. – 512с.
   3. Акжалова А.Ж. Параллельные вычисления  (учебное  пособие).  –  Алматы,
      2004 - 114с.
   4.  Немнюгин  С.А.,  Стесик  О.Л.   Параллельное   программирование   для
      высокопроизводительных многопроцессорных систем – СПб., 2002. – 400с.


Қосымша әдебиеттер
   5. Harry Gordan and Gita  Alaghband,  (2003).  Fundamentals  of  parallel
      processing published by Pearson Education Inc., ISBN: 0-13-901158-7.
   6. Ananth Gama, Anshul Fupta and  George  Karypis,  Vipin  Kumar  (2003).
      Introduction to parallel computing (second edition), Addison-Wesley.


-----------------------
Фаза 8 (жұп)

Фаза 3 (тақ)

Фаза 2 (жұп)

Фаза 1 (тақ)

Сұрыпталған

Сұрыпталмаған


Пәндер