Амдал заңы Амдал заңы параллельді есептеулердегі негізгі заң болып табылады. Ол жүйенің бір бөлігі ғана жетілдірілгенде бүкіл жүйенің максималды күтілетін жақсартуын аяқтау үшін қолданылады. Ол көбінесе бірнеше процессорларды пайдалану кезінде теориялық максималды жылдамдықты болжау үшін параллельді есептеулерде қолданылады.
Амдал заңын оның бір бөлігін параллель орындау арқылы есептеуді қаншалықты жылдамдатуға болатындығын есептеу үшін пайдалануға болады. Амдал заңы 1967 жылы заңды енгізген Джин Амдалдың құрметіне аталған. Параллель немесе параллель жүйелермен жұмыс істейтін әзірлеушілердің көпшілігі Амдал заңын білмей-ақ әлеуетті жылдамдықты интуитивті түрде сезінеді. Қарамастан, Амдал заңын білу әлі де пайдалы болуы мүмкін.
Параллельдеуге болатын бағдарламаны (немесе алгоритмді) екі бөлікке бөлуге болады:
• Параллельдеуге болмайтын бөлік
• Параллельдеуге болатын бөлік
Программаны тізбектей (параллель емес) орындауға қажетті жалпы уақыт Т деп аталады. Т уақыт параллельді емес және параллельді бөліктердің де уақытын қамтиды. Параллельденбейтін бөлік В деп аталады. Салданатын бөлік Т - В деп аталады. Келесі тізімде бұл анықтамалар бар:
• T = жалпы сериялық орындау уақыты
• B = салданбайтын бөліктің жалпы уақыты
• T - B = салданған бөліктің жалпы уақыты (параллель емес, тізбектей орындалғанда)
Бұдан шығатыны:
T=B+(TB)
Бағдарламаның параллельденетін бөлігінің теңдеуде өзіндік символы жоқтығы алдымен біртүрлі көрінуі мүмкін. Дегенмен, теңдеудің параллельденетін бөлігін жалпы уақыт T және B ( параллелденбейтін бөлік) арқылы көрсетуге болатындықтан, теңдеу іс жүзінде концептуалды түрде қысқартылған, яғни оның осы пішінде азырақ айнымалылар бар екенін білдіреді.
Бұл параллельденетін бөлік, T - B, оны параллель орындау арқылы жылдамдатуға болады. Бұл қаншалықты жылдам болуы мүмкін, оны іске қосу үшін қанша ағын немесе процессор пайдаланатыныңызға байланысты. Жіптер немесе процессорлар саны N деп аталады. Сондықтан параллельдеуге болатын ең жылдам бөлікті жасауға болады:
(Т - Б) / Н
Оны жазудың тағы бір жолы:
(1/N)*(T-B)
Уикипедия Амдал заңы туралы оқыған жағдайда осы нұсқаны пайдаланады.
Амдал заңына сәйкес, параллельденетін бөлік N ағындар немесе процессорлар арқылы орындалған кездегі программаның жалпы орындалу уақыты, осылайша:
T(N)=B+(T-B)/N
T(N) N параллелдеу коэффициентімен толық орындауды білдіреді. Осылайша, T мәнін T(1) түрінде жазуға болады, ол 1 параллельдеу коэффициентімен жалпы орындау уақытын білдіреді. T орнына T(1) қолданып Амдал заңы көрінеді. бұл сияқты:
T(N) = B + (T(1) - B) / N
Бұл әлі де бірдей мағынаны білдіреді.
Есептеу мысалы
Амдал заңын жақсырақ түсіну үшін мысалды қарастырайық. Бағдарламаның жалпы орындалу уақыты 1-ге орнатылған. Бағдарламалардың параллельденбейтін бөлігі 40% құрайды, бұл жалпы уақыттың 0,4-і 1. Параллельденетін бөлік осылайша 1 - 0,4 = 0,6 болады.
Параллельдеу коэффициенті 2 (2 ағын немесе параллельденетін бөлікті жасайтын орталық процессорлар, сондықтан N - 2) бағдарламаның орындалу уақыты:
T (2) = 0,4 + (1 - 0,4) / 2
= 0,4 + 0,6 / 2
= 0,4 + 0,3
= 0,7
2 орнына 5 параллелдеу коэффициентімен бірдей есептеуді орындау келесідей болады:
T (5) = 0,4 + (1 - 0,4) / 5
= 0,4 + 0,6 / 5
= 0,4 + 0,12
= 0,52
Амдал заңы суреттелген
Амдал заңын жақсырақ түсіну үшін мен бұл заңның қалай шыққанын көрсетуге тырысамын.
параллельденбейтін В бөлігіне және осы диаграммада көрсетілгендей параллельді 1-В бөлігіне бөлуге болады :
Жоғарғы жағындағы бөлінген сызық жалпы уақыт T(1) болып табылады.
Мұнда сіз 2 параллельдеу коэффициентімен орындалу уақытын көресіз:
Мұнда сіз 3 параллельдеу коэффициентімен орындалу уақытын көресіз:
Оңтайландыру алгоритмдері
Бұл, әрине, Амдал заңынан параллельденетін бөлікті оған аппараттық құралдарды тастау арқылы тезірек орындауға болатындығы шығады. Қосымша ағындар/процессорлар. Дегенмен, параллельді емес бөлікті кодты оңтайландыру арқылы ғана тезірек орындауға болады. Осылайша, параллельді емес бөлікті оңтайландыру арқылы бағдарламаңыздың жылдамдығын және параллельділігін арттыруға болады . Жұмыстың бір бөлігін параллельденетін бөлікке (мүмкіндігінше) жылжыту арқылы алгоритмді жалпы параллельденбейтін бөлікке ие болу үшін өзгертуге болады .
Серияларды оңтайландыру
Егер сіз бағдарламаның ретті бөлігін оңтайландырсаңыз, оңтайландырудан кейін бағдарламаның орындалу уақытын есептеу үшін Амдал заңын да пайдалануға болады. Егер В параллельденбейтін бөлігі О коэффициентімен оңтайландырылса, Амдал заңы келесідей болады:
T (O, N) = B / O + (1 - B / O) / N
Бағдарламаның параллельденбейтін бөлігі енді B/O уақытын алады, сондықтан параллельденетін бөлік 1 - B/O уақытын алады.
Егер В 0,4, О 2, N 5 болса, онда есептеу келесідей болады:
T (2,5) = 0,4/2 + (1 - 0,4/2
= 0,2 + (1 - 0,4 / 2) / 5
= 0,2 + (1 - 0,2) / 5
= 0,2 + 0,8 / 5
= 0,2 + 0,16
= 0,36
Орындау уақыты және жеделдету
Әзірге біз Амдал заңын оңтайландырудан немесе параллелизациядан кейін бағдарламаның немесе алгоритмнің орындалу уақытын есептеу үшін ғана қолдандық. Жылдамдықты есептеу үшін Амдал заңын да пайдалана аламыз, яғни жаңа алгоритм немесе бағдарлама ескі нұсқаға қарағанда қаншалықты жылдамырақ.
Егер бағдарламаның немесе алгоритмнің ескі нұсқасының уақыты T тең болса , онда жеделдету
Үдеу = T / T ( O , N )
Біз ескі уақыттың бөлігі ретінде орындалу уақытын және жылдамдықты есептеу үшін T мәнін жиі 1-ге орнатамыз. Сонда теңдеу келесідей болады:
Үдеу = 1 / T ( O , N )
Егер T ( O , N ) орнына Амдал заңының есебін енгізсек, келесі формуланы аламыз:
Үдеу = 1 / ( B / O + (1 - B / O ) / N )
B = 0,4, O = 2 және N = 5 болғанда , есептеу келесідей болады:
Үдеу = 1 / (0,4 / 2 + (1 - 0,4 / 2) / 5)
= 1 / (0,2 + (1 - 0,4 / 2) / 5)
= 1 / (0,2 + (1 - 0,2) / 5)
= 1 / (0,2 + 0,8 / 5)
= 1 / (0,2 + 0,16)
= 1 / 0,36
= 2,77777 ...