Бақылау сұрақтары: МРI интерфейсінің толық версиясы.
Процестердің виртуалды топологиясы.
Процестер өзара қатынасының негізгі әдісі.
Коммуникатор және коммуникатордағы нөмір.
Процесстер топтарын қалай құруға болады.
Пайдаланылған әдебиеттер 1. Воеводин Вл. Параллельные вычисления. Санкт-Петербург, 2012 г.
2. Грегори Р. Эндрюс. Основы многопоточного, параллельного и распределенного программирования. Пер. с. англ. –М.: Издательский дом «Вильямс», 2013 г.
3. Акжалова А.Ж. Параллельные вычисления (учебное пособие). – Алматы, 2014 г.
4. Дүйсембиев Е.Е. Параллель есептеулер. Оқулық – Алматы 2011 ж.
29-Дәріс Тақырыбы: Бағдарламалаудың басқа тілдері және жүйелері. Жоспар: Т- жүйесі.
Т-жүйесінің базалық қағидалары.
Ғалымдардың жаңа бағдарламалық жүйелер құрастыру туралы ой-пікірлері үнемі көп және әр-түрлі болып келді. Бір пікірлер компьютерлердің архитектурасы ерекшеліктеріне басқалары математиканың немесе теориялық бағдарламаның әртүрлі тарауларына негізделді. Мысал ретінде, Sisal, Haskel, Cilk, T-система, НОРМА және т.б. жүйелерді атауға болады. Ондай жүйелер көп. Бірақ жүйелердің нақты таралуын негізінен үш фактор айқындайтыны белгілі: бағдарламалаудың қарапайымдылығы, бағдарламаның тиімділігі, жеңіл тасымалдануы. Ия, бірақ осы талаптарға толық жауап бере алатын бағдарламалық жүйе құру есебі әлі де шешілген жоқ. Сондықтан да, жаңа жүйелер құрудың базасы болатын ой-пікірлердің қаншалықты қызықты болатынын қарастырып көрелік.
Осы параграфта біз россиялық екі жүйе туралы қысқаша айтатын боламыз: Т-жүйесі және НОРМА тілі [10]. Бұл жүйелеудің біреуі бағдарламаны автоматты динамикалық параллельдеуге, ал екіншісі математикалық формулалар терминдері арқылы бағдарламалауға мүмкіндік береді.
Т- жүйесі Т-жүйесін құру өткен ғасырдың 80-ші жылдарының соңында РҒА (РАН)-ның бағдарламалық жүйелер Институтында басталған болатын.
Т-жүйесіне тән негізгі ерекшелік: бағдарламаларды динамикалық параллельдеуді қамтамасыз ету үшін функционалды бағдарламалау парадигмасын пайдалану болып табылады. Осының негізінде параллель есептеуді ұйымдастыру үшін Т-жүйесінде қызықты формаларды жүзеге асыруға және де табуға мүмкіндік туды. Мысалға алсақ, жүктемені бөлу немесе синхрондау үшін. Сонымен қатар, Т-жүйесінің функционалды стилін С, С++ тілдерінің кеңейтілуі немесе Fortran тілі көмегімен дәстүрлі бағдарламалау тілдерімен бірге тиімді пайдалану мүмкіндігі туды. Бұл тілде нақты параллельді конструкция жоқ және де бағдарламашы мәтінде бағдарламаның қай бөліктерін параллель орындау керек екенін анық көрсетпейді.
Т-жүйесінің базалық қағидалары функционалды бағдарламалаудың жалпы теориясының нәтижелеріне негізделген. Оны айқындау, түсіндіру үшін теорияның әрбір бөлігіне мән бермей-ақ сол сияқты жай теорияларды, яғни қарапайым аналогтарын пайдалануға болады. Мысалға, бір күрделі арифметикалық өрнек бар болып, оған өз кезегінде көптеген жақшаға алынған өрнекшелер кірсін делік. Әрине, бұл есептің шешімін кезкелген тәртіппен шешуге болады және әр жағдайда да нәтижесі бірдей болады.
Функционалды бағдарлама теориясында арифметиканың бұл заңы еркін рекурсивті функцияларға да жалпыланады.
Бұндай тәсіл бізге «таза» функциялардан құрылған функционалды бағдарламаларды параллельдеу үшін тіке әдісті береді. Таза функциялар дегеніміз қосалқы әсерсіз функцияларды білдіретін Т-жүйенің базалық ұғымдарының бірі болып табылады. Әрбір уақыт мезетінде есептеуге дайын «өрнекшелерді» белгілеп алып, оларды пайдаланудағы процессорларға бөліп беру керек. Бұл жерде негізі ретінде, түйіндері -шақырылған функцияларды көрсететін, ал доғалары - «өрнекше-өрнек» қатынасына сәйкес келетін граф алынады.
Дәстүрлі бағдарламалау тіліне функционалды семантиканы қосу үшін, «дайын емес мән» ұғымын енгізу жеткілікті болады екен. Бұл С тілінде айнымалыларды сипаттауда қосымша атрибутты енгізу арқылы жүзеге асырылады. Жаңа tval кілттік сөзі «tval int i» сипаттауында мәні бүтін немесе дайын емес мән болатын айнымалыны анықтайды. Қосалқы әсерсіз функцияларды белгілеу үшін қосымша tfun сөзін қолданады. Шығу Т - функциясы tout сөзімен белгіленеді. және т.б.
Қарапайым мысал қарастырайық :
tfun void tmain(...) {
tval int x, у, z, b = 1;
int w, t, a = 5;
G(a, b, &x, &y, &z); /* x, у, z –те нәтижелерді қабылдау*/
b = z;
У = a;
w = a;
t = b+a*w;
…
}
Берілген G функциясы таза және онда tfun атрибуты бар деп есептейік. Мысалды «қадам» бойынша орындаймыз.
1. G (a, b, &x, &y, &z ). G функциясы таза болғандықтан ол негізгі бағдарламамен параллель орындалуы мүмкін. Осы оператор орындалғаннан кейін Т-жүйесі G-функциясының шақырылуының негізінде, параллель орындалуға дайын жаңа жұмыс үлесін рәсімдейді.
Бұл жұмыс үлесі тез арада орындалуы да, немесе басқа себептер болып оның орындалуы кейінге қалдырылуы да мүмкін. Қай жағдайда да жүйе келесі операторды орындауға көшеді. Айнымалылар x, y, z - дайын емес айнымалылар статусын алады және дайын емес мәндерді қабылдайды.
2. b = z. Енді b айнымалысы да дайын емес болды, ал жүйе ешқандай бөгеліссіз одан ары бағдарламаны орындайды. Бұл мысал, дайын емес мәндерді көшіруге болатынын көрсетеді. Бірмезетте біз G функциясы нәтижесінің тұтынушылар құрамын да өзгерттік. Енді үшінші нәтиже Z айнымалысына да, дәл осылай B айнымалысына да берілуі тиіс. Әрине, осы мезеттегі b айнымалысының дайын емес екендігі, G функциясының аргументі ретінде алынған b мәніне еш әсер етпейтінін байқаймыз.
3. y = a. Айнымалы а - жай, сондықтан дайын емес y айнымалысы дайын болады және де а айнымалысының мәнін қабылдайды.
4. w = a. Бұл оператордың орындалуында қиыншылық туындамайды, себебі мұнда жай айнымалылар пайдаланылған.
5. t=b+a*w. Бұл операторда фрагменттің орындалуы, қашан G функциясы b айнымалысының нәтижесін қайтармайынша бұғаттауда болады. Екінші оператордағыдай, мұнда дайын емес мәндерді көшіруге болады, бірақ олармен ешқандай басқа операциялар орындауға болмайды.
Бұл фрагментке қатысты анықталмаған бір сұрақ қалады. Үшінші оператор үшін, фрагмент детерминделген құлығына ие болмайды деген әсер туындауы мүмкін. Шынында , егер «y = a» операторы G функциясының аяқталуынан ерте орындалса, онда y айнымалысының мәні G функциясымен анықталады, ал егер кеш орындалса онда у айнымалысы а мәнін қабылдайды. Негізінде детерминделу қамтамасыз етілген. Осы оператор орындалғаннан кейін у айнымалысының мәні әрқашан а мәніне тең болады. «y = a» операторын өңдеу алдында у айнымалысы бұғатталады.
Бұдан әрі айнымалының мәнін тексеру орындалады, егер мәні дайын емес болса, онда күтілетін мәнді қабыл алмау ұсынылады және жабдықтаушымен байланыс үзіледі. Біздің жағдайда бұл қабылдамау G функциясының орындалуынан шығатын мән. Барлық тексерістерден және оператордың орындалуынан кейін айнымалы бұғаттаудан босатылады. Мұндай тізбек бағдарлама құлығының детерминделгенінің кепілін бере алады және де әдеттегідей семантиканы қамтамасыз етеді: y = a орындалғаннан кейін у мәні а мәніне тең болады.
Жаңа кілттік сөздер қосылғаннан кейінгі С тілінің диалекті, ТС деп аталады. Жаңа тіл көптеген бағдарламалаушыларға бағдарламаларды функционалды стильде жазу үшін әдеттегідей императивті жазбаны қолдануға мүмкіндік береді.