- •«Параллель есептеулер» пәні бойынша 050602-Информатика мамандығының студенттері үшін лекциялар жинағы
- •Шымкент- 2009
- •1. Паралель программалау дамуының хронологиясы
- •Параллелизм. Программалау модельдері: параллель және тізбекті. Деректер параллелизмі мен есептер параллелизмі. Программалаудың негізгі параллель модельдері.
- •2 Параллелизм
- •2.1. Деректер параллелизмі мен есептер параллелизмі
- •Программалау модельдері: параллель және тізбекті
- •Программалаудың негізгі параллель модельдері
- •Параллель компьютерлер. Жылдам әрекеттесуші аппараттық жасау.
- •3.1. Параллель компьютерлердің типтері
- •3.1.1. Жалпы қатынау жадылы көппроцессорлы жүйелерге (бөлінетін жадылы)
- •3.1.2. Хабар беру мультикомпьтері және үлестірілген жадылы мультикомпьютерлер
- •Параллель компьютерлер типтері. Флинн таксономиясы. Жаңа таксономия құру спецификациясы.
- •4.1. Флинн таксономиясы
- •6.Процесстер және синхрондау
- •7.1 “Өндіруші –пайдаланушы” типті синхрондау
- •Параллель алгоритмдер. Параллель алгоритмдерді өңдеу: декомпозиция (сегменттеу), коммуникацияларды жобалау, үлкейту. Есептеулерді жобалау. Параллель сұрыптау алгоритмдері.
- •8.1. Ранг әдісімен сұрыптау
- •8.2. Салыстыру-және-ауыстыру
- •8.2.1 Деректерді бөлу
- •Сандық өрістерді параллельдеу: тік және итерациялық сызықтық теңдеулер жүйесінің шешу әдістері.
- •9.1 Сандық әдістерді параллельдеу
- •9,1.1. Матрицаларды көбейту
- •9.1.2. Сызықтық алгебралық теңдеулер жүйесін шешу
- •Параллель программалау. Ағындар мен деректерді өңдеу.
- •10. Параллель программалау
- •10.4.Occam- параллель программалау тілі
- •Жылдам әрекеттесуші фортран(hpf)
- •Pvm, mpi, OpenMp көмегімен таратылған деректерге құру және кіріс.
- •13. Қолданбалы есептерді шешуде параллель алгоритмдерді қолдану
- •Кескіндерді өңдеу типтері: кескінді өңдеудің төменгі, орташа және жоғарғы деңгейі.
- •15 Лекция. Фурье түрлендіруі және Фурье алгоритмдері
- •3. Фурье қатары
Параллель программалау. Ағындар мен деректерді өңдеу.
10. Параллель программалау
Берілген тарауда программалау құралдары қарастырылады, дербес жағдайда хабар беруді және процесстерді синхрондауды ұйымдастыру үшін кітапханалар дәлірек сипатталады: PVM, MPI,BSP,OpenMP. сондай-ақ параллель программалау тілдері:Occam, HPF
10.1. PVM-Параллель виртуальды машина
Автопараллельдеу циклдың өзімен, циклды қайта реттеу мүмкіндігімен жиі шектеледі, әсіресе көмекші программаларды сұрыптауларға тәуелді программалар тууы мүмкін.
Параллель программалауда түсініктемелер түрінде өрнектелген платформа аралық жылжуды, тізбекті архитектураны қоса компилятор директиваларын жиі қолданады. Сондай-ақ PVM, MPI кітапханаларын қажет ететін тізбекті тілдердің кеңейтулерін қолданады.
Хабар беру моделіне кіретін PVM параллель моделін қарастырайық.
Параллель виртуальды машинаны жалпы есептеу нәтижесін алуға қатысатын көптеген есептерді орындауға арналған нақты есептеу комплексінің құралының(процессор, жады, сыртқы құрылғылар және т.б.)бір бөлігі деп анықтауға болады. жалпы жағдайда есептер саны PVM-ге (http:/www.netlib.org/pvm3/pvm3.4.beta4.Win32.zip қара) кіретін процессорлар асып кетуі мүмкін. параллель виртуальды машинасы ретінде жеке алынған дербес компьютер, сондай-ақ параллель архитектурасы бар суперкомпьютері бар жергілікті желі, универсал ЭЕМ, графикалық жұмыс станциялары және дербес компьютерлер бола алады. Осы программалық жасау негізінде қолданушы көптеген есептер параллель орындалу мүмкіндегі бар бір ғана есептеу машинасымен сұхбаттасады деп есептеуге болады.
PVM-нің жұмыс істеуі онда орындалатын есептер арасындағы хабар алмасу мүмкіндігіне сүйенеді. мұндай жағдайда PVM-ді виртуальды машинаға бірнеше процессор және жалпы немесе жеке ЖСҚ-жедел сақтау құрылғысын-ОЗУ (шартқа байланысты) бөліп көппроцессорлы есептеу комплексінде жасаған ыңғайлы. бұл жағдайда,PVM-дегі есептер арасындағы жылдам ақпарат алмасу мәселелері жеңілдейді, сондай-ақ әртүрлі процессорлар орындайтын есептер арасындағы деректерді өрнектеу форматтарын мақұлдау мәселелері жеңілдейді.
PVM-ді қолданудың басты мақсаты- есептеулер жылдамдығын оларды параллель орындау арасында арттыру. Тиімділіктің жоғарғы шекарасы қарапайым бағаланады- егер есептеуүшін бір процессор орнына N біртипті процессорларды қолданса есептеу уақыты N рет кемиді. Нақты ұтыс есептің ерекшелігіне және есептеу программасында есептің ерекшелігі және PVM-нің аппараттық және программалық сипаттамасы қаншалықты ескерілгеніне байланысты.
PVM мен қатар берілген моделідің графикалық интерфейсі- XPVM. XPVM процестердің жүктеу уақытын, күту уақытын, хабар жіберу уақыттарын көруге мүмкіндік береді.
PVM-3 жүйесіндегі белгілі бір процессордан жіберілген әрбір есеп бүтін санмен анықталады, оны есеп идентификаторы деп атайды. Және мағынасы жағынан Linux операциялық жүйесіндегі процесс идентификаторына ұқсас. Мұнда, PVM-нің N процессінде параллель жіберілген бір орындау файлының көшірмесі әртүрлі TID бар N есеп құрады.
PVM-дегі есептердің өзара әрекеттесуіндегі берілген модельде бір PVM-дегі кез келген есеп кез келген басқа есепке хабар бере алады, және осындай хабар өлшемі мен саны шектелмеген. Буферлік құрылғыларының толып кетуін және массивтерді бақылау тек жеке операциялық жүйелерді енгізуге келіп тіреледі.
Есеп аралық ақпарат алмасудың тиімділігін арттыру үшін бірнеше алгоритмдерді қолдану керек. Жеке жағдайда буғатталған хабар жіберу алгоритмін қолдануға болады, "хабар беру " функциясы мәнін қайтарады (яғни жұмыс аяқталады). Мұндай жеткізілгендігі туралы хабарды күтетін хабар беру алгоритмі ұзын хабар бірнеше бөліктерге жіберілгенде, сондай-ақ орындау реті уақыт бойынша қатаң бекітілген командалар алмасуы кезінде қолданылған дұрыс.
Хабар беру және қабылдаудың блокты емес алгоритмін қолданғанда "әңгімелесушінің"жауабын күту кезіндегі процессорлар тоқтап қалуын азайтады. Әсіресе бұл қабылдаушы жағында хабардың келу уақыты белгісіз болғанда аса тиімді. Қабылдау процессорының жұмысын, тек арасында қабылдау буферін сұрай отырып, хабар күту кезінде ағымдағы жұмысты орындайтындай етіп ұйымдастыруға болады.
Берілген модель гетерогенді компьютер жиынын бір жоғары тиімді параллель машина ретінде жұмыс істеуге мүмкіндік береді. Берілген модельді қолдануда деректер форматындағы өзгешелікткрі мен тораптар жылдамдығындағы өзгешеліктерді түсіну маңызды.
Жіберуші және қабылдаушы жақтарындағы буферлік массивтер үшін жады динамикалық бөлінеді, яғни хабарлардың максимальды көлемі қатынау жадысының көлемімен шектелген. егер PVM-де жіберілген бір есеп, басқа есептермен сұхбаттасу үшін қажетті жадыны ала алмаса, онда ол қолданушыға сәйкес есептер бұл оқиға туралы хабар береді, бірақ басқа есептер бұл оқиға туралы хабардар болмайды және оған хабар жіберуді жалғастыра береді.
Тораптар, басқа қолданушылармен бөліну үшін қажет, сондықтан жоғары тиімді желі қажет болады.
PVM- функциональды сұраныстар.
Процессті құру және хабар беру функциясы C/C++/Fortran програмаларынан шақырылады. Негізгі функцияларды қарастырамыз:
pvm spawn-процесс тудырады
pvm send- белгіленген процесске асинхронды хабар береді.
pvm recv-белгіленген процесстен немесе басқа кез келген процесстен бұғатталған қабылдау
pvm nrecv-бұғатталмаған қабылдау
pvm mcast-белгіленген процесстерге дерек жіберу.
Келесі функцияларды қолданып буферге/буферден буып түйеді/шешеді:
pvm pkint- бүтін сандарды(бір немесе одан көп) буып түйеді
pvm upkint- бүтін сандарды(бір немее одан көп) шешеді
pvm spawn функциясын толығырақ қарастырайық:
pvm spawn (char*task, char**argv,
int flag, char*where,
int ntask,int*tids);
task- туындалатын есеп атауы;
argv- соңында нольдік символы бар есептер параметрі
flag- нұсқалар(0 есептерді қай жерде туындалатынын анықтау
PVM-ге беріледі )
where- есептің қайда туындалатынын анықтайды
ntask-туындалатын есептердің көшірме саны;
tids- туындалатын есептер идентификаторы, int туындалған есептер санын қайтарады.
буып-түюі/шешуімен қатар хабарды жіберу немесе алу үшін буферге келесі функцияларды қолданып орналастыру керек:
pvm initsend, pvm mkbuf, pvm setsbuf
pvm initsend(int encoding)-хабар беру үшін келісім бойынша ағымдағы буферді инициалдайды; әдетте кодтау үшін PvmdatdDefault-ны қолданады.
pvm mkbuf(int encoding)- жіберу үшін жаңа буфер құрады және идентификаторды қайтарады;
pvm setsbuf(int bufіd)- буферге жіберіп/алу үшін ағымдағы буферді bufіd атауымен орнатады;
pvm send (int tid, int msgtag)
tid- хабар жіберуші идентификаторы;
msgtag- осы хабар тегі
pvm send топтық нұсқау tid пен идентификацияланған барлық есептерге хабар жібереді.
PVM-ге даярлау
Pvm spawn() функциясы үшін орындалатын фуекция белгілі бір каталогта болады. Linux-те есеп $PVM ROOT/bin/$PVM ARCH/ және $HOME/PVM/bin/$PVM ARCH каталогтарынан 3зделед37
PVM ROOT/usr/local/pvm/current жиынтығы.
Pvm -ді орындау үшін master және slave-ті компиляциялап және байланыстыру үшін aimk қолдану керек.
Pvm -ді жіберу үшін pvmd.exe - даменін қолдану керек. Жаңа компьютерлерді қосу керек: addhost<хост атауы>. Тапсырманы орындау үшін spawn-> <hostcode>, консольдық режимде теріп орындау керек. PVM-ді тоқтату exit командасымен орындалады.
10.2. MPI – хабар беру интерфейсі
MPI параллель программалаудың алғашқы құралдарының бірі. MPI кітапханасын қолданғанда торап үлестірілген программалар процессі С және Fortran сияқты тізбекті программалар тілдерінде жазылады. Процесстердің өзара әрекеті және оларды синхрондау MPI кітапханасына процедураларын шақыру көмегімен беріледі.
MPI қосымшаларын программалау интерфейсін 90-жылдардың ортасында университеттер, үкімет және өндірі ұйымдарының жобалау топтары құрған. Мақсат- әртүрлі көппроцессорлы машиналарда тиімді жүзеге асыратын бірдей кітапхана жасау. Бүгінгі күні MPI стандартқа айналды.
MPI кітапханасын қолданушы программаның SPMD стилі болады. Ол алдыңғы тауарлара сипатталған. Берілген жағдайда әрбір процесс бір ғана программаның көшірмесін орындайды. Программаның әрбір экземпляры MPI кітапханасының функцияларын шақыру арқылы өзара әрекеттеседі, олар процесстер, топтар және қоршаған ортаның өзара әрекеттерін қамтамасыз етеді.
MPI функционалдық сұраулардың кейбіреулерін қарастырамыз.
MPI Init- MPI кітапханасын инициализациялайды және программаға беретін командалық жолдың аргументерінің көшірмесін қайтарады. Нәтижесінде жіберілген процесстер жиыны инициаланады.
MPI Comm size- жіберілетін процесстер санын анықтайды.
MPI Send- процестің процесс рангін(идентификатор) анықтайды.0-ден 1-ге дейінгі сандар бола алады.
MPI Recv- хабарды беруді бұғаттау. Басқа процесске хабар береді.
MPI Finalize- MPIкітапханасын «алып тастайды» және процессті аяқтайды.
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-беретін процесс идентификаторы немесе «немқұрайлы»; tag- хабар белгісі; қалған аргументтер MPI Send процедурасында сипатталған сияқты.
MPI кітапханасының көмегімен екі процесс арасындағы мәндерді алмастыру программасының бірін келтіреміз.
#include<mpi.h>
#include<stdio.h>
main(int argc, char*argv[])
{
Int myid,otherid,size;
Int length=1, tag=1;
Int myvalue, othervalue;
MPI Status status;
MPI Int
MPI Comm
MPI Comm
10.3. BSP-жалпы синхронды параллелизм
BSP (BULK SYNCHRONOUS PARALLEL) Жалпы синхронды параллелизм моделі синхронды өзара әрекеттесуден бөліп алынған және жады иерерхиясының әсері және хабар алмасу ескерілген. BSP моделі уш компанненттен тұрады:
Жергілікті жадысы бар және бірдей жыладмдықпен істейтін процессорлар
Процессорлардың өзара әрекеттесуіне мүмкіншілік беретін байланыс желісі;
Барлық процессорлардың белгілі уаықт аралықтары арқылы синхрондау механизмі;
Модель параметрлері ретінде процессорлар саны,олардың жылдамдығы, өзараәркеттесу бағасы және синхрондау пероды.
BSP -дегі есептеу асақадамдар тізбегінен тұрады. әрбір жеке қадамда процессорлар есептеулерді орындайды, олар жергілікті жадыны шақырады және басқа процессорлерге хабар жібереді. Хабар көшірме алуға сұрау немесе қашықтағы деректерді жаңартуға сұрау болады. Асақадам соңында процессорлар барьерлік синхрондауды орындайды және одан кейін осы асақадам бойындағы сұрауды өңдейді. Ары қарай процессорлар келесі асақадамды орындай бастайды.
BSP
кітапханасы 20 шақты функциядан тұрады,
онда хабар алмасудың BSP стилін және
жадыға қашықтан қатынау қамтамасыз
етіледі.
BSP моделінің параметрі:
p- процессорлар саны;
l- синхрондау периодтылығы, синхрондау амалдары арасындағы уақыт бойынша қадамдарыны” минималды саны;
g- байланыс бағасы;
s- секуындына қадам санымен өлшенетін процессор жылдамдығы.
Байланыс бағасы һ өзараәрекеттесуде һ хабар жіберуге қажетті уақыт саны ретінде анықталады.
Уақыт пен бағасы келесі фурмаламенберіледі:
Tsuperster=Wmax+ghmax+l
мұндағы Wmax -кез келген ''вертуальды'' процессорлар орындайтын жергілікті амалдардың максималь саны (процесспен немесе ағынмен), процессор жібергеннемесе қабалдаған максимальды хабарлар саны. Программаның аяқталуына қажетті жалпы уақыт қадамдар саны түрінде беріледі. Берілген уақытты азайту үшін асақадам санын азайту керек,өйткені олардың әрбіреуі үшін 1синхрондау уақыты қажет. Сондай-ақ һжәне w-ні де азайту керек. Ол үшін жүктелгендерді үлестіру керек жәнепроцессорлар арасында хабарлар беруді баланстау керек, сондай-ақ жүктелгендерді үлестіру керек және процессорлар арасындағы есептеулерді баланстау керек.
BSP программаларды орындаудың қарапайым шаблондарын Oxford BSP libraryтабуға болады:
Bspstart(), bspfinish() - процесстерді басқару;
Bspstep(), bspstep_end() - синхрондау;
Bspfetch(), bspstore() - байланыс.
BSP модель PVM машина принципімен жұмыс істейді. Бұл модель Linux операциялық жүйесіне орнатылған, программалау үшін С++ программалау тілі қолданылады.
