Здавалка
Главная | Обратная связь

Директивы OpenMP. Директива single .



Тек бір параллельдік потокта орындалатын параллельдік структіралық блогында программаның бөлігін бөліп шығару үшін single директивасы қолданылады. Қалған программалық потокта ,Single директивасымен ерекшеленген, программа орындалмайды. Бірақ қалған потокта орындалатын параллельді процесстер программаның ерекшеленген бөлігінің орындалуын күтеді. Бұл күтуді керекті уақытында болдырмау үшін nowait директивасы қолданылады.

#include <stdio.h>
#include <omp.h>

int main(int argc, char *argv[])
{
int n;

#pragma omp parallel private(n)
{
n = omp_get_thread_num();
printf("Значение n начало(): %d\n", n);

#pragma omp single copyprivate(n)
{
n = 100;
}

printf("Значение n конец(): %d\n", n);
}
}

20 Синхронизация процессов в OpenMP. Синхронизация типа atomic

синхронизация atomic -reduction директиваның альтернативі боп табылады. Бұл синхронизация өзінен кейін келетин келеси директива аныктайтын оператор ушин ғана. Синхронизация atomic - автоматты үнсіз келісім бойынша циклды аяқтау кезінде параллель режимінде орындалады. Оны шығару ушін nowait директивасын колданамыз

Директива atomic - айнымалыны анықтайды, бұл айнымалыға рұксат алу өлінбейтін операция боп анықталыды, келеси түрде жазамыз: #pragma omp atomic

• келесі форматта да жаза аламыз:

x binop = expr , x++, ++x, x--, --x

x –скаляр айнымалы болуы керек

expr не должно ссылаться на x

binop должна быть неперегруженной операцией вида

+, -, *, /, &, ^, |, >>, <<

 

21 Синхронизация процессов в OpenMP. Синхронизация типа critical

critical Синхронизация арқылы критикалық секцияны оформлять етеді. Программады келесі түрде жазамыз.

#pragma omp critical [(<имя_критической_секции>)]

Критикалық секции әр моментте бірден көп тізбек (нити) болмайды. егер критикалық секция нитимен орындалып отрыса, онда басқа нити диретиваны орындайтын берінген атпен секция үшін оқшауланады, кірген нить критический нит орындалуын аяқтамағанша дейін. Жұмыс істеген нить критичекий секциядан шыққан уакытта, оқшауланған ниттін бірі секцияға кіреді. Егер критический сексияға кірер жерде бірнеше нити тұрса, кездейсок түрде оның бірі өтіп кетеді, ал калған оқшауланған нити күтуін жалғастырады.

22 Синхронизация процессов в OpenMP. Синхронизация типа barrier

Кең таралған OpenMP дегі синхронизации түрі – барьер. Келесі түрде программада жазамыз barrier. #pragma omp barrier

Берілген паралелді облыста орындайтын нити осы директиваға жеткенде тақтайды да бүкіл нити осы программа этапы жеткенше дейін тосады, кейін ашылады да ары карай жумыс істейді. Ашылу үшін, бүкіл синхронизделген нити әркайсысы өзі бастаған тапсырманы аяқтауы кажет(task).

23 Синхронизация процессов в OpenMP. Синхронизация типа master

Синхронизация типа master программаның структуралык блок анықтау үшін қолданылады, және ол тек басты потокта орындалады (параллель потокта- номері ноль) бұкіл параллель потоктан. Программада келесі түрде жазамыз

#pragma omp master

 

24 Синхронизация процессов в OpenMP. Синхронизация типа ordered

Синхронизация типа ordered паралелді областы программада потокты анықтайды , оның реті сәйкесінше кезекті программа версиясына сәйкес болады. Келесі түрге программада жазамыз: #pragma omp ordered

• оператор блок ішкі циклге жатады,ал параллельді циклде ordered берілген болуы керек. Бірінші итерацияны орындайтын Нить берілген блок операциясын орындайды. Келесі кез келген итерацияны орындайтын нить бүкіл ниттің бүкіл операция орындалуынын аяқталуын тосу кажет

