БАҒдарламасы ( Syllabus ) Павлодар, 2014ж Пән бағдарламасы (Syllabus) ф фсо пгу 18. 4/19 бекітемін фмжат факультетінің деканы Н. А. Испулов


Лекция. Параллель компьютерлер. Жылдам әрекеттесуші ақпараттық жасау



бет2/6
Дата11.06.2016
өлшемі0.76 Mb.
#128223
түріБағдарламасы
1   2   3   4   5   6

3Лекция. Параллель компьютерлер. Жылдам әрекеттесуші ақпараттық жасау.

    • Параллель компьютер типтері.

    • Жады келісушілігінің модулдері.

    • Программалау типтері.

Алдыңғы тарауда біз прогарммалаудың параллеь модельдерін қарастырдық. Бұл тарауда параллель компьютерлер типтеріне тоқталамыз:

● Жалпы қатынау жадылы көппроцессорлы жүйелерге (бөлінетін жадылы);

● Хабар беру мультипроцессорына.
Жалпы қатынау жадылы көппроцессорлы жүйелерге (бөлінетін жадылы)

Жалпы қатынау жадылы конфигурациясы бар параллель компьютерлердің бірінші типін толық қарастырамыз. Бұл конфигурация көптеген жады модульдерімен байланысқан процессорлар жиынтығынан тұрады.

Процессорлар мен жады арасындағы байланыс өзарабайланыс желісінің кейбір формалары арқылы жүзеге асады. Қарастырылатын жүйе жеке адрестік кеңістікті қолданады. Жалпы қатынау жадылы конфигурациясы бар параллель компьютердің жалпы түрі 4- суретте келтірілген.
Жады модульдері


Жалпы адрестік кеңістік




Біріктіретін желі




Деректер (процессорға немесе процессордан)






Процессорлер

4-сурет. Бөлінетін жадылы мультипроцессорлар құрылымы.

Барлық жедел жадыдағы әрбір ұяшықтың ерекше адресі болады, және осы адресті әрбір процессор берілген ұяшыққа қатынау үшін қолданылады. Жады ұяшығының виртуальды және нақты орнына қатынау үшін қолданылады.

Вертуалды адресатция мен накты адрес арасында атау арасында атау бойынша іздедін апараттық кестесін қолданып автоматы аудару жүреді.ТLB (трансляцианы алдындағысының буфері)


Виртуальды адрес



TLB

Нақты адрес


Жалпыкатынау жадылы працессорлы жүйелердегі программалдауда орындалатын программа колды әрбір процессордың жадында сакталады да, одан кеиін орындалады.

Егер жады шинасы немесе матрицалық каммутатор болып саналатын жалғастырып тұратын желіде екіден 30 дейінгі процессоры бар, жадының кез-келген учаскесіне әрбір процессордың бірдей қатынау уақытысы болса, онда мұндай мультипроцессор түрі біртектес (UMA- uniform memory access) немесе симетриялы мультипроцессор деп аталады.

Басқа жағдайда, ондаған немесе жүздеген процессорлы үлкен мультипроцессорлар болса, ал жалғастыратын желілер ағаш тәрізді ауыстырғыштар жиыны мен жады облыстарынан, жады иерархиялық құрылымды болса, әртүрлі қатынау уақытына әкеледі. Мұндай бөлінетін жадылы мультипроцессорлар біртектес емес деп аталады (NUMA-non uniform memory access).

Екі типті машиналарда да өзінің жеке кэші болады. Егер екі процессор жадының әртүрлі облысына нұсқаса, олардың ішіндегісін олардың әрбіреуінің кэшіне қауіпсіз орналастыруға болады. Деректі бірмезгілде оқығанда, процессордың әрбір кэшіне деректер көшірмесін орналастыруға болады. Бірақ деректі біруақытта оқығанда және деректі басқа процессормен жазғанда кэші келісушілік проблемасы болуы мүмкін. Мұндай проблеманың шешімінің бірі - әрбір процессор адрестік шинасы «қадағалауы», ондағы жады облысына нұсқағышты табуы керек.

Сонда-ақ жады келісушілік проблемасы: алғашқы жады нақты қашан жаңғыртылады? Жады келісушілігінің бірнеше модулі бар:

