192
Функционалды бағдарлама теориясында арифметиканың бұл заңы еркін
рекурсивті функцияларға да жалпыланады.
Бұндай тәсіл бізге «таза» функциялардан құрылған функционалды
бағдарламаларды параллельдеу үшін
тіке әдісті береді.
Таза функциялар
дегеніміз
қосалқы әсерсіз функцияларды білдіретін Т-жүйенің базалық
ұғымдарының бірі болып табылады. Әрбір уақыт мезетінде есептеуге дайын
«ӛрнекшелерді» белгілеп алып, оларды пайдаланудағы процессорларға бӛліп
беру керек. Бұл жерде негізі ретінде, түйіндері -шақырылған функцияларды
кӛрсететін, ал доғалары - «ӛрнекше-ӛрнек» қатынасына сәйкес келетін граф
алынады.
Дәстүрлі бағдарламалау тіліне функционалды семантиканы қосу үшін,
«дайын емес мән» ұғымын енгізу жеткілікті болады екен. Бұл С тілінде
айнымалыларды сипаттауда қосымша атрибутты енгізу арқылы жүзеге
асырылады. Жаңа 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 -
дайын емес
Достарыңызбен бөлісу: