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



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

.
 
. .
ELSE
директивалары арасындағы бағдарлама бӛлігі тек 3-ші 
нӛмірлі жіппен ғана, ал 
ELSE
.
 
. .
ENDIF
арасындағы бӛлігі – қалған 
барлығымен орындалады. Бұрынғыша, бастапқы код барлық жіптер үшін 
бірдей болып қалады. Алайда, ондағы басқарудың нақты берілуі түрлі жіптер 
үшін әртүрлі жүреді, себебі 
OMP
_
GET
_
THREAD
_
NUM 
()
функциясы 3 мәнін 
тек 3-ші нӛмірлі жіпке ғана қайтарады. 
Егер параллель секцияда цикл операторы кездессе, онда жалпы ережеге 
сәйкес ол барлық жіптермен орындалады, яғни әрбір жіп бұл циклдің барлық 
итерацияларын орындайды. 
Жіптер арасындағы цикл итерацияларын тарату үшін 
DO
директивасын 
пайдалану керек: 
!$ОМР DO [опция [[,] опция]...] 

[!$ОМР END DO] 


146 
Бұл директива артынан ілескен 
DO
операторы кіретін блокқа қатысты. 

SCHEDULE 

опциясы жіптер арасында цикл итерацияларын таратудың 
нақты әдістерін анықтайды. 

STATIC 
[, m]
— итерацияның блокты-циклдық таратылуы. Бірінші 
жіп m итерациядан тұратын бірінші блокты орындайды, екінші жіп – 
екінші блокты және т.с.с. соңғы блокқа дейін, одан кейін таратылу 
қайтадан бірінші жіптен басталады. Егер m–нің мәні кӛрсетілмесе, 
онда итерациялардың барлық жиыны, ӛлшемдері шамамен бірдей 
болатын үздіксіз бӛліктерге (кесектерге) бӛлінеді, және олар жіптер 
арасында таратылады. 

DYNAMIC 
[,m]
- итерациялардың динамикалық таратылуы. 
Алғашында барлық жіптер m итерациядан тұратын үлестерін 
(порции) алады, ӛз жұмыстарын аяқтағаннан кейін әрбір жіп тағы 
да m итерациядан тұратын келесі үлесін алады. Егер m–нің мәні 
кӛрсетілмесе, ол бірге тең деп қабылданады. 

GUIDED 
[,m]
- итерациялардың ӛлшемдері азаятын блоктармен 
динамикалық таратылуы. Алғашында белгіленген блоктардың 
ӛлшемдері жеткілікті үлкен етіп алынады, ал бағдарламаның жұмыс 
істеу процесінде ол үнемі біртіндеп азая береді. Итерация блогының 
минимальді ӛлшемі m. Алғашқы белгіленген блоктың ӛлшемі оның 
іске асырылуына байланысты. Егер m–нің мәні кӛрсетілмесе, ол 
бірге тең деп қабылданады.

RUNTIME 
– цикл итерацияларының таратылу әдісі бағдарламаның 
жұмыс істеу кезінде 
OMP
_
SCHEDULE 
айнымалысының мәніне 
байланысты таңдалады. Таңдалған әдіс 
S
CHEDULE
опциясынан кейін 
жақша ішінде кӛрсетіледі, мысалы: 
!$ОМР DO SCHEDULE (DYNAMIC, 10) 
Бұл мысалда, итерациялардың әрбірі 10 итерациядан тұратын блоктар 
түрінде динамикалық таратылуы пайдаланылады. 
Параллель циклдың соңында, параллель жұмыс істейтін жіптердің 
айқын емес барьерлік синхрондауы іске асады (происходит): олардың ары 
қарай орындалуы, берілген нүктеге олардың барлығы жеткен кезде ғана 
жалғасады. Егер мұндай бӛгелудің (кідірістің) қажеттілігі болмаса, онда 
END DO NOWAIT
аяқтаушы директивасы цикл соңына жеткен жіптерге 
(қалған жіптермен синхрондалу жасалынбайды) орындауды жалғастыра 
беруге мүмкіндік береді. Егер 
END DO
директивасы
айқын түрде 
кӛрсетілмесе,
онда
параллель циклдың соңында синхрондау бәрібір 
орындалады. 
Параллель циклдарды ұйымдастыруға бірнеше табиғи шектеулер 
қойылады. Дербес жағдайда, дұрыс құрылған бағдарлама қандай жіп 


147 
параллель циклдің қай итерациясын орындап жатқанына байланысты 
болмауы керек деп есептеледі. Параллель циклдан қосымша шығуды 
пайдалануға болмайды. 
SCHEDULE
опциясында кӛрсетілген итерация 
блогының ӛлшемі цикл шеңберінде ӛзгермеуі керек.
Келесі мысалды қарастырайық. Ол бағдарламаның паралель секциясында 
орналасқан деп есептейік. 
!$ОМР DO SCHEDULE (STATIC, 2)
DO i = 1, n
DO j = 1, m 
A(i, j) = (B(i, j - 1) + B ( i - 1, j))/2.0 
END DO
END DO
!$OMP END DO 
Бұл мысалда сыртқы цикл параллель деп хабарланған, және мұнда 
итерацияның блокты-циклдік таратылуы пайдаланылатын болады (блокта екі 
итерациядан). Ішкі циклға қатысты ешқандай нұсқаулар жоқ, сондықтан ол 
әрбір жіппен тізбекті орындалатын болады. 


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




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

    Басты бет