Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

C++ AMP: построение массивно параллельных программ с помощью Microsoft Visual C++

Покупка
Артикул: 442760.02.99
Доступ онлайн
559 ₽
В корзину
C++ Accelerated Massive Parallelism (C++ AMP) — разработанная корпорацией Microsoft технология ускорения написанных на C++ приложений за счет исполнения кода на оборудовании с распараллеливанием по данным, например, на графических процессорах. Модель программирования в C++ AMP основана на библиотеке, устроенной по образцу STL, и двух расширениях языка C++, интегрированных в компилятор Visual C++ 2012. Она в полной мере поддерживается инструментами Visual Studio, в том числе IntelliSense, отладчиком и профилировщиком. Благодаря C++ AMP свойственная гетерогенному оборудованию производительность становится доступна широким кругам программистов. В книге показано, как воспользоваться всеми преимуществами C++ AMP в собственных приложениях. Помимо описания различных черт C++ AMP, приведены примеры различных подходов к реализации различных алгоритмов в реальных приложениях. Издание предназначено для программистов, уже работающих на С++ и стремящихся повысить производительность существующих приложений.
Грегори, К. C++ AMP: построение массивно параллельных программ с помощью Microsoft Visual C++ : практическое руководство / К. Грегори, Э. Миллер ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс, 2023. - 413 с. - ISBN 978-5-89818-518-3. - Текст : электронный. - URL: https://znanium.com/catalog/product/2107193 (дата обращения: 29.09.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Кэйт Грегори
Эйд Миллер

C++ AMP:

построение массивно 
параллельных программ 
с помощью Microsoft Visual C++

C++ AMP: Accelerated 
Massive Parallelism with 
Microsoft

® Visual C++

®

Kate Gregory 
Ade Miller

C++ AMP:
построение массивно 
параллельных программ 
с помощью Microsoft Visual C++

Москва, 2023

Кэйт Грегори
Эйд Миллер

2-е издание, электронное

УДК 004.438C++AMP
ББК 32.973.202-018.2
Г79

Г79
Грегори, Кэйт.

C++ AMP: построение массивно параллельных программ с помощью 
Microsoft Visual C++ / К. Грегори, Э. Миллер ; пер. с англ. А. А. Слинкина. — 2-е изд., эл. — 1 файл pdf : 413 с. — Москва : ДМК Пресс, 2023. — 
Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; 
экран 10". — Текст : электронный.

ISBN 978-5-89818-518-3
C++ Accelerated Massive Parallelism (C++ AMP) — разработанная корпорацией 
Microsoft технология ускорения написанных на C++ приложений за счет исполнения 
кода на оборудовании с распараллеливанием по данным, например, на графических 
процессорах. Модель программирования в C++ AMP основана на библиотеке, устроенной по образцу STL, и двух расширениях языка C++, интегрированных в компилятор Visual C++ 2012. Она в полной мере поддерживается инструментами Visual 
Studio, в том числе IntelliSense, отладчиком и профилировщиком. Благодаря C++ 
AMP свойственная гетерогенному оборудованию производительность становится 
доступна широким кругам программистов.
В книге показано, как воспользоваться всеми преимуществами C++ AMP в собственных приложениях. Помимо описания различных черт C++ AMP, приведены 
примеры различных подходов к реализации различных алгоритмов в реальных приложениях.
Издание предназначено для программистов, уже работающих на С++ и стремящихся повысить производительность существующих приложений.

УДК 004.438C++AMP 
ББК 32.973.202-018.2

Электронное издание на основе печатного издания: C++ AMP: построение массивно параллельных программ с помощью Microsoft Visual C++ / К. Грегори, Э. Миллер ; пер. с англ. 
А. А. Слинкина. — Москва : ДМК Пресс, 2013. — 412 с. — ISBN 978-5-94074-896-0. — Текст : 
непосредственный.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами 
защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-518-3
©  2012 by Ade Miller, Gregory Consulting 
Limited
©  Оформление, перевод на русский язык, 
ДМК Пресс, 2013

Посвящается Брайану, который всегда был моим секретным оружием, и моим детям, теперь уже почти взрослым, которые считают, что мама, пишущая книги, – это 
нормально.
– Кэйт Грегори

Посвящается Сюзанне – той единственной, что в сто 
раз лучше, чем я заслуживаю.
– Эйд Миллер

ОГЛАВЛЕНИЕ

Предисловие ............................................. 13

Об авторах ................................................ 15