●Тізбекті келісушілік;

● Поцессорлар келісушілігі;

● Басату келісушілігі.

Тізбекті келісушілік жадыны жаңарту белгілі бір ретпен жүреді деп кепіл береді, және де әрбір процессорға бір ғана тізбек «тізбек» көрінеді.

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

Босатуды келісушілік кезінде алғашқы жады программист көрсеткен синхрондау нүктелерінде жаңартылады. Жады келісушілігінің соңғы моделі жиі қолданыады, өйткені басқа жағдайларда іске асыру өте қымбат және жұмыс жалпы баяулайды. Поцессор жұмысының баяулауы, әрбір жазуда ақпараттық бөлік барлық кэш жадыны тексеруі керек және қажет болса оларды жаңарту немесе жарамсыз етуге, сонымен қатар алғашқы жадыны толықтыруға байланысты.

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

Осындай типті программалау үшін бірнеше әдісі бар:

●Жаңа параллель программалау тілдері (Мысалы, Ada);

● Бар тізбекті тілді өзгерту (Мысалы,Fortran, C++)

● Бар тізбекті тілдердің көмекші программалар кітапханасын қолдану (Мысалы, Ptheards, Java).
4 Лекция. Параллель компьютерлер типтері.


  • Хабар беру мультикомпьтері.

  • Үлестірілген жадылы мультикомпьютерлер.

  • Флинн таксономиясы.

  • Жаңа таксономия құру спецификациясы.

Бұл компьютерлік жүйелер байланыс жүйелері арқылы өзара байланысқан компьютерлер жиыны.

Әрбір компьютерлер поцессор мен жергілікті жадыдан тұрады. Жады компьютерлер арасында үлестірілген.

Әрбір компьютердің өз адрестік кеңістігі бар. Поцессорлар үшін өзара байланыс бір-біріне хабар беру немесе алу арқылы қамтамасыз етіледі. Хабарларға басқа поцессорлардың есептеуіне қажетті деректер кіруі мүмкін.

Сонымен, берілген жүйеде кэш пен жадының келісушілік проблемасы тумайды. Үлестірілген жадылы микрокомпьютер 5-суретте көрсетілген.


Хабар


Процессор

Жергілікті жады


Компьютерлер

5-сурет. Хабар беру көппроцессорлы жүйесінің моделі (мультикомпьютерлер).
Поцессорлар арасындағы хабар беруді программа жүзеге асырады. Берілген жүйенің негізгі идеясы – қойылған есепті толығымен шешу үшін, есепті бір уақытта орындалатындай етіп бөліктеуге болады.

Жұмыс станциясы жиынынан тұратын желілік жүйе көбінесе жұмыс станциясының желісі (NOW – network of workstations) немесе жұмыс станциясының кластері деп аталады (COW – cluster of workstions). Барлық жұмыс станциялары өзара байланысты бір немесе бірнеше қосымшаларды орындайды. Үлестірілген жадысы немесе бірнеше қосымшаларды орындайды. Үлестірілген жадысы бар қымбат емес мультипоцессор құрудың кең тараған әдісі Beowulf машинасын жинау. Ол базалық ақпараттық жасау және Pentium поцессорның чипсеттері, желілері, дискілері және Linux операциялық жүйесі сияқты ақысыз программалардан тұрады.

Үлестірілген жадылы мультикомпьютерлердің өте кең комбинациясы – бөлінетін жүйесі сияқты жадыны қолдайтын машина.

Мұндай типті мультикомпьютерлердің программалауға бірнеше әдістермен жетуге болады:

● Арнайы параллель программалау тілін жобалау (мысалы, Occam параллель программалау тілі),

● Хабар жеткізуді өңдеу үшін тізбекті жоғары деңгейлі тілдің түйінді сөздерін кеңейту (мысалы, С++, Фортран HPF);

● Бар тізбекті жоғары деңгейлі тілді қолдану және хабар беру үшін сыртқы процедуралардың кітапханасын жасау (мысалы, PVM, MPI).

Келесі тарауда программалаудың осы әдістеріне толығрақ тоқталамыз.


Флинн таксономиясы

