Спец часть (часть 2) (3 поток) (2015) (by Кибитова) (1161602), страница 34
Текст из файла (страница 34)
передачи параметров и вызовов функций проводится на основе ОптимизацияОптимизацияпередачи параметровпараметров ии вызововвызовов функцийфункций проводитсяпроводится нана основеосновеОптимизацияпередачидвухподходов:прямойподстановкителфункцийвосновнойтекстпрограммыдвух подходов:подходов: прямойпрямой подстановкиподстановки телтел функцийфункций вв основнойосновной тексттекст программыпрограммы ииидвухпередачипараметровнеспомощьюобщегостековогомеханизма,ачерезглобальныепередачи параметровпараметров нене сс помощьюпомощью общегообщего стековогостекового механизма,механизма, аа черезчерез глобальныеглобальныепередачипеременные,которыевпоследствиисвязываютсясс регистрамицентральныхпеременные,которыевпоследствиисвязываютсярегистрамицентральныхпеременные, которые впоследствии связываются с регистрами центральныхпроцессоров.процессоров.процессоров.
454545Для вычислительныхмашин с векторной архитектурой оптимизация цикловподстановкой(inline).становитсямашинно-зависимой.Например,некоторыхотноситсявекторныхархитектурПередачапараметров черезрегистрыдляпроцессорак машиннозависимойоптимизации.Отказ программыот универсальногостековогомеханизмавснижение временивыполненияиногда можнополучить,не проводяопределенныхслучаях можетприводитьк значительномуснижениювремениработывынесение вычисленийиз циклов,а вносяих туда: в такихархитектурахоказываетсяпрограммы,передача повторныепараметроввычислениячерез регистрызависит отколичествадоступныхэффективнеенопровестис помощьювекторныхрегистров,чемПрямаяподстановкафункцийвосновнойциклпрограммыможетпривестиподстановкафункцийвосновнойциклпрограммыможетпривестирегистровввычислительнойсистемеиотиспользуемоговкомпилятореалгоритмаихнарушать работу векторного конвейера выполнением операции со скалярнойкксущественному увеличениюувеличению скоростискорости работыработы программы,программы, ноно одновременноодновременно ии ккраспределения.переменной.увеличениюпрограммы(есливызываетсяизразныхразмеровпрограммы(если функцияфункциявызываетсяизнесколькихразныхВажностьданногопостоянновозрастаетс ростомвозможностейЗаменаразмеровоперацийс методапеременнымициклапроизводитсяна несколькихосновепониманиямест).чтоЭтотметодприводиткк значениесокращениювременинапередачуметодприводитсокращениювременициклананедостатков.передачупараметроввычислительнойаппаратуры,но методимеет переменнойряд выраженныхВо-первых,того,с каждымшагомцикламеняется параметровнаодин “шагиивозвращаемогорезультата,накомандыпередачиуправления,захватапамятивв стекерезультата,на командыуправления,захватапамятимашины.стеке иионсильнозависиталгоритмыот особенностейконкретнойвычислительнойцикла”.Многиеустроенытак,передачичто вархитектурыходевычисленийнекоторыевеличиныдругиеоперации.Некоторыеязыки(Си++)разрешаютдругие вспомогательныевспомогательныеоперации.Некоторыеязыки(Си++)разрешаютВо-вторых,процедуры,оптимизированныетакимобразом,не могутвключатьсявоказываютсяпропорциональныминомеруитерации.Приэтомв программахпрограммистамявноуказыватьфункции,которыежелательнореализоватьпрограммистамявнопосколькууказыватьфункции,которые переменнойжелательнореализоватьобщиебиблиотеки,используютнестандартныйметод цикла.полученияпроизводитсяумножениеэтих величинна значениеТакиеподстановкой(inline).подстановкой(inline).параметров.В-третьих,использоватьметоднеудается,есливтелефункциипеременные называются индуктивными.
Все такие переменные заменяются Передачачерезрегистрыпроцессораотноситсякк машинноПередачапараметровчерезрегистрыпроцессораотноситсямашинноиспользуютсяоперацииадресовпараметров.компиляторомна параметроводну,вычислениязначениядругихвычисляютсяс помощьюкоэффициентов.зависимойоптимизации.Отказотуниверсальногостековогомеханизмазависимойоптимизации.Отказот универсальногостековогомеханизмаВ некоторыхязыках программированияпрограммисты имеютвозможностьявно ввНапример,последовательностьоператоровопределенныхможетприводитькк значительномуснижениюработыуказывать,какиеслучаяхпеременныеразмещатьна регистрах(в Си++времени– с помощьюопределенныхслучаяхможетследуетприводитьзначительномуснижениювремениработыS=10;for(i=0;i<N;i++)A[i]=i*S;программы,нопараметровчереззависитотдоступныхключевогоregister).Подобныеуказанияимеютдля компиляторовпрограммы,словано передачапередачапараметровчерез регистрырегистрызависитот количестваколичествадоступныхрегистровв вычислительнойии отвв компилятореалгоритмарекомендательныйхарактер, носистемечасто помогаютполучить хорошооптимизированныерегистроввычислительнойсистемеот используемогоиспользуемогокомпилятореалгоритма ихихможетбытьвзамененапоследовательностьюоперацийраспределения.программы.распределения.
ВажностьметодавозможностейS = 10; Tданного= 0; for(i= 0; iЦиклом<постоянно10; i ++) вT =возрастаетTпрограмме+ S, A [i] с=с T;ростомОптимизацияциклов.называетсялюбаяВажностьданногометодапостоянновозрастаетростомвозможностейвычислительнойаппаратуры,метод имеетрядвыраженныхнедостатков. повторно.Во-первых,последовательностьучастковBнопрограммы,может выполнятьсявычислительнойноимееткотораярядвыраженныхВо-первых,приусловии,чтоаппаратуры,значения, методC тожеи limitнепотребоватьизменяютсявнедостатков.теле цикла.При этомВычислениезначенияA[i]можетиндуктивнойпеременной,онсильнозависитотособенностейконкретнойархитектурывычислительноймашины.Циклынеобязательнодолжныоформлятьсяспомощьюоператоровцикла,ичтобыихонсильнозависитотособенностейконкретнойархитектурывычислительноймашины.умножениеB*C будетвыполненотолько одинраз,наа не10, как приводитьв исходномкварианте.таккакизменениезначенияпеременнойцикла1можетизменениюВо-вторых,процедуры,оптимизированныетакимобразом,немогутвключатьсяобнаружить,используетсяуправленияпрограммы.Обычно нециклысодержатвцикловсебе ввВо-вторых,процедуры, графоптимизированныетакимархитектуройобразом,могутвключатьсяДлявычислительныхмашинс векторнойоптимизацияадресаэлементамассиванавеличинуsizeof(A[0]),значит,&A[i]общиепосколькуиспользуютнестандартныйметодполученияодинили библиотеки,болеелинейныхучастков,Например,гдепроизводятсявычисления,поэтомудля них≡общиебиблиотеки,посколькуиспользуютнестандартныйметод архитектурполучениястановитсямашинно-зависимой.длянекоторыхвекторныхA+sizeof(A[0])*i.параметров.В-третьих,использоватьметоднеесливв телефункциимогутприменятьсявсеметодыоптимизацииучастков.Дляоптимизациипараметров.В-третьих,использоватьметодлинейныхне удается,удается,еслителефункцииснижениевременивыполненияпрограммыиногдаможнополучить,не операциипроводяВтехвычислительныхсистемах,вкоторыхвремявыполненияиспользуютсяоперациивычисленияадресовпараметров.цикловразработаныиспециальныеметоды:используютсяоперациивычисленияадресовпараметров.вынесение вычисленийизциклов,а внося их сложения,туда: в такихархитектурахоказываетсяумноженияпревышаетвремявыполненияудаетсядобитьсянемалогоВнекоторыхязыкахпрограммированияпрограммистыимеютвозможностьявноВнекоторыхязыкахпрограммированияпрограммистыимеютвозможностьявноэффективнеепровестиповторныевычисленияспомощьювекторныхрегистров,чем•вынесениеинвариантныхвычисленийизтелацикла,эффекта.Иногдаоказываетсявозможнымотказатьсяотпеременнойцикла,каквуказывать,какиепеременныеследуетразмещатьнарегистрах(вСи++–спомощьюуказывать,какиепеременныеследуетразмещатьнарегистрах(вСи++–спомощьюнарушатьработувекторногоконвейеравыполнениемоперациисоскалярной•заменаоперацийспеременнымицикла,следующемпримере:register).
Подобные указания имеют для компиляторовключевогоключевого словаслова register). Подобные указания имеют для компиляторовпеременной.•слияние,расщеплениеи развертываниециклов. рекомендательныйхарактер,получитьрекомендательныйхарактер,ноN;часточастопомогаютполучитьхорошооптимизированныеS = 10;for(i = 0;i <ноi ++) помогаютR= циклаR + F (S),S = S +хорошо10; на оптимизированныеЗаменаоперацийс переменнымипроизводитсяосновепониманияпрограммы.программы.Вынесениеинвариантныхиз тела цикласводитсяк вынесениюзатого,что с каждымшагом циклавычисленийзначение переменнойцикламеняетсяна один “шагОптимизацияциклов.ЦикломвпрограмменазываетсялюбаяВэтомпримередвеиндуктивныепеременные,нопеременнуюцикламожнопределыциклатехалгоритмыопераций,операндыЦикломкоторыхизменяютсяв процессевыполненияциклов.входепрограмменазываетсялюбаяцикла”.ОптимизацияМногиеустроенытак,что вневычисленийнекоторыевеличиныпоследовательностьучастковпрограммы,котораяможетвыполнятьсяповторно.простоисключить:цикла.Например,цикл участков программы,последовательностьможетповторно.оказываютсяпропорциональныминомеру котораяитерации.При выполнятьсяэтом в программахЦиклынеобязательнодолжныоформлятьсясс помощьюоператоровцикла,ии чтобыихЦиклынеобязательнодолжныоформлятьсяпомощьюоператоровцикла,ихпроизводитсяумножениеэтихвеличиннаM)значениепеременнойцикла.чтобыТакиеS=10;M=S+N*10;while(S<=R=R+F(S),S=S+10;for(i=0;i<limit–2:i++)A[i]=B*C*A[i];обнаружить,используетсяграфуправленияпрограммы.Обычноциклысодержатвсебеобнаружить, используетсяуправления программы.Обычноциклы содержатв себепеременныеназываются графиндуктивными.Все такиепеременныезаменяютсяодинилиболеелинейныхучастков,гдепроизводятсявычисления,поэтомудляодин бытьилиболееучастков,гдеоперацийпроизводятсявычисления,поэтомудля нихнихТакимпреобразованиемза счетвведениядополнительнойпеременнойM удалоськомпиляторомналинейныходну,значениядругихвычисляютсяс помощьюкоэффициентов.можетзамененпоследовательностьюмогутприменятьсявсеметодыоптимизациилинейныхучастков.Дляоптимизациимогут применятьсявсеметодыоптимизацииучастков.
Для оптимизацииисключитьNпоследовательностьоперацийсложениядляпеременнойлинейныхi.Например,операторовD и= Bииразвертывание*специальныеC; k = limit –методы:2; циклов – это два различных варианта цикловразработаныцикловСлияниеразработаныспециальныеметоды:i ++)A [i]=D*i *AS;[i];S = 10;forfor(i (i= =0;двух0;i <i <k:смежныхN;i ++)Aили[i]=преобразований:слияниявложенныхциклов в один и замена цикла•• вынесениевынесение инвариантныхинвариантных вычисленийвычислений изиз телатела цикла,цикла,напоследовательностьопераций(часто линейную).Слияние смежных циклов сможетбытьзамененапоследовательностьюопераций•• заменаоперацийсс переменнымизаменаоперацийпеременными цикла,цикла,независимымивнутреннимиоператорамиS1 и S2 позволяетснизить накладные расходы•• слияние,расщеплениеии развертываниециклов.слияние,расщеплениеразвертываниециклов.46S=10;T=0;for(i=0;i<10;i++)T=T+S,A[i]= T;на организацию циклической работы: ВынесениеинвариантныхвычисленийизтелацикласводитсяквынесениюзаВынесениевычисленийтела циклаиндуктивнойсводится к вынесениюзазначениятоже может изпотребоватьпеременной,forВычисление(iцикла= 0; i тех< n;инвариантныхi ++) { S1 A[i]}операндыпределыопераций,которыхнеизменяютсявпроцессевыполненияпределыцикла тех операций,операнды которыхизменяютсяпроцессетаккак изменениезначения переменнойцикла ненаfor1 может; S2 }(i = 0; iприводить<вn;i ++) {кSвыполнения1изменениюцикла.Например,циклцикла.Например,цикладресаfor (iэлемента= 0; i < n; iмассива++) { S2 }на величину sizeof (A[0]), значит, &A[i] ≡forA+sizeof(A[0])*i.for (i(i == 0;0; ii << limitlimit –– 2:2: ii ++)++) AA [i][i] == BB ** CC ** AA [i];[i];47В тех вычислительных системах, в которых время выполнения операцииможетпоследовательностьюоперацийможет бытьбыть заменензамененпоследовательностьюоперацийумноженияпревышаетвремя выполнениясложения, удается добиться немалогоэффекта.
ИногдаDоказываетсявозможным отказаться от переменной цикла, как вD == BB ** C;C; kk == limitlimit –– 2;2;следующем примере:forfor (i(i == 0;0; ii << k:k: ii ++)++) AA [i][i] == DD ** AA [i];[i];S = 10; for (i = 0; i < N; i ++) R = R + F (S), S = S + 10;В этом примере две индуктивные 46переменные, но переменную цикла можно46просто исключить:S = 10; M = S + N * 10; while (S <= M) R = R + F (S), S = S + 10;распараллеливаниявыполненияопераций:проверокусловий завершенияцикла,а также создать предпосылки для последующегораспараллеливания выполнения операций:следующимПолучая forна (i входfor (i = фазам0; i < n; iкомпиляции.++)= 0; i <исходнуюn; i += 2) программу какпоследовательностьсимволовязыкадолженB i[i]* C [i]; } входного forAn;[i]=B* C [i];для циклов,for(i{ =A0;[i]цикловi <= n;++)(i = 0;(“цепочку”),i{<можноi +=2)[i]компиляторЗаменупоследовательностямиоперацийвыполнятьA[i+1]=B[i+1]*C[i+1];} попроверить,принадлежитлионавходномуязыку,атакжеопределитьправила,{A[i]=B[i]*C[i];}{A[i]=B[i]*C[i];кратность которых известна уже на стадии компиляции.A [i+1]=частоB [i+1]* C [i+1];} цикланакоторымэта последовательностьстроилась.АнализподразделяетсяРасщеплениецикла может оказатьсяполезнымв случаеналичияв телеКажущиеся правильными преобразования не всегда ведут к построениюлексический,синтаксический и семантический анализ.условныхоператоров:Кажущиесяправильнымипреобразованияне всегда ведут к построениюэквивалентнойпрограммы.Например,циклЛексическийанализатор(сканер).Основнаязадача лексического анализатора –эквивалентнойпрограммы.for (i = 0; i <n; i ++) Например, циклif (x < y)просмотреть весь текстисходнойпрограммыивыделитьв немfor (i = 1; i < 100; i ++) { … A = i * B; …} лексемы (минимальные{ if (x < fory) (i {= S1;1;i}< 100; i ++) { … A = i *for(i}= 0; i < n; i ++) { S1; }B;…лексические единицы или элементы текста программы, обладающие смыслом в рамкахelse{ S2;к}виду:}else for (i = 0; i < n; i ++) { S2; }может бытьпреобразованданногоязыка).В обычныхязыках программирования лексемами являютсячисламожет быть преобразован к виду:(десятичныецелые,вещественные),идентификаторы,служебныеслова,разделители.Развертываниеслучаяхуменьшить числоfor цикла(i = 1; iпозволяет< 100; i ++)в {определенных… A = A + B; …}for(i=1;i<100;i++){…A=A+B;…}Задачейлексическогоанализатораявляетсязаменаразнообразныхтекстапроверок условий завершения цикла, а также создать предпосылки дляэлементовпоследующегооднако этопреобразованиебудетправильнымтолько для целочисленныхпеременныхстандартновыглядящимилексемами,которые в дальнейшембудет легче обрабатыватьраспараллеливаниявыполненияопераций:однако это преобразование будет правильным только для целочисленных переменныхAиB.Есливтелециклаиспользованывещественныепеременные,то при ихв других частях компилятора.