Параллель программалау. Программалау тілдері

Берілген тарауда программалау құралдары қарастырылады, дербес жағдайда хабар беруді және процесстерді синхрондауды  ұйымдастыру үшін кітапханалар дәлірек сипатталады: PVM, MPI,BSP,OpenMP. сондай-ақ параллель программалау тілдері:Occam, HPF

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  командасымен  орындалады.

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

«Baribar.kz-тің» Telegram-каналына жазыламыз!