Бір поцессорлы компьютерлерде деректерге амалдар қолданылатын бір командалар ағыны программа арқылы генерацияланады. Бұл схеманы 1972 жылы Стэфорд университетінің процессоры Флинн ойлап тапты. Оның классификацилау схемасын Флинн таксономиясы деп атажы (Flynn, 1966, 1995).

Флинн таксономиясына сәйкес компьютерлік жүйелер командалар ағыны және деректер ағыны сандарымен классификацияланады (6-сурет).

● SISD (Single Instruction Single Data): бір командалар ағыны және бір деректер ағыны;

● SIMD (Single Instruction Multiple Data): бір командалар ағыны және көп деректер ағыны;

● MIMD (Multiple Instruction Multiple Data): көп командалар ағыны және көп деректер ағыны;

● MISD (Multiple Instruction Single Data): көп командалар ағыны және бір деректер ағыны;
Деректер ағының саны

Single Multiple


SISD SIMD

MISD MIMD


Single


Командалар ағынының саны

Multiple


6-сурет. Флинн таксономиясы
5 Лекция. Параллель программалау тиімділігін бағалау.

  • Орындалу уақыты, жылдамдату коэффициенті, орындаушыға қызмет көрсету бағасы мен тиімділігі.

  • Амдал заңы.

  • Густафсон заңы.

4 Лекцияда келтірілген компьютерлер конфигурациясының әрбіреуі қарастырамыз:

SISD – бір командалық ағыны бір деректер ағыны

SISD компьютер әдеттегі тізбекті комиьютерді сипаттайды (7-сурет).


Басқару модулі


Өңдеу модулі


Команда



Нәтиже
Деректер


7-сурет. SISD құрымылым.
Бір командалар ағыны және бір деректер ағыны бар машина мысалы:

● CDC 6600 көптеген функционалдық модулдері бар;

● CDC 7600 конвейерлік арифметикалық модулдері бар;

●Cray-1 векторлық өңдеуді қолдайды.


SIMD моделі бір командалар ағыны және көптеген деректер ағыны.

Бұл модельде бір ғана командалар ағыны бар, әрбір процессор сол командалар жиынынан кейін жүреді және әртүрлі функционалдық элементтері бар көптеген деректер ағыны әрбір процессор арасында үлестіріледі.

SIMD компьютерлер үлестірілген жадылы.

Мұндай құрылымының жалпы түрі 8- суретте көрсетілген:



Басқару модулі


Команда



Өңдеу модулі

Деректер Нәтиже



Өңдеу модулі


Деректер Нәтиже





Өңдеу модулі



Деректер Нәтиже


.....

8-сурет. SIMD құрылымы


Берілген құрылымда барлық элементар процессорлар біруақытта бірдей команданы орындайды және синхронды бірге «аяқ басады». Әрбір процессор өзінің жеке жадысының деректерімен жұмыс істейді және сондықтан деректердің әртүрлі ағынымен жұмыс істейді.

Әрбір процессорға келесі команда әрекет жасалғанға дейін команда орындалуын аяқтауға мүмкіндік берілуі керек. Командалардың орындалуы синхронды.

SIMD модельді компьютерлер мысалы:

● ILLIAC-IV;

● BSP;

● MPP;


● Conection Machine (CM 1).

SIMD компьютерлер нейтрондық желілер типті параллель қосымшалар үлестірілген деректер үшін жиі қолданылады.

MIMD көп командалар ағыны және көп MIMD компьютер әрбіреуінің өзінің жеке басқару блогы бар, көптеген байланысқан элементар процессорлардан тұрады (9-сурет).

Процессорлар өзінің жеке жеке деректеріне өзінің жеке командаларымен әсерін тигізеді. Әртүрлі процессорлар орындаған есептер әртүрлі уақытта босатылып немесе аяқталуы мүмкін. Олар SIMD компьютерлернідегі сияқты бірге «аяқ баспай» асинхронды орындайды.

MIMD құрылымды компьютерлер үлестірілген жадылы, немесе жалпықатынау жадысын бірлесіп қолдануы мүмкін. Мұндай компьютерлер мысалы:

● Cray-2, S1;

● Cray X-MP;

● IBM 370/168 MP, iPSC.


Ж

Е



