Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

l8_nc

.pdf
Скачиваний:
13
Добавлен:
19.04.2015
Размер:
732.67 Кб
Скачать

Техническая поддержка программных решений 8/10 Решение проблем с производительностью

Кузиков Б.О., СумГУ, 2014

© 2013 NetCracker Technology Corporation Confidential

План лекции

Всегда ли проблемы производительности – проблемы?

Что такое оптимизация

От чего страдает оптимальность кода

Доводы против оптимизации

Нужна ли оптимизация

Технические подробности

Методы оптимизации

Как писать эффективный код

© 2013 NetCracker Technology Corporation Confidential

2

Во имя эффективности (при этом часто без достижения желаемого результата) совершается больше преступлений, чем в силу любых других причин, включая элементарную глупость

(Wulf, 72)

© 2013 NetCracker Technology Corporation Confidential

3

Что такое оптимизация?

Увеличение скорости выполнения программы

Уменьшение размера исполняемого модуля

Совершенствование качества кода

Повышение точности результатов

Сокращение времени запуска

Увеличение производительности обработки данных (не обязательно связанное с ростом скорости выполнения)

Уменьшение расходов на хранение данных (например, уменьшение размера базы данных)

© 2013 NetCracker Technology Corporation Confidential

4

Факторы определяющие эффективность кода

Эффективность кода определяется рядом факторов, в число которых входят:

Платформа, на которой исполняется код

Конфигурация установленного продукта

Решения по архитектуре программного пакета

Конструкция модулей на нижнем уровне

Исторические ограничения (например, необходимость взаимодействия со старыми частями системы)

Качество каждой строки исходного кода

© 2013 NetCracker Technology Corporation Confidential

5

Быстрый vs Рабочий

Корректность кода гораздо важнее его скорости. Что толку быстро получить результат, если он неверный!

Оптимизируйте только тогда, когда код уже готов.

© 2013 NetCracker Technology Corporation Confidential

6

От чего страдает оптимальность кода?

Сложность – Чем больше работы должен сделать код, тем медленнее он будет выполняться. (делай ровно столько, сколько нужно)

Косвенность – более общее решение может работать быстрее. Ингода.

Повторение – Повторение обязательно снижает эффективность кода, но часто его можно избежать.(кеширование)

Плохой проект – Это неизбежно: плохое проектирование приводит к плохому коду.

Ввод/вывод – Взаимодействие программы с внешним миром – ее ввод и вывод

–это известное узкое место.

© 2013 NetCracker Technology Corporation Confidential

7

Доводы против оптимизации

Потеря легкости чтения кода

Очень редко оптимизированный код читается так же легко, как его более медленный аналог.

Рост сложности

Более изобретательная реализация, в которой могут применяться особые тайные средства (увеличивающие взаимозависимость модулей) или специфичные для платформы методы, увеличивает сложность. Сложность – враг хорошего кода.

Сложность сопровождения/расширения

Вследствие возросшей сложности и трудности чтения сопровождение кода затрудняется. Оптимизация ведет к появлению опасного кода. Оптимизация часто основывается на дополнительных допущениях, ограничивая общность и возможности дальнейшего роста.

Появление конфликтов

Часто оптимизация базируется на особенностях платформы. Определенные операции становятся быстрее на одной платформе, но не затрагивают другие. Выбор оптимальных типов данных для одного процессора может привести к замедлению работы на других.

Дополнительные затраты

Оптимизация – это лишний труд. Спасибо, у нас и так достаточно забот. Если код работает правильно, мы должны обратить свое внимание на более насущные проблемы.

© 2013 NetCracker Technology Corporation Confidential

8

Альтернативы

Нельзя ли смириться с существующим уровнем производительности – действительно ли он настолько вас не удовлетворяет?

Запустите программу на более быстрой машине.

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

Выполняйте медленный код асинхронно, в фоновом режиме.

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

Проектируйте системы так, чтобы они не требовали вмешательства оператора, и тогда никто не обратит внимания на скорость выполнения.

Попробуйте применить другой компилятор с более агрессивной оптимизацией либо нацельте свой код на специализированную версию процессора (со всеми дополнительными командами и расширениями), чтобы выжать из него максимальную производительность

© 2013 NetCracker Technology Corporation Confidential

9

Нужна ли оптимизация?

Программирование игр всегда требует высокой эффективности кода.

Программирование цифровой обработки сигналов (DSP) в высшей степени зависит от высокой производительности. Цифровые процессоры сигналов – это специальные устройства, оптимизированные для быстрой цифровой фильтрации больших объемов данных. Без высокой скорости они были бы никому не нужны. (Оптимизация компилятором здесь не работает )

Среды с ограниченными ресурсами, например встраиваемые платформы, могут иметь трудности с достижением приемлемой производительности на имеющейся аппаратуре.

Системы реального времени требуют своевременного выполнения и возможности завершения операций в течение заданного временного интервала.

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

© 2013 NetCracker Technology Corporation Confidential

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]