Эта книга содержит практические рецепты, позволяющие разработчикам увеличить производительность приложений на платформе Intel. На простых примерах ведущие эксперты компании Intel объясняют читателю, как правильно строить алгоритмы, управлять распределением памяти, прогнозировать ветвление, использовать SIMD-инструкции и многопоточность, производить вычисления с плавающей точкой и многое другое. Книга будет интересна всем разработчикам, желающим освоить передовые технологии и улучшить качество кода.
Название: Оптимизация ПО. Сборник рецептов Автор: Гербер Р., Бик А., Смит К., Тиан К. Издательство: Питер Год: 2010 Страниц: 348 Формат: DJVU Размер: 23,6 МБ ISBN: 978-5-388-00131-3 Качество: Отличное Серия или Выпуск: Библиотека программиста
Содержание:
Предисловие Благодарности Помощь читателей От издателя перевода Часть I. ИНСТРУМЕНТЫ И КОНЦЕПЦИИ ПОВЫШЕНИЯ ПРОИЗВОДИТЕЛЬНОСТИ Глава 1. Введение Оптимизация программного обеспечения Заблуждения относительно оптимизации Процесс оптимизации программного обеспечения Основные моменты Глава 2. Тест производительности Атрибуты теста производительности Воспроизводимость (обязательный атрибут) Репрезентативность (обязательный атрибут) Простота применения (обязательный атрибут) Проверяемость (обязательный атрибут) Измерение прошедшего времени (желательный атрибут) Полнота охвата (в зависимости от ситуации) Точность (в зависимости от ситуации) Примеры тестов производительности Основные моменты Глава 3. Инструменты повышения производительности Механизмы отсчета времени Оптимизирующие компиляторы Использование компиляторов C++ и Fortran производства Intel Оптимизация для конкретных процессоров Написание функций для конкретного процессора Другие варианты оптимизации компиляторов Типы программных профилировщиков Монитор производительности производства Microsoft Анализатор производительности VTune™ Выборка Граф вызовов Профилировщик codecov компилятора Intel Профилировщик Microsoft Visual C++ Выборка или инструментовка Пробы и ошибки, здравый смысл и терпение Основные моменты Глава 4. Горячие точки Причины появления горячих и холодных точек Больше, чем просто время Равномерное выполнение без горячих точек Основные моменты Глава 5. Архитектура процессоров Функциональные блоки Два чизбургера, пожалуйста! Выборка и декодирование команд Выполнение команд Удаление Регистры и память Основные моменты Часть II. ПРОБЛЕМЫ ПРОИЗВОДИТЕЛЬНОСТИ Глава 6. Алгоритмы Вычислительная сложность Выбор команд Зависимость по данным и параллелизм команд Требования к памяти Параллельные алгоритмы Универсальность алгоритмов Выявление алгоритмических проблем Основные моменты Глава 7. Переходы Поиск критичных переходов среди неверно предсказываемых Шаг 1. Поиск неверно предсказываемых переходов Шаг 2. Поиск горячих точек потери времени Шаг 3. Определение процента неверно предсказываемых переходов Окончательная проверка готовности Различные типы переходов Предсказуемость переходов Удаление переходов с помощью команды CMOV Удаление переходов с помощью масок Удаление переходов с помощью команд min/max Удаление переходов за счет дополнительной работы Основные моменты Глава 8. Память Основы оптимизации памяти Основная и виртуальная память. Кэши процессора Механизм кэширования Аппаратная предвыборка Программная предвыборка Запись данных без использования кэшей - прямая запись Проблемы памяти, влияющие на производительность Принудительная загрузка кэша Загрузка из-за недостаточной емкости кэша Загрузка из-за конфликтов кэша Эффективность кэша Опережающая запись Выравнивание данных Компиляторы и выравнивание данных Программная предвыборка Выявление проблем памяти Поиск случаев отсутствия страниц Поиск проблем опережающей записи Поиск промахов кэша уровня 1 Потенциальные улучшения Решение проблем памяти Основные моменты Глава 9. Циклы Зависимости по данным Расщепление и слияние циклов Чистка циклов Развертывание циклов и свертывание развернутых циклов Перестановка циклов Вычисления инвариантов цикла Инвариантные относительно цикла переходы Инвариантные относительно цикла результаты Основные моменты Глава 10. Медленные операции Медленные команды Справочные таблицы Системные вызовы Простой системы Основные моменты Глава 11. Операции с плавающей точкой Числовые исключения Сброс в нуль и приравнивание денормализованных чисел нулю Точность Упакованный и скалярный режимы Преобразование значения с плавающей точкой в целое, округление. Функции округления Тонкости обработки чисел с плавающей точкой Преобразование значения с плавающей точкой в целое Извлечение квадратного корня Получение обратного значения от квадратного корня Основные моменты Глава 12. Технология SIMD Знакомство с технологией SIMD Технология ММХ™ Потоковые SIMD-расширения Использование технологии SIMD Автоматическая векторизация Библиотеки классов C++ Внутренние команды компилятора Подставляемый ассемблер Достоинства и недостатки четырех вариантов использования технологии SIMD Соображения по поводу технологии SIMD Где имеет смысл использовать технологию SIMD Выравнивание памяти Организация данных Выбор подходящего упакованного типа данных Совместимость вычислений с помощью SIMD-команд и команд FPU-блока х87 Основные моменты Глава 13. Автоматическая векторизация Параметры компиляторов для векторизации Наиболее часто используемые параметры компиляторов Пример использования параметров компилятора Подсказки компилятору для векторизации. Часто используемые подсказки компилятору Примеры подсказок компилятору Советы относительно векторизации Соображения по разработке и реализации Использование диагностических сообщений при векторизации Минимизация возможных эффектов совпадения имен и побочных эффектов векторизации Стиль программирования Целевые архитектуры Основные моменты Глава 14. Специфические для процессоров варианты оптимизации 32-разрядные архитектуры Intel Процессор Pentium M Кэш команд уровня 1 Декодирование команд Латентность команд Набор команд Управляющий регистр для операций с плавающей точкой Регистр состояния MXCSR Кэш данных уровня 1 Предвыборка памяти События процессора Частичный останов регистров Частичный останов регистра флагов Основные моменты Глава 15. Основы многопроцессорной обработки Параллельное программирование Управление программными потоками Высокоуровневая поточная обработка средствами OpenMP Низкоуровневая поточная обработка Многопоточные задания Проблемы многопоточносги Поточные компиляторы и инструменты Основные моменты Глава 16. Реализация многопоточносги средствами OpenMP Ключевые элементы спецификации OpenMP Многопоточная модель выполнения Модель памяти в OpenMP Ограничения OpenMP Компиляция OpenMP-программ Автоматический параллелизм Рекомендации по многопоточной обработке Основные моменты Глава 17. Очередь заданий и другие сложные темы Очередь заданий - расширение Intel для OpenMP Модель очереди заданий Конструкции tasq и task Конкретный пример поточной обработки в программе n ферзей Конвейерный параллелизм на уровне потоков Вложенный параллелизм Многоуровневый параллелизм Понятие привязки программных потоков Понятие планирования циклов Основные моменты Часть III. РАЗРАБОТКА И ОПТИМИЗАЦИЯ ПРИЛОЖЕНИЙ Глава 18. Конкретный пример поточной обработки в видеокодеке Исходная производительность кодировщика Н.264 Реализация параллелизма в кодировщике Н.264 Декомпозиция по заданиям и по данным Параллелизм на уровне слоев Параллелизм на уровне кадров Реализация с использованием двух очередей слоев Реализация с использованием очереди заданий Производительность Компромисс между повышенной скоростью и эффективным сжатием Производительность на многопроцессорных системах с поддержкой гиперпоточности Исследование производительности Издержки многопоточности Дальнейшая настройка производительности Выводы относительно поточной обработки Основные моменты Глава 19. Разработка с прицелом на производительность Перемещение данных Память и параллелизм Эксперименты Алгоритмы Основные моменты Глава 20. Сводим все вместе - базовые варианты оптимизации Легкодоступные варианты оптимизации Приложение Ход оптимизации Тест производительности Интерпретация результатов теста производительности Улучшение преобразования чисел с плавающей точкой в длинные целые Реализация параллелизма в алгоритме Автоматическая векторизация Реализация параллелизма на уровне команд при помощи внутренних команд компилятора Сводка вариантов оптимизации Основные моменты Глава 21. Сводим все вместе - последние десять процентов Скорость «света» Повышение эффективности SIMD-команд Последняя оптимизация Выводы относительно вариантов оптимизации Основные моменты Литература Книги и статьи Интернет-ресурсы Алфавитный указатель