Л

І


Команда











Деректер




Нәтиже





Команда







Деректер





Нәтиже

9-сурет. MIMD модуль

MIMD SPMD SIMD
6 Лекция. Процестер мен синхрондау. Аппараттық синхронизациялау деңгейі.



  • Параллель бағдарламалар күйі.

  • Параллель бағдарламалар іс-әрекеті мен тарихы.

  • Параллель бағдарламалар қасиеттері.

Параллель бағдарламаның күйі уақыттың кейбір сәттеріндегі бағдарламаның айнымалылар мәндерінен тұрады. Айнымалылар бағдарламалаушымен айқын анықталған немесе күйі туарлы жасырын ақпаратты сақтайтын айқын емес (әрбір процестің бағдарламалық есептегіш сияқты) түрде болады. Параллель бағдарлама орындауды кейбір бастапқы күйде бастайды. Бағдарламаның әрбір процесі тәуелсіз орындалады және орындалуына қарай ол бағдарлама күйін тексереді және өзгертеді.

Берілген тарауда тізбекті және параллель программалаудың аксиомалық семантикасында қысқаша шолу келтірілген. Параллель программаларда пайда болатын жаңа фундаментальды мәселе - өзара ықпал ету мүмкіндігі. Оны жоюдың 4 әдісі сипатталады: қиылыспайтын айнымалылар жиыны, нашарлаған тұжырымдар, кең ауқымды инварианттар және синхрондау. Процесстерді синхрондаудың негізгі құралдары құрасытылады: тосқауылдар, блоктар, семафорлар, мониторлар. Осы құралдардың практикада қолданылуы көрсетілген.

Параллель бағдарламалар күйі, әрекеті, тарихы және қасиеттері

Параллель программаның күйі белгілі бір уақыттағы программа айнымалысының мәндерінен тұрады. Айнымалыларды программист айқын анықтауы және айқын емес (әрбір процесстің программалық санауышы ретінде), олар күйдің жасырын ақпараттарын сақтайды (Gregory R. Andrews, 2002). Параллель программа белгілі бір алғашқы күйде орындала бастайды. Программаның әрбір процесі тәуелсіз орындалады, және орындалуына қарай программаның күйін тексереді және өзгертеді.

Процесс операторлар тізбегін орындайды. Оператор өз кезегінде бөлінбейтін амалдар тізбегін орындайды. Бұл амалдар программаның күйін бөлмей тоексереді және өзгертеді. Бөлінбейтін амалдар мысалына жады сөздерін жүктейтін және сақтайтын үздіксіз машиналық инструкциялар жатады.

Параллель программаның орындалуы әрбір процесс орындайтын бөлінбейтін амалдар тізбегінің алмасуына алып келеді. Әрбір программаның нақты орындалуын тарих s0→s1→...sn деп қарастыруға болады, мұндағы s0 – бастапқы күйі. Күйлер арасындағы ауысулар күйлерді өзгертетін бөлінбейтін амалдар арқылы жүзеге асырылады. Тарихты да күйлердің тізбегінің трассасы деп атайды. Параллель орындауды сызықтық тарих түрінде көрсетуге болады, себебі бөліебейтін амалдар жиынтығын праллель орындау олардың белгілі бір ретпен орындалуына эквивалентті. Бөлінбейтін амалдармен шақырылған күйлердіғ өзгеруі бөлінбейді, және, сондықтан оған осы уақытта пайда болатын бөлінбейтін амалдар әсер ете алмайды.

Параллель программаның әрбір орындалуы тарих тудырады. Тривиальды программалардан өзге барлық программалар үшін мүмкін тарихтар саны аса көп, өйткені кез-келген процесстің бөлінбейтін амалы келесі тарих болуы мүмкін. Яғни, программаның орындалуы бір ғана алғашқы күйден басталса да амалдарды ауыстырудың әдістері көп.

Синхрондаудың мақсаты – параллель программаның күтпеген тарихын шығарып тастау. Өзара шығарып тастаулар бөлінбейтін әрекеттердің араласып келуінде, олар тізбекті бөлінбейтін сым секциялары деп аталатын аппараттық жасаумен іске асырылады.

