Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемАнна Окулова
1 М.Ю. Харламов, ВНУ им. В.Даля, 2010
2 Оптимизация программы Оптимизация программы это обработка, связанная с переупорядочиванием и изменением операций в компилируемой программе с целью получения более эффективной результирующей объектной программы Критерии объем памяти скорость выполнения Виды оптимизирующий преобразований преобразования исходной программы, не зависящие от результирующего объектного языка преобразования результирующей объектной программы Используемые методы оптимизации ни при каких условиях не должны приводить к изменению «смысла» исходной программы! Тема 9. Оптимизация кода 2
3 линейных участков программы; логических выражений; циклов; вызовов процедур и функций; других конструкций входного языка Тема 9. Оптимизация кода 3
4 Линейный участок программы выполняемая по порядку последовательность операций, имеющая один вход и один выход Чаще всего содержит последовательность вычислений, состоящих из арифметических операций и операторов присвоения значений переменным Используются следующие виды оптимизирующих преобразований: удаление бесполезных присваиваний; исключение избыточных вычислений (лишних операций); свертка операций объектного кода; перестановка операций; арифметические преобразования Тема 9. Оптимизация кода 4
5 Удаление бесполезных присваиваний когда переменной присваивается значение, которое нигде не используется Тема 9. Оптимизация кода 5 А := В * С; D := В * С; А := D * С; А := В * С; D := В * С; А := D * С; Р А := В * С; О := Р^ + С; А := D * С; Р А := В * С; О := Р^ + С; А := D * С; Не всегда очевидно бесполезная операция необходимо учитывать операции с адресами памяти, ссылками и вызовом функций !
6 Свертка объектного кода - выполнение во время компиляции тех операции исходной программы, для которых значения операндов уже известны Варианты свертки – выполнений операций, операндами которых являются … константы значения которые могут быть известны в результате выполнения предшествующих операций Тема 9. Оптимизация кода 6 I := 1 + 1; I := 3; J := 6*I + I; I := 1 + 1; I := 3; J := 6*I + I; 1. + (1, 1) 2. := (I, ^1) 3. := (I, 3) 4. * (6, I) 5. + (^4, 1) 6. := (J, ^5) 1. + (1, 1) 2. := (I, ^1) 3. := (I, 3) 4. * (6, I) 5. + (^4, 1) 6. := (J, ^5) 1. := (I, 2) 2. := (I, 3) 3. := (J, 21) 1. := (I, 2) 2. := (I, 3) 3. := (J, 21) Исходная программа Результат свертки Внутреннее представление
7 Исключение лишних операций заключается в нахождении и удалении из объектного кода операций, которые повторно обрабатывают одни и те же операнды Операция линейного участка с порядковым номером i считается лишней, если существует идентичная ей операция с порядковым номером j, j
8 Перестановка операций заключается в изменении порядка следования операций, которое может повысить эффективность программы, но не будет влиять на конечный результат вычислений Арифметические преобразования представляют собой выполнение изменения характера и порядка следования операций на основании известных алгебраических и логических тождеств замена возведения в степень на умножение замена целочисленного умножения на константы кратные 2, на выполнение операций сдвига Тема 9. Оптимизация кода 8 А := 2*B*3* С; А := (2 * 3) * (В * С); А := (В + С) + (D + Е); А := В + (С + (D + Е)); А := В * С + В * D; А := В * (С + D);
9 Операция называется предопределенной для некоторого значения операнда, если ее результат зависит только от этого операнда и остается неизменным (инвариантным) относительно значений других операндов операция логического сложения (or) является предопределенной для логического значения «истина» (true) операция логического умножения (and) - предопределена для логического значения «ложь» (false) Компиляторы строят объектный код вычисления логических выражений таким образом, что вычисление выражения прекращается сразу же, как только его зна чение становится предопределенным Тема 9. Оптимизация кода 9 A or F(В) or G(C) Если A = true, то F и G могут быть не вызваны
10 Обычно параметры в процедуры и функции передаются через стек Методы повышения эффективности: передача параметров через регистры процессора; подстановка кода функции в вызывающий объектный код ( в c++ inline) Тема 9. Оптимизация кода 10
11 Вынесение инвариантных вычислений из циклов Тема 9. Оптимизация кода 11 for i:=1 to 10 do A[i] := B * С * A[i]; for i:=1 to 10 do A[i] := B * С * A[i]; D := В * С; for i:=1 to 10 do A[i] := D * A[i]; D := В * С; for i:=1 to 10 do A[i] := D * A[i]; Замена операций с индуктивными переменными Значения индуктивной переменной в процессе выполнения цикла образуют арифметическую профессию S := 10; for i:=1 to N do A[i] := i*S; S := 10; for i:=1 to N do A[i] := i*S; S := 10; Т := S; i :=1; while i <= 10 do begin A[i] := T; T := T+ 10; i := i + 1; end; S := 10; Т := S; i :=1; while i <= 10 do begin A[i] := T; T := T+ 10; i := i + 1; end;
12 Слияние и развертывание циклов Слияние циклов Тема 9. Оптимизация кода 12 for i:=l to N do for j:=1 to M do A[i.j] := 0; for i:=l to N do for j:=1 to M do A[i.j] := 0; К := N*M: for i:=1 to К do A[i] := 0; К := N*M: for i:=1 to К do A[i] := 0; Развертывание циклов for i:=1 to 3 do A[i] := i; for i:=1 to 3 do A[i] := i; А[1] :=1; А[2] := 2; А[3] := 3;
13 Ориентированы на конкретную архитектуру целевой вычислительной системы, на которой будет выполняться ре зультирующая программа ! Существует большое количество методов оптимизации для тех или иных архитектур вычислительных систем распределение регистров процессора порождение кода для параллельных вычислений … Тема 9. Оптимизация кода 13
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.