На сегодняшний день системы, построенные на основе многоядерной архитектуры, набирают все большую популярность. Эта книга поможет разработчикам программного обеспечения, используя многопоточность, создать высокопроизводительные приложения на основе многоядерной архитектуры Intel. Книга позволяет читателю на практике освоить основы параллельного программирования, программирование с использованием API, интерфейс OpenMP, решение наиболее распространенных задач параллельного программирования; отладку и тестирование многопоточных приложений; инструменты разработки приложений. Книга содержит множество примеров исходного кода, позволяющих читателю быстро, на практике опробовать тот или иной описываемый метод. Издание рассчитано на разработчиков ПО и студентов, изучающих многоядерную архитектуру.
Содержание книги "Многоядерное программирование"
Об авторах
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. OpenMP - переносимое решение для поточной обработки 135
Проблемы поточной обработки цикла
137
Зависимости циклов
137
Условия гонок
140
Управление общими и приватными данными
140
Планирование и разбиение циклов
142
Эффективное использование редукций
146
Минимизация издержек многопоточности
148
Секции разделения работы
150
Программирование с прицелом на производительность
150
Конструкции barrier и nowait
151
Чередование однопоточного и многопоточного выполнения
152
Загрузка и выгрузка данных
153
Защита обновлений общих переменных
155
Расширение Intel Taskqueuing для OpenMP
157
Библиотечные функции OpenMP
159
Переменные среды в OpenMP
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
Использование контролера потоков с OpenMP
267
Компиляторы производства Intel
268
OpenMP
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
На сегодняшний день .NET Framework настолько опередила конкурирующие платформы, что предполагается платформой «по умолчанию» для разработки любых программных продуктов. Это связано с тем, что компания Microsoft не просто учла ошибки других производителей и пожелания разработчиков, но и внесла много нового в разработку приложений всех типов. .NET Framework реализует множество идей, которые раньше были лишь на бумаге. Компания Microsoft как разработчик платформы .
Всех программистов, которые добиваются успеха в мире разработки ПО, отличает один общий признак: они больше всего заботятся о качестве создаваемого программного обеспечения...