Олар бөлінбейтін болуы керек, яғни оларды сол айнымалыларға нұсқайтын басқа процесстердің әрекетімен үзуге болмайды.

Шарт бойынша синхрондау (шартты синхрондау) күй белгілі логикалық шартты қанағаттандырғанда әрекет іске асырылады. Синхрондаудың екі түрі де келесі кезектегі бөлінбейтін әрекеттер жиынын шектей отырып процесстерді тоқтатуы мүмкін.

Программа қасиеті деп программаның кез-келген мүмкін тарихы үшін ақиқат атрибутты айтады, және оның барлық орындаулары үшін. Қасиеттің екі типі бар: қауіпсіздік және сақталғыштық.

Сақталғыштық қасиеті – программа ақыр аяғында «жақсы» күйге келетіндігінде, яғни, барлық айнымалылардың керекті мәндерге ие болатын күйі.

Қауіпсіздік қасиеті – программа ешқашанда «нашар» күйге келмейтіндігіне (кейбір айнымалылар керек емес мәндерге ие болуы мүмкін).

Қауіпсіздік қасиетінің мысалы ретінде жартылай дәлдікті (дұрыстық) алуға болады.

Программа жартылай дәл (дұрыс), егер оның соңғы күйі дұрыс болса (программаның аяқталуының шарты). Егер программаның орындалуы аяқталмаса, ол ешуақытта дұрыс нәтиже бермейді, бірақ программа аяқталуының тарихы болмайды.

Аяқталушылық – сақталғыштық қасиетінің мысалы. Әрбір цикл немесе процедура шақылуы аяқталса программа аяқталады, яғни әрбір тарих ұзындығы шектелген.

Программаның толық дәлдігі – жартылай дәлдік пен аяқталушылықты біріктіретін қасиет: программа толық дәл, егер ол дұрыс нәтиже бере отырып әрқашан аяқталса.

Өзара шығарып тастау – параллель прграммадағы қауіпсіздік қасиетінің мысалы. Нашар күйде мұндай прграмманың екі процесі біруақытта әртүрлі сыныекцияларында әрекеттер орындайды. Ақыр аяғында сын секциясына кіру мүмкіндігі – параллель программадағы сақталғышьық қасиеті мысалы. Жақсы күйлерде әрбір процесс өз сын секциясында орындалады.

Әдістердің бірі тестілеу немесе жөндеу. Оны бір ғана «программаны жібер және нәтижесінде не болатынын қара» сөйлеммен сипаттауға болады. Бұл программаның кейбір мүмкін тарихын іріктеу және олардың тиімділігін тексеруге сәйкес. Мұндай тексерудің кемшілігі әрбір тест бір ғана орындалу тарихына қатысты, ал шектелген тестер саны нашар тарихтардың болмайтындығын демонстрациялауға қабілеттілігіне күмән келтіреді.

Екінші әдіс – «жағдайлардың толық анализі» деп атауға болатын операторлық пікірлерді қолдану. Ол үшін процесстердің бөлінбейтін әрекеттерінің ауысу әдістері анализденеді. Бірақ бөлінбейтін әрекеттерінің ауысу әдістері анализденеді. Бірақ параллель программада мүмкін тарихтар саны өте үлкен (сондықтан әдіс өте ұзақ). Прарллель программа n процесстен тұрады және олардың әрбіреуі m бөлінбейтін әрекет орындайдыдеп есептейік. Сонда программаның әртүрлі тарихы (n-m)!(m!). Әрбіреуі екі бөлінбейтін амалды орындайтын үш программадан тұратын процесстің әртүрлі 90 тарихы болады. Әрбір процесс амалдар тізбегін орындайтындықтан ол үшін m әрекеттен бір ғана рет болуы мүмкін: бөлімі реті дұрыс еместердің бәрін лақтырып тастайды. Бұл формула әрбір қолодада карталар реті сақталадыдеген шарт орындалғанда m картаы бар n колоданы ауыстыру сынының формуласын береді.

