Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 637035)
Контекстум
Электро-2024

C++ AMP: построение массивно параллельных программ с помощью Microsoft Visual C++ (2000,00 руб.)

0   0
Первый авторГрегори Кэйт
АвторыМиллер Эйд
ИздательствоМ.: ДМК Пресс
Страниц413
ID834953
АннотацияC++ Accelerated Massive Parallelism (C++ AMP) — разработанная корпорацией Microsoft технология ускорения написанных на C++ приложений за счет исполнения кода на оборудовании с распараллеливанием по данным, например, на графических процессорах. Модель программирования в C++ AMP основана на библиотеке, устроенной по образцу STL, и двух расширениях языка C++, интегрированных в компилятор Visual C++ 2012. Она в полной мере поддерживается инструментами Visual Studio, в том числе IntelliSense, отладчиком и профилировщиком. Благодаря C++ AMP свойственная гетерогенному оборудованию производительность становится доступна широким кругам программистов. В книге показано, как воспользоваться всеми преимуществами C++ AMP в собственных приложениях. Помимо описания различных черт C++ AMP, приведены примеры различных подходов к реализации различных алгоритмов в реальных приложениях.
Кому рекомендовано Издание предназначено для программистов, уже работающих на С++ и стремящихся повысить производительность существующих приложений.
ISBN978-5-89818-518-3
УДК004.438C++AMP
ББК32.973.202-018.2
Грегори, . . C++ AMP: построение массивно параллельных программ с помощью Microsoft Visual C++ / Э. . Миллер; . . Грегори .— Пер. с англ. А. А. Слин- кина. — 2-е изд., эл. — Москва : ДМК Пресс, 2023 .— 413 с. — 1 файл pdf : 413 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. — ISBN 978-5-89818-518-3 .— URL: https://rucont.ru/efd/834953 (дата обращения: 29.05.2024)

Предпросмотр (выдержки из произведения)

C++_AMP_построение_массивно_параллельных_программ_с_помощью_Microsoft_Visual_C++.pdf
УДК 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
Стр.5
ОГЛАВЛЕНИЕ Предисловие .............................................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
Стр.7
Оглавление 7 Подход 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 ........................................................................ 79 accelerator и accelerator_view ................................................... 82 index ................................................................................. 85 extent ................................................................................ 86 array_view ....................................................................... 86 parallel_for_each ....................................................................... 91 Функции, помеченные признаком restrict(amp) ........................ 94
Стр.8
8 Оглавление Копирование между ЦП и ГП .................................................... 96 Функции из математической библиотеки ................................. 98 Резюме ................................................................................... 99 Глава 4. Разбиение на блоки ....................... 100 Назначение и преимущества блоков ...................................... 101 Блочно-статическая память ................................................... 102 Тип tiled_index ................................................... 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
Стр.9
Оглавление 9 Дополнительные способы контроля ...................................... 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
Стр.10
10 Оглавление Простой алгоритм с 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
Стр.11
Оглавление 11 Глава 11. Интероперабельность с графикой ... 333 Основы .................................................................................. 334 Типы norm и unorm ................................................................. 334 Типы коротких векторов ......................................................... 336 Тип texture .................................................................... 340 Сравнение текстур и массивов ............................................... 349 Использование текстур и коротких векторов ......................... 351 Встроенные функции HLSL .................................................... 355 Интероперабельность с DirectX ............................................. 356 Интероперабельность представления ускорителя и устройства Direct3D ............................................................. 357 Интероперабельность array и буфера Direct3D ....................... 358 Интероперабельность texture и текстурного ресурса Direct3D ................................................................................. 359 Практическое использование интероперабельности с графикой ............................................................................ 363 Резюме ................................................................................. 365 Глава 12. Советы, хитрости и рекомендации ... 367 Решение проблемы несоответствия размеру блока............... 368 Дополнение до кратного размеру блока ................................. 369 Отсечение блоков .................................................................. 371 Сравнение разных подходов .................................................. 375 Инициализация массивов ...................................................... 376 Объекты-функции и лямбда-выражения ................................ 377 Атомарные операции ............................................................. 378 Дополнительные возможности C++ AMP Features в Windows 8 ............................................................................ 382 Обнаружение таймаутов и восстановление ........................... 384 Предотвращение TDR ............................................................ 385 Отключение TDR в Windows 8 .................................................. 386 Обнаружение TDR и восстановление ...................................... 387 Поддержка вычислений с двойной точностью ........................ 388 Ограниченная поддержка двойной точности .......................... 388 Полная поддержка двойной точности ..................................... 389 Отладка в Windows 7 .............................................................. 389 Конфигурирование удаленной машины .................................. 390 Конфигурирование проекта ................................................... 390 Развертывание и отладка проекта .......................................... 392 Дополнительные отладочные функции .................................. 392 Развертывание ...................................................................... 393
Стр.12
12 Оглавление Развертывание приложения ................................................... 393 Запуск C++ AMP на сервере ................................................... 394 C++ AMP и приложения для Windows 8 в магазине Windows Store ....................................................................... 397 Использование C++ AMP из управляемого кода .................... 397 Из приложения .NET, приложения для Windows 7, Windows Store или библиотеки................................................ 397 Из приложения для C++ CLR ................................................... 398 Из проекта для C++ CLR ......................................................... 398 Резюме ................................................................................. 399 Приложение. Другие ресурсы ..................... 400 Другие публикации авторов этой книги ................................. 400 Сетевые ресурсы Microsoft .................................................... 400 Скачивайте руководства по C++ AMP ..................................... 401 Исходный код и поддержка .................................................... 401 Обучение ............................................................................... 402 Предметный указатель .............................. 403
Стр.13

Облако ключевых слов *


* - вычисляется автоматически
Антиплагиат система на базе ИИ