Оқулық Қазақстан Республикасы Білім және ғылым министрлігі бекіткен Алматы, 2011


§2.2.2 OpenMP бағдарламалау технологиясы



Pdf көрінісі
бет74/121
Дата31.08.2022
өлшемі2,81 Mb.
#38343
түріОқулық
1   ...   70   71   72   73   74   75   76   77   ...   121
Байланысты:
duisembiev-parallel-esep

§2.2.2 OpenMP бағдарламалау технологиясы 
 
Бүгінгі күні ортақ жадылы компьютерлер үшін ең танымал 
бағдарламалау құралдарының бірі OpenMP (Open specifications for Multi-
Processing) (www.openmp.org). Ол дәстүрлі бағдарламалау тілдеріне және 
арнайы комментарилерді пайдалануға негізделген. Оның бастауына тізбекті 
бағдарлама алынады, ал оның параллель нұсқасын құру үшін пайдаланушыға 
директивтер, функциялар және ортаның айнымалыларының жиыны 
ұсынылады. Сонымен қатар, құрылатын параллель бағдарлама OpenMP АРI-
ді қолдайтын бӛлінетін жадылы әртүрлі компьютерлер арасында 
тасымалданатын болады деп есептеледі.
OpenMP технологиясының ӛзіндік ерекшелігі, ол пайдаланушыға 
параллель және тізбекті де орындалу үшін бағдарламаның бір нұсқасын ғана 
иеленуге мүмкіндік береді. Сонымен қоса мұнда тек параллель режимде 


142 
дұрыс жұмыс істейтін немесе тізбекті режимде басқа нәтиже беретін 
бағдарламалар құрастыру мүмкіндігі де қарастырылған.
Стандартты құрастырумен коммерциялық емес ұйым OpenMP ARB 
(Architecture Review Board) айналысады, және оған SMP-архитектурасын 
және бағдарламалық қамтамалар құрастыратын ірі компаниялардың ӛкілдері 
кіреді (IBM, Intel, Sun, Hewlett – Packard және т.б.). OpenMP дәстүрлі 
бағдарламалау Fortran, Си/Cи++ тілдерімен жұмыс істей алады. OpenMP 
спецификациясының бірінші нұсқасы 1997 жылы қазан айында пайда болды, 
және ол Фортран бағдарламалау тіліне арналған болатын, ал Си/Cи++ тіліне 
арналған спецификациясы 1998 жылы қазан айында пайда болды. Қазіргі 
кездегі стандарттың ресми спецификациясы - OpenMP 3,0 (2008 жылы май 
айында қабылданды).
OpenMP интефейсі SMP-жүйелерінде (SSMP, ccNUMA және т.б.) 
бағдарламалау үшін стандарт ретінде ойластырылған. OpenMP стандартына 
компилятор директиваларының, кӛмекші функциялардың және орта 
айнымалыларының жиыны спецификациялары кіреді. Стандарт кӛптеген 
UNIX-платформаларында және Windows NT ортасында қолжетімділікке ие. 
Бұл тілдер үшін барлық негізгі конструкциялар ұқсас болғандықтан, OpenMP 
технологиясы туралы әңгімені бұдан әрі Fortran тіліндегі мысалдар кӛмегімен 
жүргіземіз.
Жіптерді (нитей, Pthreads) ұйымдастыру үшін құрылған POSIX-
интерфейсі барлық UNIX-жүйелерде қолдау табады және ол алғашында 
параллельділікті ұйымдастыру мақсаты үшін құрастырылмағанын айта 
кетейік. OpenMP-ді жоғары деңгейдегі Pthreads (немесе ұқсас жіптер 
кітапханаларының) жалғасы немесе қондырмасы деп қарастыруға болады. 
Онда Pthreads-ке жақын терминологиялар мен бағдарламалау модельдері 
пайдаланылады, мысалы, динамикалық туындайтын жіптер жалпы және 
бӛлінетін деректер синхронизация үшін «құлыптар» механизмі. 
POSIX threads терминологиясына сәйкес, кезкелген UNIX-процесс 
адрестік кеңістіктері ортақ, бірақ командалар ағыны әртүрлі және бӛлек 
стектері болатын бірнеше басқару жіптерінен тұрады. Жіптерді кейбір 
жағдайларда ағындар, жеңіл процестер, LWP (light-weight processes) деп те 
атайды. 
OpenMP параллель есептеулерді кӛпағындылық UNIX кӛмегімен іске 
асырады, онда «басты» (master) ағын «бағыныңқы» (slave) ағындардың 
жиынын құрады және есеп солардың арасында таратылады. Ағындар бірнеше 
процессорлы машиналарда параллель орындалады деп болжанады және онда 
процессорлар саны ағындар санынан үлкен немесе тең болуы міндетті емес.
Енді ОреnМР ережелері шеңберінде, пайдаланушы ӛзінің параллель 
бағдарламасын қалай кӛрсету керек? Бағдарламаның бар тексті тізбекті және 
параллель облыстарға бӛлінген (44 сурет). 