Үшінші әдіс – тұжырымдамалық пікірлерді қолдану, оны «абстракциялы анализ» деп атауға болады. Бұл әдісте предикаттар логикасының формулаларын тұжырымдамалар деп атайды және қалып-күй жиынтығын сипаттау үшін қолданылады – мысалы, х>0 болатын барлық қалып-күйлер. Бір предикатты қанағаттандыратын программаның қалып-күйі, басқасына қанағаттандыратын қалып-күйге өзгеретіндіктен бөлінбейтін әрекеттер предикаттық түрлендірулер ретінде қарастырылады. Бұл әдістің артықшылығы - қалып-күйлер және олардың түрлендірулерді ыңғайлы ғып өрнектеу. Бұл әдіс программаны құру және анализ жасау әдісіне алып келеді, соған сәйкес жұмыс көлемі программадағы бөлінбейтін әрекеттер санына тура пропационал.
Бөлінбейтін әрекеттер және күту операторлары

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

Синхрондаудың бірінші формасы-өзара тізімнен шығару деп атайды, екіншісі-шартты синхрондау.

Ұсақ модульдық бөлінбеушілік.

Бөлінбейтін әрекет қалып-күйді бөлмей түрлендіреді. Бұл осы әрекетті орындау барысында пайда болатын кез-келген аралық қалып-күй басқа процесстер үшін көрінбейтін болуы керек. Ұсақмодульды бөлінбейтін әрекет-программа орындалатын тікелей аппараттық жасаудың әрекеті.

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

Int y=0; z=0;

Parallel: x=e+z; //y=1; z=2; end parallel;

Егер x=y+z y-ң мәнін регистрге жүктеу және келесі мәндері z-ті қоса отырып алынса, онда х айнымалысының 0,1,2 және 3. Бұлайша болатын себебі біз екінші процесстің орындалу дәрежесіне байланысты у және z-тің алғашқы мәндерімен қоса, олардың соңғы мәндерін немесе комбинациясын аламыз. Келтірілген программаның тағы бір ерекшелігі, х-тің соңғы мәні болуы мүмкін, бірақ программаны тоқтатып у+ z қосындысының мәні 2 болатын қалып-күйді көре аламыз. Машиналар келесі сипаттамаларға ие болады деп есептеледі:


  • Бөлінбейтін амалдармен оқылатын және жазылатын базалық типтің мәндері (мысалы, Int) жады элементтерінде (мысалы сөздерде) сақталады.

  • Мәндер былай өңделеді: оларды регистрлерге орналастырады, онда оған амалдар қолданады және нәтижені қайтадан жадыға жазады.

  • Әрбір процесстің өзінің регистрлер жиыны болады. Бұл әрбір процесске және регистрлер жиынын беру жолымен немесе әртүрлі процесстерді орындағанда регистрлер мәнін қайта қалпына келтіру жолымен жасалады. (Бұл регистрлер процессті орындау контекстін құрғандықтан контексті ауыстыру деп атайды.)

  • Күрделі өрнектерді есептегенде пайда болатын кез-келегн аралық нәтижелер орындалатын процесстің регистрлері немесе жады облыстарында сақталады, мысалы, оның стегінде.

Машинаның бұл моделінде, гер бір процесстегі е өрнегі басқа процесс өзгерткен айнымалыға айналмаса, бірнеше ұсақмодульды әрекеттерді орындау қажет болса да өрнекті есептеу әрқашанда бөлінбейтін амал болады. Бұл е өрнегін есептеген е-ге тәуелді бірде бір мән өзінің мәнін өзгертпейді және өрнекті есептегендегі құрылатын уақытша мәнді бірде-бір процесс көрмейді. Сол сияқты, егер x=е меншіктеуі бір процессте басқа процесс өзгертетін айнымалыға нұсқамаса (мысал, тек жергілікті айнымалыларға нұсқаса), онда меншіктеуді орындау бөлінбейтін амал.

Параллель программадағы көптеген операторлар осы қиылыспаушылық шартын қанағаттандырмайды. Бірақ та жиірек жұмсақ шарттар орындалады.

« Бірден аспайтын» шарты.

Сын нұсқағыш өрнектегі басқа процесстер өзгертетін айнымалыға нұсқайды. Кез-келген сын секциясы-жады элементінде сақталатын қарапайым айнымалыға нұсқайды және автоматты түрде оқылады және жазылады деп есептейік. x=е меншіктеу операторы егер немесе е бірден аспайтын сын нұсқағыштан тұрса, ал х айнымалысы басқа процесспен оқылмайтын болса, немесе е өрнегі сын секцияларынан тұрмаса, ал басқа процесстер х айнымалысын оқымаса «бірден аспайтын» шартын қанағаттандырады.

