Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
161
Добавлен:
10.07.2016
Размер:
2.02 Mб
Скачать

37. Оптимизация циклов.

Оптимизация - это модификация системы для улучшения ее эффективности.

Значительная часть времени при инициализации цикла тратится на инициирование и проверку индекса цикла. Тщательная организация выполнения цикла может сэкономить время. Пример:

for(int i = 0; i < 500; i++) { // инициируется 1 раз, завершается 500 раз

for(int j = 0; j < 5; j++) { // инициируется 500 раз, завершается 2500 раз

foo(); } }

// 501 инициализация

// 3000 завершений

for(int i = 0; i < 5; i++) { // инициируется 1 раз, завершается 5 раз

for(int j = 0; j < 500; j++) { // инициируется 5 раз, завершается 2500 раз

foo(); } }

// 6 инициализация

// 2505 завершений

2.

for(int i = 0; i < 100; i++) {

for(int j = 0; j < 100; j++) {

for(int k = 0; k < 100; k++) {

foo(); } } }

Любая экономия, даже самая малая, внутри внутреннего цикла, в данном случае приводит к экономии в 10^6 раз. Очень малые улучшения внутри внутреннего цикла выгоднее, чем значительное улучшение вне его. Типичными ошибками, влияющими на эффективность, являются повторяющиеся вычисления в циклах. Их нужно выносить из циклов. Данный приём называется исключением инвариантных выражений или чисткой цикла.

3.

FOR I = 1, 1000, 1

A[I] = B[I]

FOR I = 1, 1000, 2

A[I] = B[I]

A[I + 1] = B[I + 1]

4. Сжатие(объединение) циклов

38. Оптимизация условных и логических выражений

Оптимизация - это модификация системы для улучшения ее эффективности.

Оптимизация условных выражений

if (a > b && a > c && b > c) ...

Для оптимизации подобных выражений по возможности нужно располагать условия в порядке возрастания истинности.

if (a > b || a > c || b > c) ...

Для оптимизации подобных выражений по возможности нужно располагать условия в порядке убывания истинности.

Оптимизация операций ввода вывода

Для оптимизации операций ввода/вывода желательно минимизировать их использования (они занимают много времени). Необходимо помнить что магнитные носители предназначенные для хранения больших объемов информации работают значительно медленнее чем Кеш память.

Оптимизация работы с массивами

При работе с массивами нужно помнить, что для увеличения быстродействия там где возможно использовать статического массива, а для экономии памяти динамическое выделение массива. Необходимо помнить, что при работе с массивами индексы должны быть записаны в максимально простой форме, а элементы массива располагаться последовательно. При работе с массивами помните, что в разных языках расположение элементов массива может быть различным по строкам и столбцам.

39. Стратегия оптимизации.

Оптимизация - это модификация системы для улучшения ее эффективности.

Стратегия проведения оптимизации

1. Горячие точки или узкие места программы. Для того, чтобы повысить эффективность оптимизации, необходимо определить, какой фрагмент программного кода потребляет наибольшую часть ресурсов. По статистическим данным, 95% ресурсов потребляется 5% кода. Фрагменты кода, которые потребляют наибольшее количество ресурсов, называют горячими точками программы. Процесс нахождения горячих точек программы называется профилированием программного продукта. Профилирование программных продуктов может проводиться вручную или автоматически при помощи программ-профилировщиков.

2. Необходимость создания эффективной программы решается ешё на этапе системного анализа.

3. Проводится разработка правильного ПО с учётом всех требований разработки рентабельного ПО, в результате чего должно быть создано правильное ПО. При этом при написании программ должны быть учтены основные принципы создания оптимального ПО.

4. В случае недостаточной эффективности программы пропускаем её через оптимизирующий компилятор

5. Если этого недостаточно, пропускаем программу через профилировщик и ищем горячие точки.

6. Максимально оптимизируем горячие участки программы.