Введение .................................................. 16
Для кого предназначена эта книга ........................................... 16
Предполагаемые знания .......................................................... 17
Для кого не предназначена эта книга ....................................... 17
Организация материала .......................................................... 18
Принятые соглашения ............................................................. 19
Требования к системе ............................................................. 19
Примеры кода ......................................................................... 20
Установка примеров кода ......................................................... 20
Использование примеров кода ................................................ 21
Благодарности ........................................................................ 21
Замеченные опечатки и поддержка книги ................................ 22
Нам важно ваше мнение .......................................................... 22
Оставайтесь на связи .............................................................. 23

Глава 1. Общие сведения и подход C++ AMP ... 24
Что означает GPGPU? Что такое гетерогенные вычисления? ... 24
История роста производительности ......................................... 25
Гетерогенные платформы......................................................... 26
Архитектура ГП......................................................................... 29
Кандидаты на повышение производительности за счет 
распараллеливания ................................................................. 30
Технологии распараллеливания вычислений на ЦП ................. 34
Векторизация ........................................................................... 34
OpenMP ................................................................................... 37
Система Concurrency Runtime (ConcRT) и библиотека 
Parallel Patterns Library .............................................................. 39
Библиотека Task Parallel Library ................................................. 41
WARP – Windows Advanced Rasterization Platform ....................... 41
Технологии распараллеливания вычислений на ГП ................... 41
Что необходимо для успешного распараллеливания ................ 43

Оглавление

Подход C++ AMP ...................................................................... 45
C++ AMP вводит GPGPU (и не только) в обиход......................... 45
C++ AMP – это C++, а не C ........................................................ 46
Для использования C++ AMP нужны только знакомые вам 
инструменты ............................................................................ 47
C++ AMP почти целиком реализована на уровне библиотеки .... 48
C++ AMP порождает переносимые исполняемые файлы с 
прицелом на будущее .............................................................. 50
Резюме ................................................................................... 52

Глава 2. Пример: программа NBody ............... 53
Необходимые условия для запуска примера ............................ 53
Запуск программы NBody ........................................................ 55
Структура программы .............................................................. 59
Вычисления на ЦП ................................................................... 60
Структуры данных .................................................................... 60
Функция wWinMain ................................................................... 62
Обратный вызов OnFrameMove ................................................ 62
Обратный вызов OnD3D11CreateDevice .................................... 63
Обратный вызов OnGUIEvent .................................................... 65
Обратный вызов OnD3D11FrameRender ................................... 66
Классы NBody для вычислений на ЦП ...................................... 66
Класс NBodySimpleInteractionEngine ......................................... 67
Класс NBodySimpleSingleCore .................................................. 67
Класс NBodySimpleMultiCore .................................................... 68
Функция NBodySimpleInteractionEngine:: BodyBodyInteraction ... 68
Вычисления с применением C++ AMP ..................................... 70
Структуры данных .................................................................... 70
Функция CreateTasks ................................................................ 72
Классы NBody в версии для C++ AMP ...................................... 74
Функция NBodyAmpSimple::Integrate ........................................ 74
Функция BodyBodyInteraction ................................................... 76
Резюме ................................................................................... 77

Глава 3. Основы C++ AMP ............................. 79
Тип array<T, N> ........................................................................ 79
accelerator и accelerator_view ................................................... 82
index<N> ................................................................................. 85
extent<N> ................................................................................ 86
array_view<T, N> ....................................................................... 86
parallel_for_each ....................................................................... 91
Функции, помеченные признаком restrict(amp) ........................ 94

Оглавление

Копирование между ЦП и ГП .................................................... 96
Функции из математической библиотеки ................................. 98
Резюме ................................................................................... 99

Глава 4. Разбиение на блоки ....................... 100
Назначение и преимущества блоков ...................................... 101
Блочно-статическая память ................................................... 102
Тип tiled_index<N1, N2, N3> ................................................... 105
Преобразование простого алгоритма в блочный ................... 106
Использование блочно-статической памяти .......................... 108
Барьеры и синхронизация ...................................................... 113
Окончательный вариант блочного алгоритма ......................... 116
Влияние размера блока ......................................................... 117
Выбор размера блока ............................................................ 120
Резюме ................................................................................. 122

Глава 5. Пример: блочный вариант 
программы NBody..................................... 124
Насколько разбиение на блоки повышает 
производительность программы NBody? ............................... 124
Блочный алгоритм решения задачи N тел .............................. 126
Класс NBodyAmpTiled ............................................................. 127
Метод NBodyAmpTiled::Integrate ............................................. 127
Визуализатор параллелизма ................................................. 133
Выбор размера блока ............................................................ 140
Резюме ................................................................................. 144