Бұл шарт «бірден аспайтын» шарты деп аталады, себебі осы жағдайда ғана бір бөлінбейтін айнымалы болуы мүмкін және оны бірден артық рет шақырмайды.Осы сияқты анықтама меншіктеу операторы болмайтын өрнектерге қолданылады. Осындай өрнектер «бірден аспайтын» шартын қанағаттандырады егер ол бірден аспайтын сын нұсқағыштан тұрса.

Егер меншіктеу операторы «бірден аспайтын» шартын қанағаттандырса, онда меншіктеу операторының орындалуы бөлінбейтін амал болып көрінеді, өйткені өрнектегі бір ғана бөлінбейтін айнымалы бір ақ рет оқылады немесе жазылады. Мысалы, егер е өрнегі сын секцияларынан тұрмаса, ал х айнымалысы басқа процесстер оқитын қарапайым болса, онда олар өрнек бөлінбей есептеле ме тани алады. Сол сияқты, егер е бір сын секциясынан тұрса, онда меншіктеуді орындайын процесс айнымалының мәні қалай өзгергенін айыра алмайды: ол тек соңғы мәнді ғана көре алады.

« Бірден аспайтын» шартын түсіндіру үшін бірнеше мысал келтірейік. Келесі программада екі меншіктеу де осы шартты қанағаттандырады.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Мұнда бір де бір процесске сын нұсқау жоқ, сондықтан х-тің де, у-ң де соңғы мәні бір болады.

Келесі программада екі меншіктеу де осы шартты қанағаттандырады.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Бірінші процесс у-ке нұсқайды (бір сын нұсқағыш), бірақ х айнымалысы екінші процесспен оқылмайды, және екінші процессте сын нұсқағыш жоқ. Х айнымалысының соңғы мәні немесе 1 немесе 2, ал у-тің соңғы мәні 1. Бірінші процесс у айнымалысын немесе оны өсіру алдында, немесе өсіргеннен кейін көреді, бірақ параллель программада программаның орындалу реті детерминделмегендіктен ол қай мәндерді көргендігін ешқашан білмейді.

Келесі прораммада бір де бір меншіктеу «бірден артық емес» шартына сәйкес келмейді.

Int x=0; y=0;

Parallel: x=x+1; //y=y+1;

Әрбір процессте өрнекте сын нұсқағыш болады және әрбір процесс оқыған айнымалы мәнін мәншіктейді. Шындығында х және у айнымалыларының соңғы мәндері 1 және 2, 2 және 1 немесе 1 және 1 болуы мүмкін (егер процесстер х және у айнымалысының мәндерін оларға мән меншіктегенге дейін оқыса.) Бірақ, әрбір меншіктеу басқа процесс өзгертетін бір ғана айнымалыға бір ғана рет нұсқағандықтан, белгілі бір қалып күйде шындығында болған мәндер соңғы болады. Бұл алдында келтірілген у+2 өрнегі басқа процесс өзгертетін екі айнымалыға нұсқағыш мысалдан өзгеше.

Жалпы жағдайда, егер өрнек немесе меншіктеу операторы «бірден артық емес» шартын қанағаттандырмаса, бірақ оны бөлінбейтін етіп орындау керек болса бір бөлінбейтін әрекетте операторлар тізбегін орындау керек. Кез –келген жағдайда, ірімодульды бөлінбейтін амалдарды – бөлінбейтін болып көрінетін ұсақмодульды бөлінбейтін амалдардың тізбегін беретін синхрондау механизмі қажет.

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

