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



Pdf көрінісі
бет113/121
Дата31.08.2022
өлшемі2,81 Mb.
#38343
түріОқулық
1   ...   109   110   111   112   113   114   115   116   ...   121
Байланысты:
duisembiev-parallel-esep

001 # include
002 
003 # include
004 # include 
005 
006 struct tree {
007 struct tree tptr ieft; 
008 struct tree tptr right; 
009 int value
010 }; 
011 
012 struct tree tptr create_tree (int deep) { 
013 struct tree tptr res = tnew ( struct tree); 
014 res ->value = 1; 
015 if (deep <=1) { 
016 res ->left = NULL; 
017 res ->right = NULL; 
018 } else { 
019 res ->left = create_tree(deep – 1); 
020 res ->right = create_tree(deep – 1); 
021 } 
022 tvalidate (*res); 
023 return res; 
024} 
025 tfun void tsum (cost struct tree tptr _ tree, 
026 tout int *_res) { 
027 tval int left_sum, right_sum; 
028 
029 if (_tree->left ! = NULL) { 
030 tsum (_tree->left, &right _sum); 
031 } else { 
032 left_sum = _tree->value; 
033 } 
034 tsum(_tree->right, &right_sum); 
036 } else { 
037 right_ sum = _tree->value; 
038 } 
039 *_res = left_sum + right_sum; 
040 } 
041 


197 
042 int tmain (int argc, cgar* argv []) 
043 { 
044 struct tree tptr tree = create_tree(12); 
045 tval int sum; 
046 tsum (tree, &sum); 
047 terrprint (“sum = %u\n”, sum); 
048 return 0; 
049 } 
Бұл бағдарламада tree типтегі құрылым ағашы алдымен 
create_tree функциясымен туындайды, одан кейін tsum рекурсивті 
функциясында араланады. Алдыңғы мысалдағы сияқты ағаштың әрбір 
түйінінде параллельдеу жүргізіледі: алдымен бұтақтың оң және сол жақ 
тармақтарында шақырулар пайда болады, содан кейін ғана аралау 
нәтижелеріне қатынас жасалады.
Негізгі сӛз (кілттік сӛз) tptr дайын емес айнымалыларға жасалған 
ауқымды сілтемелерді суреттеу үшін қызмет етеді. Жазу операциясы кезінде 
мән жүйенің керекті торабына беріледі, онда ол мән сәйкес Т-айнымалыға 
жазылады және оны дайын етеді. 
Т-жүйесін пайдалану тәжірибесі ТС тілінде бағдарламаны құрастыру 
процесінде келесі қадамдар тізбегін ұсынады:
1. Кодтың дизайнын құрастыру. Бұл этапта мына сұрақтар шешіледі: 
қандай алгоритм фрагменттері ТС-тілінде Т-функциясы түрінде іске 
асырылады, ал қандай фрагменттер үйреншікті тізбекті орындалатын 
код түрінде C, C++ немесе Fortran стандартты тізбекті бағдарламалау 
тілдерінде іске асырылған. 
2. Бір процессорлық компьютерде орындау және алғашқы жӛндеу. 
Құрастырылған ТС-бағдарлама дәстүрлі қарапайым бір процессорлық 
компьютерде тізбекті режимде Т-жүйесін қолданбай жӛнделеді. Ол 
үшін С тіліне қосылған барлық жаңа кілттік сӛздер автоматты түрде 
сәйкес макростар (мысалы: tptr сӛзі - ―*‖: tval - ―бос― және т.б.) 
кӛмегімен қайта анықталады. 
3. Кӛп процессорлы құрылғыларда жӛндеу. ТС-бағдарламасын бір 
процессорлы компьютерде тізбекті режимде жӛндеуден кейін, 
параллельді есептеу ортасында толық функционалды жӛндеу 
жүргізіледі. 
4. Тиімділеу. Соңғы этапта, трассировка, профилировка және басқа да 
құрылғылар 
кӛмегімен 
кезкелген 
параллель 
бағдарламалау 
технологиясына тән бағдарламаны тиімділеу процесі жүргізіледі. 
Басқа параллель бағдарламалау жүйесімен салыстырғанда Т-жүйесінің 
артықшылығы екі жағдайда анық білінеді. Бірінші жағдай, бағдарламаны 
орындауға дейін параллель процесстердің жұмысын қалай реттеу туралы дәл 
ақпараттың болмауы. Екінші жағдай, бағдарламаны есептеу схемасы 


198 
функционалды модельге жақын және бір-бірін рекурсивті шақыратын 
функциялар жиынының кӛмегімен тиімді кӛрсетілуі мүмкін кездерде пайда 
болады. Т-жүйесінің күшті жағының бірі, ол бағдарламашыны параллель 
бағдарламалауға 
тән 
кӛптеген 
дәстүрлі 
әркеттерден 
босатады: 
бағдарламаның параллель фрагменттерін айқын ұйымдастыру, оларды 
кластер тораптарына тарату, фрагменттер жұмысын синхрондау, олардың 
арасында бір-бірімен мәлімет алмасудың айқын операцияларын орындау.
Т-жүйесінің кемшіліктеріне де тоқтала кетейік. Негізінен, ол 
кемшіліктер жайында айқын түрде айтыла бермейді, бірақ олар туралы білу 
керек екені түсінікті. Типтік мысал – деректерді кластердің бір торабынан 
екінші торабына жіберетін Т-функциясының шақыруы. Сырттай қарағанда 
ешқандай күмәнді нәрсе жоқ, ал қосымша шығындар ӛте үлкен болуы 
мүмкін. Егер бағдарламаны жобалау барысында бұл факторды ескермесе, 
онда оның тиімділігі жағынан үлкен проблемалар туындауы мүмкін. Жүйе 
тиімділікке кепілдік бере алмайды. Мұнда да, Т-жүйесі үшін бағдарламаны 
іске асыру кезінде бағдарламашы алгоритмді функционалды түрде 
мазмұндап және бағдарламаны таза Т-функцияларының жиыны түрінде 
сипаттауға міндетті. Бұны ыңғайсыз деуге болмайды, бірақ ол әдеттегіден 
тыс және мұнда бағдарламашыға потенциалды параллель фрагменттердің 
тімді ӛлшемін де таңдау керек болады. Т-функциясының ӛте кіші есептеу 
күрделілігі кӛп мӛлшердегі қосымша шығындарға әкелуі мүмкін. Ӛте үлкен 
есептеу 
күрделілігі 
(қиындықтары) 
параллель 
фрагменттердің 
аз 
туындауына, ол ӛз кезегінде жүйе есептеу тораптарының бірқалыпсыз 
жүктелуіне әкелуі мүмкін. 


Достарыңызбен бөлісу:
1   ...   109   110   111   112   113   114   115   116   ...   121




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

    Басты бет