Об авторах | 13 |
|
Предисловие | 16 |
Целевая аудитория | 16 |
Об этой книге | 17 |
Продукты для разработки программного обеспечения компании Intel | 18 |
Благодарности | 19 |
От издателя перевода | 20 |
|
Глава 1. Введение в многоядерную архитектуру | 21 |
|
Мотивация параллельности в программах | 22 |
Платформы параллельных вычислений | 24 |
Параллельные вычисления в микропроцессорах | 26 |
Разница между многоядерной архитектурой и технологией |
гиперпоточности | 29 |
Многопоточность на одноядерных и многоядерных платформах | 31 |
Понятие производительности | 33 |
Закон Амдала | 33 |
Рост возвращается — закон Густавсона | 37 |
Основные моменты | 38 |
|
Глава 2. Обзор систем поточной обработки | 39 |
|
Определение программных потоков | 40 |
Системный взгляд на программные потоки | 40 |
Потоки вне операционной системы | 41 |
Потоки внутри операционной системы | 43 |
Потоки внутри аппаратной части | 47 |
Что происходит при создании потока | 48 |
Модели прикладного программирования и поточная обработка | 50 |
Виртуальная среда: виртуальные машины и платформы | 50 |
Виртуализация на стадии выполнения | 50 |
Виртуализация систем | 50 |
Основные моменты | 53 |
|
Глава 3. Фундаментальные концепции параллельного программирования | 54 |
|
Разработка с ориентацией на потоки | 54 |
Декомпозиция по заданиям | 55 |
Декомпозиция по данным | 56 |
Декомпозиция по информационным потокам | 56 |
Следствия различных форм декомпозиции | 58 |
Основные проблемы | 58 |
Эталоны параллельного программирования | 59 |
Исходная проблема — стохастическое выравнивание | 61 |
Анализ алгоритма стохастического выравнивания | 63 |
Альтернативный подход — параллельное стохастическое выравнивание | 64 |
Другие альтернативы | 65 |
Основные моменты | 67 |
|
Глава 4. Поточная обработка и конструкции параллельного |
программирования | 68 |
|
Синхронизация | 68 |
Критические секции | 70 |
Мёртвая блокировка | 71 |
Примитивы синхронизации | 72 |
Семафоры | 73 |
Блокировки | 75 |
Условные переменные | 78 |
Сообщения | 80 |
Концепции управления потоками | 82 |
Ограждение | 82 |
Барьер | 83 |
Зависящие от реализации свойства потоков | 83 |
Основные моменты | 84 |
|
Глава 5. API поточной обработки | 85 |
|
API поточной обработки для Microsoft Windows | 85 |
API поточной обработки — Win32/MFC | 85 |
API поточной обработки для Microsoft .NET Framework | 112 |
Создание потоков | 112 |
Управление потоками | 115 |
Пулы потоков | 117 |
Синхронизация потоков | 121 |
POSIX-потоки | 123 |
Создание потоков | 124 |
Управление потоками | 125 |
Синхронизация потоков | 126 |
Сигнализация | 127 |
Компиляция и компоновка | 134 |
Основные моменты | 134 |
|
Глава 6. ОрепМР — переносимое решение для поточной обработки | 135 |
|
Проблемы поточной обработки цикла | 137 |
Зависимости циклов | 137 |
Условия гонок | 140 |
Управление общими и приватными данными | 140 |
Планирование и разбиение циклов | 142 |
Эффективное использование редукций | 146 |
Минимизация издержек многопоточносги | 148 |
Секции разделения работы | 150 |
Программирование с прицелом на производительность | 150 |
Конструкции barrier и nowait | 151 |
Чередование однопоточного и многопоточного выполнения | 152 |
Загрузка и выгрузка данных | 153 |
Защита обновлений общих переменных | 155 |
Расширение Intel Taskqueuing для ОрепМР | 157 |
Библиотечные функции ОрепМР | 159 |
Переменные среды в ОрепМР | 160 |
Компиляция | 161 |
Отладка | 162 |
Производительность | 164 |
Основные моменты | 165 |
|
Глава 7. Решение распространённых проблем параллельного |
программирования | 167 |
|
Слишком много потоков | 167 |
Гонки, мёртвые и живые блокировки | 170 |
Мёртвая блокировка | 173 |
Высококонфликтные блокировки | 176 |
Инверсия приоритета | 176 |
Решения для высококонфликтных блокировок | 178 |
Неблокирующие алгоритмы | 180 |
Проблема ABA | 182 |
Попеременное считывание строки кэша | 184 |
Проблема восстановления памяти | 184 |
Рекомендации | 184 |
Безопасные в отношении потоков функции и библиотеки | 185 |
Проблемы памяти | 187 |
Ширина полосы пропускания | 187 |
Работа с кэшем | 188 |
Конфликты памяти | 190 |
Проблемы кэша | 193 |
Ложное разделение | 193 |
Согласованность памяти | 196 |
Современная архитектура IA-32 | 197 |
Архитектура Itanium | 199 |
Языки высокого уровня | 202 |
Предотвращение остановок конвейера на архитектуре IA-32 | 203 |
Организация данных для достижения высокой производительности | 204 |
Основные моменты | 205 |
|
Глава 8. Приёмы многопоточной отладки | 206 |
|
Общие приёмы отладки | 206 |
Разработка с учётом отладки | 206 |
Расширение вашего приложения — использование буферов трассировки | 209 |
Отладка многопоточных приложений в Windows | 214 |
Окно потоков | 214 |
Точки отслеживания | 214 |
Фильтры точек прерывания | 215 |
Присваивание имён потокам | 216 |
Сводим всё вместе | 217 |
Многопоточная отладка с использованием GDB | 221 |
Уведомление о создании потоков | 221 |
Получение списка всех потоков приложения | 221 |
Установка специфичных для потока точек прерывания | 222 |
Переключение между потоками | 223 |
Применение команд к группе потоков | 223 |
Основные моменты | 224 |
|
Глава 9. Основы архитектуры одноядерных процессоров | 225 |
|
Основы архитектуры процессоров | 225 |
Сравнение суперскалярной архитектуры и архитектуры EPIC | 232 |
Основные моменты | 233 |
|
Глава 10. Поточная обработка на многоядерных процессорах |
производства Intel | 235 |
|
Поточная обработка с позиции аппаратуры | 235 |
Поточная обработка от Intel | 239 |
Технология гиперпоточности | 240 |
Разница между многопроцессорностью и гиперпоточностью | 241 |
Архитектура гиперпоточности | 242 |
Многоядерные процессоры | 245 |
Архитектурные подробности | 245 |
Сравнение многопроцессорных и многоядерных систем | 248 |
Многоядерность для архитектуры Itanium | 249 |
Взаимодействие нескольких процессоров | 254 |
Обмен информацией между процессорами и многопоточное |
программирование | 254 |
Потребление энергии | 256 |
Показатели потребления энергии | 256 |
Снижение потребления энергии | 258 |
Что последует за многоядерной процессорной архитектурой? | 259 |
Основные моменты | 261 |
|
Глава 11. Продукты Intel для разработки программного обеспечения | 262 |
|
Обзор | 262 |
Исследования | 262 |
Создание | 263 |
Отладка | 263 |
Настройка | 264 |
Контролер потоков Intel Thread Checker | 264 |
Как это работает | 265 |
Советы по применению | 266 |
Использование контролера потоков с ОрепМР | 267 |
Компиляторы производства Intel | 268 |
ОрепМР | 268 |
Спекулятивные предварительные вычисления в программе | 272 |
Оптимизация компилятора и кэша | 272 |
Отладчик Intel Debugger | 273 |
Библиотеки производства Intel | 274 |
Библиотека математического ядра | 275 |
Встроенные примитивы производительности | 275 |
Проблемы параллельных программ при использовании параллельных |
библиотек | 276 |
Что дальше | 277 |
Блоки построения многопоточности от Intel | 277 |
Анализатор производительности Intel VTune | 277 |
Поиск узких мест | 278 |
Использование диаграммы вызовов для поиска точки создания |
потока | 279 |
Проверка баланса нагрузки | 279 |
Профилировщик потоков Intel Thread Profiler | 280 |
MPI-программирование | 281 |
Поддержка MPI компанией Intel | 283 |
Программа Intel Trace Analyzer and Collector | 283 |
Основные моменты | 285 |
|
Словарь терминов | 287 |
|
Список литературы | 301 |
Книги и статьи | 301 |
Интернет-ресурсы | 304 |
|
Алфавитный указатель | 305 |