Глава 6. Отладка ....................................... 145
Первые шаги ......................................................................... 145
Выбор режима отладки: на ЦП или на ГП ................................ 146
Эталонный ускоритель ........................................................... 150
Основы отладки на ГП ............................................................ 154
Знакомые окна и подсказки .................................................... 154
Панель инструментов Debug Location ..................................... 155
Обнаружение состояний гонки ............................................... 156
Получение информации о нитях ............................................ 158
Маркеры нитей ...................................................................... 159
Окно GPU Threads ................................................................... 159
Окно Parallel Stacks ................................................................ 161
Окно Parallel Watch ................................................................. 163
Пометка, группировка и фильтрация нитей ............................ 165

Оглавление

Дополнительные способы контроля ...................................... 168
Заморозка и разморозка нитей .............................................. 168
Выполнение блока до текущей позиции ................................. 170
Резюме ................................................................................. 172

Глава 7. Оптимизация................................ 173
Подход к оптимизации производительности ......................... 173
Анализ производительности .................................................. 174
Измерение производительности ядра .................................... 175
Использование визуализатора параллелизма ........................ 178
Использование пакета SDK визуализатора параллелизма ..... 185
Способы оптимизации доступа к памяти ............................... 187
Совмещение и вызовы parallel_for_each ................................. 187
Эффективное копирование данных в память ГП и обратно ..... 191
Эффективный доступ к глобальной памяти ускорителя .......... 198
Массив структур или структура массивов............................... 202
Эффективный доступ к блочно-статической памяти ............... 205
Константная память ............................................................... 210
Текстурная память .................................................................. 211
Занятость и регистры ............................................................. 211
Оптимизация вычислений ..................................................... 213
Избегайте расходящегося кода .............................................. 213
Выбор подходящей точности ................................................. 218
Оценка стоимости математических операций ........................ 220
Развертывание циклов ........................................................... 220
Барьеры синхронизации ........................................................ 222
Режимы очереди .................................................................... 226
Резюме ................................................................................. 227

Глава 8.Пример: программа Reduction ......... 229
Постановка задачи ................................................................ 229
Отказ от ответственности ....................................................... 230
Структура программы ............................................................ 231
Инициализация и рабочая нагрузка ........................................ 233
Маркеры визуализатора параллелизма .................................. 234
Функция TimeFunc() ............................................................... 235
Накладные расходы ............................................................... 237
Алгоритмы на ЦП ................................................................... 238
Последовательный алгоритм ................................................. 238
Параллельный алгоритм ........................................................ 238
Алгоритмы с использованием C++ AMP ................................. 239
Простой алгоритм .................................................................. 240

Оглавление

Простой алгоритм с array_view ............................................... 242
Простой оптимизированный алгоритм ................................... 244
Наивный блочный алгоритм ................................................... 246
Блочный алгоритм с разделяемой памятью ............................ 248
Минимизация расхождения ................................................... 254
Устранение конфликтов банков .............................................. 256
Уменьшение числа простаивающих нитей .............................. 257
Развертывание цикла ............................................................. 258
Каскадная редукция ............................................................... 263
Каскадная редукция с развертыванием цикла ........................ 265
Резюме ................................................................................. 266

Глава 9. Работа с несколькими ускорителями ...268
Выбор ускорителей ............................................................... 269
Перебор ускорителей ............................................................. 269
Ускоритель по умолчанию ...................................................... 272
Использование нескольких ГП ............................................... 274
Обмен данными между ускорителями ................................... 279
Динамическое балансирование нагрузки .............................. 285
Комбинированный параллелизм ........................................... 288
ЦП как последнее средство ................................................... 290
Резюме ................................................................................. 292

Глава 10. Пример: программа Cartoonizer ..... 294
Необходимые условия ........................................................... 295
Запуск программы................................................................. 295
Структура программы ............................................................ 299
Конвейер ............................................................................... 301
Структуры данных .................................................................. 301
Метод CartoonizerDlg::OnBnClickedButtonStart() ..................... 303
Класс ImagePipeline ................................................................ 304
Стадия мультипликации ........................................................ 309
Класс ImageCartoonizerAgent .................................................. 309
Реализации интерфейса IFrameProcessor .............................. 312
Использование нескольких ускорителей, совместимых 
с C++ AMP ............................................................................. 321
Класс FrameProcessorAmpMulti .............................................. 321
Разветвленный конвейер ....................................................... 324
Класс ImageCartoonizerAgentParallel ....................................... 325
Производительность мультипликатора .................................. 328
Резюме ................................................................................. 331

Доступ онлайн
559 ₽
В корзину