Тағы да бір мысал: бір процесс байланысқан тізімдермен өрнектелген кезекке элементпен қоссын. Ал екінші процесс тізімде сол элемент болса, соны жоятын болсын. Бір айнымалы тізім басын, ал екіншісі – тізім сонын көрсетсін. Элементтерді қосу және жою екі мәнді өңдеуді қажет етеді. Мысалы, элементті қосу үшін алғашқы элементтің нұсқағышын және тізім соңының нұсқағышын жаңа элементке нұсқайтындай жағын өзгерту керек. Егер тізімде бір ғана элемент болса, бір уақытта қою және жою қайшылыққа алып келуі және тізімді қолдануға келмейтін қалып-күйге алып келуі мүмкін. Сонымен элементті қосу және жою бөлінбейтін әрекеттер болуы керек. Егер тізім бос болса, жою операциясын орындауды, тізімге элемент қосылғанға дейін қоя тұруы керек.

Бөлінбейтін амалдар үшбұрышты жақшалар < және > көмегімен беріледі. Мысалы, <е> - е өрнегі бөлінбей есептелетінін көрсетеді.

Синхрондау await операторы көмегімен анықталады:

< await (B)S>;

В бульдік айнымалы кідіріс шартын береді, ал S – аяқталуға кепілдігі бар операторлар тізбегінің тізімі ( мысалы, меншіктеу операторының тізбегі). Операторы бөлінбейтін әрекет ретінде орындалатындығын көрсету үшін үшбұрыш жақшаға алынады. Дербес жағдайда S орындала бастағанда және S тегі ешбір аралық қалып-күй басқа процесстерге көрінбейтін болса В өрнегі «ақиқат» мәніне ие болады. Мысалы,



0) S=S-1;> кодының орындалуы S-тің мәні оң болғанша кейінге қалдырылады, одан кейін ол 1-ге кемиді. Азайтқанға дейін S-тің мәні оң болатындығына кепілдік бар.

Await операторы кез-келген бөлінбейтін әрекеті бар ірімодульды анықтау үшін қолдануы мүмкін. Сондай-ақ тиімді.

Мысалы, жоғарыдағы келтірілген соңғы await операторы е семафорына Р операциясының дербес жағдайы.

Await операторының жалпы түрі - өзара алып тастау мен шарт бойынша синхрондауды анықтайды. Тек қана өзара алып тастауды анықтау үшін await операторының қысқа түрі қолданылады:



Мысалы, келесі операторда х және у-ң мәндері бөлінбейтін әрекетте өсіріледі:



Х-тің мәні 1-ге өскенде, ал у-әлі өсиегендегі аралық қалып-күй анықтама бойынша х және у айнымалыларына нұсқайтын басқа процесстер үшін көрінбейді.

Егер S тізбегі бірдің артық емес шартына қанағаттандыратын жалғыз меншіктеу операторы болса, немесе егер S бір машиналық инструкциямен жүзеге асырылса, онда бөлінбей орындалады; яғни «S; » дәл S сияқты болады.

Тек шартты синхрондауды беру үшін операторын қарастырайық;



Мысалы, процесстің келесі операторымен орындалуы айнымалысының мәні оң болғанға дейін қалдырылады.



0);>

Егер В берілген мысалдағыдай бірден артық емес шартын қанағаттандырса, онда «await (B); » өрнегі while (not B); ретінде жүзеге асырылады.

Бұл күту циклының мысалы while операторының денесі бос, сондықтан В-ның мәні жалған болғанға дейін циклданады.

Шартсыз бөлінбейтін әрекет –денесінде В кідіріс шарты болмайтын әрекет. Мұндай әрекет оның орындалуыныңбөлінбейтін шартына сәйкес бірден орындалуы мүмкін. Ұшбұрыш жағшадағы өрнектер және шарты жазылмаған немесе ақиқат мәнді қабылдайтын маппаратта жасалатын (ұсақ модульды) әрекеттер шартсыз бөлінбейтін әрекет болады.

Шартты бөлінбейтін амалдар – В шарты бар операторы.

Мұндай шарт В шарт ақиқат болғанша орындалмауы мүмкін. Егер В жалған болса, ол басқа процесстер әрекетінің нәтижесінде ақиқат болуы мүмкін. Егер В жалған болса процесстер әрекетінің нәтижесінде ақиқат болуы мүмкін. Сонымен шартты бөлінбей әрекеттің орындалуын күтетін процесс ұзақ кідірісте болуы мүмкін.



Достарыңызбен бөлісу:
1   2   3   4   5   6




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

    Басты бет