143 
44 сурет. ОреnМР: бағдарламаның орындалу процесі 
Бастапқы уақыт мезетінде жіп-мастер (нить-мастер) немесе "басты" жіп 
туындайды және ол бағдарламаның орындалуын стартты нүктеден бастайды. 
Сонымен қатар ол тек ӛзі ғана бағдарламаның барлық тізбекті облыстарын 
орындайды. Параллельділікті қолдау үшін мұнда FORK/JOIN схемасы 
пайдаланылады. Параллель облысқа енген кезде жіп-мастер қосымша 
жіптерді туындатады (FORK операциясы орындалады). Одан кейін әрбір 
қосымша жіп ӛзінің бірегей нӛмірін алады, ал жіп-мастердің нӛмірі әрқашан 
0. Барлық қосымша туындаған жіптер пареллель облысқа сәйкес келетін бір 
кодты ғана орындайды. Параллель облыстан шығар мезетте басты жіп 
қалған жіптердің аяқталуын күтеді және бағдарламаның ары қарай 
орындалуын ӛзі ғана жалғастырады (JOIN операциясы орындалады).
Параллель облыста бағдарламаның барлық айнымалылары екі класқа 
бӛлінеді: жалпы (SHARED) және жергілікті (PRIVATE). Жалпы 
айнымалылар бағдарлама үшін әрқашанда бір экземплярда ғана болып, 
барлық жіптерге бір атпен ғана қолжетімді болады. Жергілікті 
айнымалыларды хабарлау әр жіп үшін әрбір айнымалының ӛз экземплярын 
туындатады. Жіптің ӛзінің жергілікті айнымалысының мәнін ӛзгертуі, басқа 
жіптердегі дәл осы жергілікті айнымалының мәнінің ӛзгеруіне ешқандай әсері 
жоқ. Негізінде, бағдарлама облыстарының соңғы қарастырылған түсініктері 
және айнымалылар кластары ОреnМР шеңберінде параллель бағдарламалар 
жазудың жалпы идеяларын анықтайды: бағдарлама текстінің кейбір 
фрагменттері параллель облыстар болып хабарланады; тек осы облыстар 
ғана жіптер жиынымен орындалады, ал олар жалпы айнымалылармен де 
жергілікті айнымалылармен де жұмыс істей алады.
ОреnМР негізгі конструкциясы мен базалық құрылымын қарастырайық 
[2]. Ондағы барлық директивалар комментарилерде орналасады және келесі 
комбинациялардың бірінен басталады: !$
ОМР
,
С
$
ОМР 
немесе *$
ОМР 
(еске сала 
кетсек '!', 'с' или '*' символдарының бірінен басталатын жол, Fortran тілінің 
ережелері бойынша комментарий болып есептеледі). 


Достарыңызбен бөлісу:
1   ...   70   71   72   73   74   75   76   77   ...   121




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет