Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Розвантаження ділянок повторюваності
Таку назву одержав спосіб оптимізації, що полягає в винесенні обчислень з багаторазово проведених (що виконуються) ділянок програми на ділянки програми, рідко прохідні. До цього виду перетворень відносяться різні чищення зон, тіл циклів і тіл рекурсивних процедур, коли інваріантні (по результаті виконання) у відповідних ділянках повторюваності виразу, лінійні компоненти (тобто гамаки,, що виконуються обов'язково при кожнім проходженні ділянки повторюваності) виносяться з нього і розміщаються перед входом у ділянку повторюваності - чищення нагору,- чи коли нищівні свої попередні результати лінійні чи компоненти групи лінійних компонент ділянки повторюваності виносяться з нього і розміщаються за виходи з ділянки повторюваності - чищення вниз. При чищенні нагору винесені обчислення утворять новий безпосередній обов'язковий попередник ділянки повторюваності, а при чищенні вниз - безпосередній обов'язковий спадкоємець ділянки повторюваності. Звичайно виносяться тільки такі вирази і лінійні фрагменти програми, що обов'язково виповнюються при кожнім проходженні ділянки повторюваності, що розвантажується. Приклади. а) Чищення вниз перетворить цикл for K:=1 to 100 do begin X:=X*K; if Z>0 then Y:=sin(X) else A[I]:=X+2; end до виду: for K:=1 to 100 do X:=X*K; if Z>0 then Y:=sin(X); else A[I]:=X+2;
б) Чищення нагору перетворить цикл for K:=1 to 100 do begin if Z>0 then Y:=1 else Y:=Z+2; X[K]:=X[K]-Y; end до виду if Z>0 then Y:=1 else Y:=Z+2; for K:=1 to 100 do X[K]:=X[K]-Y;
Прикладом чищення тіла рекурсивної функції може бути наступний: тіло рекурсивної функції ціла функція Ф(N) begin цілі Z,W; W:=1; if X>0 then W:=Y; if N<=0 then Ф:=1 else begin Z:=N-W; Ф:=Z*Ф(Z) end end де міститься два інваріантних гамаки, у результаті винесення яких може бути отримана наступна функція: ціла функція Ф(N) begin var N:integer; ціла функція F(M) begin var Z:integer; if M<=0 then F:=1; else begin Z:=M-W; F:=Z*F(Z) end end W:=1; if X>0 then W:=Y; Ф:=F(N); end; У групу розвантаження ділянок повторюваності також входять і різні перетворення, що здійснюють переміщення гамака по шляху, що веде до місця використання його результатів. При такім перетворенні на відміну від чищень гамак залишається в тих же зонах, циклах і процедурах Наприклад, за допомогою цих перетворень фрагмент for K:=1 then begin if N>0 то перехід на L;
N:=N*N; L: if Z=0 then write(N); end N:=100;
може бути перетворений до виду: for K:=1 to 100 do if Z=0 then begin N:=A[K]; if N>0 then goto L; N:=N*N; L: write(N); end; N:=100; Скорочення глибини операції
Скорочення глибини операції - процедура виносу за межі циклу операторів, аргументи яких є функціями рекурсивно означених змінних, і заміна їх усередині циклу простими рекурсивними операторами присвоювання, аргументи яких не залежать від інших змінних. Зміст цієї операції в тім, що вона дозволяє виносити з циклу навіть ті оператори, операнди яких залежать від керівної змінної циклу. На відміну від зсуву інваріантних операторів при скороченні глибини операції оператори, що зрушуються, заміняються більш простими і швидше виконуваними операторами Наведемо приклад скорочення глибини операції стосовно оператора t4:=K*10+I з n-го блоку:
n-й блок L:t4:=K*10+I t5:=t6+K z(t2):=z(t2)+x(t4)+y(t5) K:=K+1 перехід на L
у результаті виконання цієї операції оператор t4:=K*10+I зсувається в (n-1)-й блок, а в n-му блоці він заміняється оператором t4:=t4+10: (n-1)-й блок ... t4:=K*10+I n-й блок L: z(t2):=z(t2)+x(t4)+y(t5) K:=K+1 t4:=t4+10 t5:=t6+K перехід на L
Спрощення дій
Цей спосіб оптимізації орієнтований на поліпшення програми за рахунок заміни груп обчислень (як правило, віддалених одна від одної) на групу обчислень, що дають той же результат з погляду всієї програми, але мають меншу складність Видалення індуктивних змінних і виразів Ряд перетворень цього типу пов'язаний з так називаними індуктивними (чи лінійно-рекурсивними) обчисленнями в ділянці повторюваності програми, тобто тими, значення яких регулярно змінюються від повторення до повторення.) Такими перетвореннями є видалення індуктивних змінних, що означає заміну кількох індуктивних змінних циклу однієї індуктивною змінною, а також видалення індуктивних виразів з циклу Наприклад, застосування зазначених перетворень перетворить фрагмент for I:=1 to 99 do begin K:=I+J; A[K]:= A[K]+1 end; K:=10; у фрагмент I:=1; for K:=I+J to 99+J do begin A[K]:= A[K]+1 end; K:=10; Тут I,K - індуктивні змінні. У даному випадку з циклу видалений індуктивний вираз K:=I+J. Заміна складних операцій на більш прості
Дуже важливим перетворенням з цієї групи є зниження сили операцій, що заміняє в індуктивних обчисленнях складні операції на більш прості; наприклад, піднесення до степеня або ділення заміняється множенням (наприклад, вираз Х/4.0 заміняється на вираз Х* О.25), а множення - додаванням Наприклад, застосування цього перетворення дозволяє переходити від циклу for K:=1 to 100 do V:=(K-1)*N+I до більш ефективно працюючого фрагмента: V:=I; for K:=1 to 100 do begin A[V]:=A[V]+1; V:=V+N end Заміна складних операцій на більш прості не завжди приводить до оптимізації, насправді це може навіть привести до уповільнення, наприклад для програм з циклами, що складаються з кількох частин, з яких лише деякі виконуються на кожному кроці циклу.
Виключення надлишкових виразів
У групу перетворень по спрощенню дій входять також виключення надлишкових (зайвих) виразів. Воно полягає в заміні входжень виразів на змінну, значення якої збігається зі значенням виразу. Наприклад, ця операція здійснює перехід від фрагмента if B>0 then begin A:=A+2; X:=A*B+C end else Y:=A*B+D; Z:= A*B; до фрагмента if B>0 then begin A:=A+2; W:=A*B; X:=W+C end else begin W:=A*B; Y:=W+D end; Z=W;
Інші перетворення
У цю же групу входить економія загальних підвиразів, що заміняє, наприклад, оператор: X:=(A+B)*(A+B+C)/(A+B+E) на фрагмент Y:=A+B; X:=Y*(Y+C)/(Y+E), а також такі перетворення, як втягування обчислення параметрів у процедуру, спрощення підстановки параметра-масиву, перебудови умовних операторів (типу заміни оператора, якщо X>0 && Y<2 то Z:=1 на оператор, якщо X>0 то початок якщо Y<2 то Z:=1 кінець), видалення копіювань (зокрема, тих, що заміняють пересилання значень масиву на пересилання його вказівника), інші різні способи перебудови структури інформаційних об'єктів у залежності від характеру їх використання і з метою скорочення часу роботи з об'єктами; різні способи реалізації змінних через швидкі регістри, заміна рекурсії на цикли Інші оптимізуючі перетворення, що спрощують дії,- це перетворення по об'єднанню і по розчленовуванню циклів, по перестановці заголовків циклов
Реалізація дій Це спосіб підвищення якості програми за рахунок виконання певних обчислень на етапі трансляції. Набір перетворень даного типу містить у собі наступні оптимізації: · константні дії (підстановка або згортання констант), коли відбувається виконання операцій над константами; · розпроцедурення - відкрита підстановка тіла процедури на місце її виклику; · ліквідація константних розпізнавачів - заміна умовного оператора на одну з його гілок, якщо його умовний вираз має константне значення.
Реалізація дій здійснюється також при: · утягуванні констант, коли вирази, що мають тотожно константні значення, заміняються на ці значення; · при аналітичних перетвореннях (наприклад, що заміняють Е*1 на Е чи 0*Е на 0, де Е - довільне підвираз); · ототожненні (чи втягуванні унікальних), що видаляє з програми оператор-пересилання виду X:=Y, де X і Y - змінні, заміняючи або входження X на Y · утягування нагору (назад) - наприклад, фрагмент Y:=F(W); X:=Y; заміняється на X:=F(W), або входження Y на X - утягування вниз (уперед) - наприклад, X:=Y; якщо Z>0 те W:=Y+1 інакше W:=Y+2 заміняється на фрагмент якщо Z>0 те W:=X+1 інакше W:=X+2. Підстановка (згортання)
Операції, операнди яких відомі під час компіляції, немає необхідності виконувати під час обрахунку. Підстановка (згортання) - це заміна змінної або mi-ідентифікатора результату заданою чи обчисленою константою, причому ця заміна провадиться під час трансляції, а не в процесі розв'язання. Згортання головним чином застосовуються до арифметичних операторів +,-,*,/, тому що вони найбільше часто використовуються у вихідній програмі Чищення програми Даний спосіб підвищує якість програми за рахунок видалення з її непотрібних об'єктів і конструкцій Набір перетворень цього типу містить у собі наступні оптимізації: · видалення ідентичних операторів; · видалення з програми операторів, недосяжних по управлінню від початкового; · видалення перетворювачів, що інформаційно не впливають на інші оператори; · видалення несуттєвих операторів, тобто операторів, що не впливають на результат програми; · видалення непродуктивних операторів, тобто операторів, що обчислюють так називані мертві у цьому операторі змінні (змінна жива, чи зайнята у деяк точках програм, якщо з цієї точки існує шлях до якогось використання цієї змінної, що не має операторів, що задають їй нове значення; якщо такий шлях не існує, то змінна називається мертвою, чи вільною у цій точці); · видалення процедур, до яких немає звертань; · видалення невикористовуваних змінних, видів, операцій і т. д.
|
|||||||
Последнее изменение этой страницы: 2016-04-23; просмотров: 275; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.134.102.182 (0.02 с.) |