25 Синхронизация процессов в OpenMP. Синхронизация типа flush

Синхронизация типа flush- оперативті жадыда аргумент ретінде алынған локалды мән айнымалыларды жанарту үшін коладнылады. Осы директива орындарганнан кейин бүкіл айнымалылар, барлық паралелді потоктар үшін бәр мәнге ие.

Программа ішінде келесі түрде жазамыз#pragma omp flush(var1, [var2, […, varN ]])

Мұндағы var1, var2, …, varN - айнымалылар, flush.директивасы орындалатын кезде мәні оперативтік жадыда сақталатын айнымалылар. Директива flush айқын емес түрде директивах barrier, critical, ordered, parallel, for, sections, single директивасныда қатысады. lock айнымалымен байланысты кілтті иницилизациялайды. егер list спискі бар болса, онда тек корсетілген айнымалылар калпына келедию. берінген кілтті таптып алуга мүмкінік жасайды. Егер ол мүмкін болмаса false қайтарады lock айнымалымен байланысты кіллті жояды

void omp_init_lock(omp_lock_t *lock)

void omp_destroy_lock(omp_lock_t *lock)

 

26 Загрузка процессов в OpenMP. Директива schedule. Загрузка типа static static - топтаманың итерациясының құрастырмалы-циклдік бөлу ; блок өлшемі - chunk. Бірінші блок chunk итерациялардан нөлдік нить, екінші блок - келесі және т.д. дейін соңғы нити орындайды, қарамастан кейін орналастыру тағы нөлдік нитиден басталады. егер chunk мағынасы көрсетілмеген болса , сол барлық итерацияның көпшілігі шамалы бірдей өлшемге бөлінеді (нақты тәсіл жүзеге асудан тәуелді болады) алынған итерация порциясы нити арасында орналасады
27Загрузка процессов в OpenMP. Директива schedule. Загрузка типа dynamic dynamic - итерацияның динамикалық орналастыру белгіленгін блон көлемімен: басында әр нить chunk итерациялардың(ша умолчанию chunk=1) алады, итераяцияны орындалуын аяқтайтын нить, бірінші бос позицияға ие болады Босаған нити жана порция итерацияны қабылдай алады, барлық порция аяқталмағанша дейін Соңғы порция басқаларға қарағанды итерация саны аз болуы мүмкіні
28Загрузка процессов в OpenMP. Директива schedule. Загрузка типа guided Guided – итерациялардың динамикалық бөлуі, бастапқы мәндер chunk мөлшердіне дейін азаяды (үндемеу бойынша chunk = 1) пропорционал әлі бөлінбеген итерация санына дейін, орындайтын цилк бойынша. Бастапқы ерекшелеуетін блоктың мөлшері іске асырудан тәуелді болады. Жағдайларға қатарда сондай Бөлу жұмысты ұқыпты бөлу мүмкіндік беріді Соңғы порция басқаларға қарағанды итерациялардың саны аз chunk мәндер көрсете алады.
29Загрузка процессов в OpenMP. Директива schedule. Загрузка типа runtime
. · Runtime – итерациялардың бөлулері әдісі, жұмыс барысында таңдалады Айнымалы орта мәні бойынша OMP_SCHEDULE. Параметр chunk берілмейді Үнсіз келісім бойынша ол static болып табылады бірінші мысалда айнымалы мәні runtime - де static режимәмен алынады,, онын мөлшері 1000. екінші мысалда айнымалы мәні runtime - де dynamic режимәмен алынады,, онын мөлшері 1 30. Передача данных с помощью директивы threadprivate Threadprivate дерективасы комегимен малиметтерди жиберу. Реализация ушин малиметтерди жиберу механизмын жузеге асыру ушин OpenMP да арнайы threadprivate дерективасы колданылады. Threadprivate дерективасы галамдык ауыспалы багдарламалар ушин колданылады.Арбир параллелдик агындар ушин жергиликти ауыспалы жасау кажет.Сонымен катар бул деректива жергиликти малиметтерди баска бир параллелдик курылымдык блокка жиберуге руксат береди.Сондай-ак жергиликти малиметтерди барлык параллелдик агындардан сактаиды. Багдарламада FORTRAN тилинде жазылган,бул ушин common-блок аинымалысын енгизу кажет,содан сон бул блокты threadprivate дерективасы комегимен корсету кажет,мына турде бериледи: c$omp threadprivate (/cb1/, [/cb2/ [ , ..., /cbN/]]   31. MPI: основные понятия и определения. Понятие параллельной программы МРI: негизги тусиниктер жане аныктамалары.Параллельдик багдарлама тусиниги. МРI негиздери хабарламаларды жиберу операциясыннан турады.МРI функциясы аткаратын кызмети бирдей операциялармен ажыратылады(point-to-point) еки процесс арасында жане ужымдык коммуникациялык бирдей бирнеше арекеттер ушин колданылады. Қос операциялар орындалуы үшін малиметтерди жиберудин артурли режимдерін пайдаланылады онын ишинде синхронды ,килттегиш жане т.б Карастырылган малиметтерди жиберу режимдери толык тараушада орындалады. Стандартты МРI кажеттиликти жузеге асыруды сонын ишинде кобине ужымдык негизги малиметтерди жиберу операцияларын карастырады.Шенберлерде параллельдик багдарламалардын бир уакытта аткаратын кызметин МРI тилинде арнайы курылган. Процесстер әртүрлі процессорларда орындала алады,бирак бир процессорда бирнеше процестер орналасуы мумкин.Аткарылатын багдарламалар жане колданылуы С жане FORTRAN тилинде онделуде жане МРI китапханаларында онделуде. 32. MPI: основные понятия и определения. Операции передачи данных МРI: негизги тусиниктер жане аныктамалары. Малиметтерди жиберу операциясы МРI негиздери хабарламаларды жиберу операциясыннан турады.МРI функциясы аткаратын кызмети бирдей операциялармен ажыратылады(point-to-point) еки процесс арасында жане ужымдык коммуникациялык бирдей бирнеше арекеттер ушин колданылады. Қос операциялар орындалуы үшін малиметтерди жиберудин артурли режимдерін пайдаланылады онын ишинде синхронды ,килттегиш жане т.б Карастырылган малиметтерди жиберу режимдери толык тараушада орындалады. Стандартты МРI кажеттиликти жузеге асыруды сонын ишинде кобине ужымдык негизги малиметтерди жиберу операцияларын карастырады. 33. MPI: основные понятия и определения.понятие коммуникаторов МРI: негизги тусиниктер жане аныктамалары.коммуникатор тусиниги. МРI негиздери хабарламаларды жиберу операциясыннан турады.МРI функциясы аткаратын кызмети бирдей операциялармен ажыратылады(point-to-point) еки процесс арасында жане ужымдык коммуникациялык бирдей бирнеше арекеттер ушин колданылады. Қос операциялар орындалуы үшін малиметтерди жиберудин артурли режимдерін пайдаланылады онын ишинде синхронды ,килттегиш жане т.б Карастырылган малиметтерди жиберу режимдери толык тараушада орындалады. Стандартты МРI кажеттиликти жузеге асыруды сонын ишинде кобине ужымдык негизги малиметтерди жиберу операцияларын карастырады.Параллелди программалар процеси топтарга биригеди. МРI тилинде арнайы курылган кызметтик обьект коммуникатор параметири аркылы кабылданады.Бириктирилген курамдас топтар процеси жане косымша параметрлер катары малиметтерди жиберу операциясынын орындалуында колданылады. Ұжымдық операциялар бируакытта коммуникатордың барлық процеси үшін қолданылады.Натижиеде,колданылган коммуникатор нускауы МРI операциясында малиметтерди жиберуде миндетти болып табылады.Кажеттилик жагдайда жиберилген малиметтер мен процесс арасында ар-турли топтардан галамдык коммуникатор курылады. 34. MPI: основные понятия и определения.Типы данных МРI: негизги тусиниктер жане аныктамалары. Деректердің үлгілеріМРI негиздери хабарламаларды жиберу операциясыннан турады.МРI функциясы аткаратын кызмети бирдей операциялармен ажыратылады(point-to-point) еки процесс арасында жане ужымдык коммуникациялык бирдей бирнеше арекеттер ушин колданылады. Қос операциялар орындалуы үшін малиметтерди жиберудин артурли режимдерін пайдаланылады онын ишинде синхронды ,килттегиш жане т.б Карастырылган малиметтерди жиберу режимдери толык тараушада орындалады. Стандартты МРI кажеттиликти жузеге асыруды сонын ишинде кобине ужымдык негизги малиметтерди жиберу операцияларын карастырады.МРI-га улкен негизги базалык деректердин улгилери киреди,кобине саикес келетин деректер улгилериндеги алгоритимдик тил С жане FORTRAN. 35 MPI: основные понятия и определения. Виртуальные топологии МРI: негизги тусиниктер жане аныктамалары. Деректердің үлгілеріМРI негиздери хабарламаларды жиберу операциясыннан турады.МРI функциясы аткаратын кызмети бирдей операциялармен ажыратылады(point-to-point) еки процесс арасында жане ужымдык коммуникациялык бирдей бирнеше арекеттер ушин колданылады. Қос операциялар орындалуы үшін малиметтерди жиберудин артурли режимдерін пайдаланылады онын ишинде синхронды ,килттегиш жане т.б Карастырылган малиметтерди жиберу режимдери толык тараушада орындалады. Виртуальды топологияның мүмкіндіктері:Ыңғайлы процесс аты (белгі), Коммуникация үлгісіне сейкес ыңғайлы схема,Кодтың жазыуды жеңілдетеді, MPI -га оптимальды коммуникация жасауға мүмкіндік береді. Қолданылуы: топология кұру жаңа коммуникаторды жасайды, MPI функциялар картографиясын қамсыздандырады, Топологияның ат беру схемасына негізделе отырып процесстың рангын есептейді, Және керисинше. Декарттық топологияның(торлық) үшін MPI атқаратын қызметі: int MPI_Cart_create(MPI_Comm oldcomm, int ndims, int *dims, int *periods, int reorder, MPI_Comm *cartcomm)     36. Основы MPI. Инициализация и завершение MPI-программ. Основы MPI. Определение количества и ранга процессов MPI Негіздері. MPI-Бағдарламалардың инициализацияы және аяқтауы. MPI Негіздері. MPI Негіздері.Функциялардың ең төменгі-қажетті жиынын келтіреміз MPI-да, жеткілікті қарапайым параллел бағдарламалар дайындау үшін. MPI-Бағдарламалардың инициализацияы және аяқтауы. Биринши шакырлатын функция MPI тилинде мына турде болады: int MPI_Init ( int *agrc, char ***argv ); MPI-Бағдарламалар орындау орта инициализация үшін.Функция парметрлери командалык жолдагы аргументтер саны болып табылады.Сонгы шакырылган функция MPI тилинде функция мына турде болуы миндетти: int MPI_Finalize (void); Натижиени мына турде корсетуге болады,параллелдик багдарлама курылымын, MPI тилинде келеси турде бериледи: #include "mpi.h" int main ( int argc, char *argv[] ){ <программалык код MPI функциясын колданбау аркылы> MPI_Init ( &agrc, &argv ); <программалык код MPI функциясын колдану аркылы> MPI_Finalize(); < программалык код MPI функциясын колданбау аркылы > return 0; } 37. Основы MPI. Передача сообщений. Основы MPI. Прием сообщений MPI Негіздері. Сообщение жиберилуи. MPI Негіздері. Сообщение қабылдауы Сообщение берілу үшін процесс жіберуші мына функцияны орындауға тиісті: int MPI_Send(void *buf, int count, MPI_Datatype type, int dest, int tag, MPI_Comm comm) мундагы – buf- Осы жиберилетин қатынастар орналасқан жадтар буферлерінин мекен-жайы, - count – элементтердің саны осы қатынастагы - type-осы жиберилетин малиметтердин элементтеринин тури - dest- Қатынастардың теңестіруі үшін қолданатын идентификация - comm- коммуникатор,осы жиберилген малиметтерди шенберлерде (в рамках)орындаитын Жиберилген малиметтер ушин MPI –да негизги туринин толык тизимин корсетеик: MPI_Datatype C Datatype MPI_BYTE MPI_CHAR signed char MPI_DOUBLE double MPI_FLOAT float MPI_INT int MPI_LONG long MPI_LONG_DOUBLE long double MPI_PACKED MPI_SHORT short MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long MPI_UNSIGNED_SHORT unsigned short    

 

38 Коллективные операциями передачи данных. Передача данных от одного процесса всем процессам программы.

Жинақтауда қарастырылған параллел алгоритмне орындауда бірінші мәселе параллел бағдарламаларға x барлық процесстерге векторға мәндерге берілулерге қажеттілікте тұр. бұл мәселе шешім үшін осы берілулер жұп операциялардың қарастырылған бұрын функциялармен пайдалануға болады :

MPI_Comm_size(MPI_COMM_WORLD,&ProcNum); for (i=1; i<ProcNum; i++) MPI_Send(&x,n,MPI_DOUBLE,i,0,MPI_COMM_WORLD);

Бірақ сондай шешім өте тиімсіз болады, өйткені операциялардың қайталауы шығындадың қосылуы алып келіп жатыр. болу осы операция log2 p итерацияларда орындалуы мүмкін

Эффективті операцияны шығару MPI көмегімен болады int MPI_Bcast(void *buf,int count,MPI_Datatype type,int root,MPI_Comm comm)

 

39 Передача данных от всех процессов одному процессу. Операция редукции

редукциялар операциялары Санмен көрсетілген мәндерге жинақтауларға қарастырылған бағдарламада жиынның және келесі жинақтаудың бар процедурасы осы бір процессінен барлығын процесстерінен мәлімет барлық процестен 1 процеске. Жинақталатын мәндердің үстінде бұл операцияда сол іске асып жатыр немесе басқамәлімет өңдеу жүзеге асады (. Сияқты бұрын, берілуде кәдімгі жұп операцияларда көмекте редукциялар операцияларыреализациясы кәдімгі жұп операция мәлімет беру тиімсіз және жеткілікті қиын келіп жатыр. фунцция орынладһлу ең тиімдісі MPI- да іnt функциясы карастырылған

int MPI_Reduce(void *sendbuf, void *recvbuf,int count,MPI_Datatype type, MPI_Op op,int root,MPI_Comm comm),

sendbuf - жиберілген сообщенилардың буфер жады, - recvbuf – буфер памяти для нәтижелі сообщения буфер жады, - count - сообщениядағы элемент саны, - type –элемент типі , - op - ақпаратпен орындаатын операция, - root - нәжите алатын процесс рангі, - comm - операция орындалатын коммуникатор

40 Синхронизация вычислений. Аварийное завершение параллельной программы. Операции передачи данных между двумя процессами. Режимы передачи данных Синхронизация вычислений В ряде ситуаций независимо выполняемые в процессах вычисления необходимо синхронизировать. Так, например, для измерения времени начала работы параллельной программы необходимо, чтобы для всех процессов одновременно были завершены все подготовительные действия, перед окончанием работы программы все процессы должны завершить свои вычисления и т.п. Синхронизация процессов, т.е. одновременное достижение процессами тех или иных точек процесса вычислений, обеспечивается при помощи функции MPI: int MPI_Barrier(MPI_Comm comm); Функция MPI_Barrier определяет коллективную операции и, тем самым, при использовании должна вызываться всеми процессами используемого коммуникатора. При вызове функции MPI_Barrier выполнение процесса блокируется, продолжение вычислений процесса произойдет только после вызова функции MPI_Barrier всеми процессами коммуникатора. Операции передачи данных между двумя процессами Продолжим начатое в п. 4.2.1 изучение функций MPI для выполнения операций передачи данных между процессами параллельной программы. Режимы







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.