Data Parallel C++: Mastering DPC++ for Programming of Heterogeneous Systems using C++ and SYCL. 2 Ed

Data Parallel C++: Mastering DPC++ for Programming of Heterogeneous Systems using C++ and SYCL. 2 Ed

Data Parallel C++: Mastering DPC++ for Programming of Heterogeneous Systems using C++ and SYCL. 2 Ed
Автор: Ashbaugh Ben, Brodman James, Kinsner Michael, Pennycook John, Reinders James, Tian Xinmin
Дата выхода: 2023
Издательство: Apress Media, LLC.
Количество страниц: 596
Размер файла: 16,2 МБ
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Front Matter....2

1. Introduction....33

2. Where Code Executes....59

3. Data Management....91

4. Expressing Parallelism....120

5. Error Handling....152

6. Unified Shared Memory....168

7. Buffers....192

8. Scheduling Kernels and Data Movement....212

9. Communication and Synchronization....231

10. Defining Kernels....255

11. Vectors and Math Arrays....270

12. Device Information and Kernel Specialization....288

13. Practical Tips....309

14. Common Parallel Patterns....340

15. Programming for GPUs....371

16. Programming for CPUs....400

17. Programming for FPGAs....427

18. Libraries....473

19. Memory Model and Atomics....491

20. Backend Interoperability....525

21. Migrating CUDA Code....544

Back Matter....567

"This book, now in is second edition, is the premier resource to learn SYCL 2020 and is the ONLY book you need to become part of this community." Erik Lindahl, GROMACS and Stockholm University

Learn how to accelerate C++ programs using data parallelism and SYCL.

This open access book enables C++ programmers to be at the forefront of this exciting and important development that is helping to push computing to new levels. This updated second edition is full of practical advice, detailed explanations, and code examples to illustrate key topics.

SYCL enables access to parallel resources in modern accelerated heterogeneous systems. Now, a single C++ application can use any combination of devices–including GPUs, CPUs, FPGAs, and ASICs–that are suitable to the problems at hand.

This book teaches data-parallel programming using C++ with SYCL and walks through everything needed to program accelerated systems. The book begins by introducing data parallelism and foundational topics for effective use of SYCL. Later chapters cover advanced topics, including error handling, hardware-specific programming, communication and synchronization, and memory model considerations.

All source code for the examples used in this book is freely available on GitHub. The examples are written in modern SYCL and are regularly updated to ensure compatibility with multiple compilers.

What You Will Learn

  • Accelerate C++ programs using data-parallel programming
  • Use SYCL and C++ compilers that support SYCL
  • Write portable code for accelerators that is vendor and device agnostic
  • Optimize code to improve performance for specific accelerators
  • Be poised to benefit as new accelerators appear from many vendors

Who This Book Is For

 New data-parallel programming and computer programmers interested in data-parallel programming using C++.


Похожее:

Список отзывов:

  • В двух словах: Это эталонный учебник по программированию на C++ для гетерогенных (акселерированных) вычислительных систем. Книга не только знакомит с SYCL 2020, но и даёт глубокое понимание того, как писать код, который будет эффективно работать на GPU, CPU и FPGA разных вендоров. Это «must read» для всех, кто серьёзно занимается высокопроизводительными вычислениями на современном C++.

    Целевая аудитория

    Книга рассчитана на C++ разработчиков, которые уже имеют опыт работы с языком (желательно уровень C++17) и хотят освоить гетерогенное программирование. В отличие от многих других книг, здесь не требуется предварительного знания CUDA или OpenCL, — введение даётся с самых основ параллельных концепций. Тем не менее, читатель должен понимать, что такое lambda-выражения, шаблоны и move-семантика; без этого будет сложно.

    Для программистов, уже знакомых с CUDA, добавлена отдельная глава 21, которая помогает мигрировать код и понимает терминологическую разницу. Для FPGA-разработчиков — отдельная глава 17, которая представляет собой редко встречающееся руководство по использованию SYCL для пространственных архитектур.

    Структура и подача материала

    Книга логически разбита на три части:

    1. Фундамент (главы 1–4): введение в гетерогенные системы, очереди, управление данными (USM, буферы), выражение параллелизма через ND-range и basic data-parallel kernels. К концу четвёртой главы читатель уже способен написать простейшую программу, правильно запускающую ядро на устройстве.
    2. Углубление (главы 5–12): обработка ошибок, детали USM и буферов, планирование графов задач, синхронизация (барьеры, локальная память, подгруппы), определение ядер, векторные типы, запросы информации об устройстве. Это ядро языка SYCL.
    3. Практика и оптимизация (главы 13–21): практические советы по отладке, профилированию, типичные параллельные паттерны (map, stencil, reduction, scan), отдельные главы по программированию GPU, CPU и FPGA, библиотеки (oneDPL), модель памяти и атомики, бэкенд-интероперабельность и миграция с CUDA.

    Такой подход позволяет читателю сначала получить рабочую картину, а затем постепенно углубляться в детали производительности и архитектурные особенности.

    Сильные стороны

    1. Актуальность и точность. Книга полностью соответствует SYCL 2020 (финальной спецификации). Это критически важно, потому что многие онлайн-ресурсы описывают устаревший SYCL 1.2.1. Авторы подчёркивают изменения: заголовочный файл sycl/sycl.hpp, новый синтаксис device selector, удаление явного host-устройства. Также они честно указывают, где используются расширения DPC++ (FPGA selectors, pipes) и что стандарт этого не требует.
    2. Глубина и практическая направленность. Книга не ограничивается описанием классов. Она объясняет внутренние механизмы:
    • что такое task graph и как он работает,
    • почему accessor создаёт неявные зависимости,
    • как устроены барьеры и memory fences,
    • как компилятор может векторизовать через work-items, а не через явные векторные типы.
    • В каждой главе код сопровождается диаграммами и замечаниями о производительности.
    1. Мультиархитектурный охват. Обычно книги по параллельному программированию фокусируются либо на GPU (CUDA), либо на CPU (OpenMP). Здесь же равноправно рассмотрены:
    • GPU (глава 15) — SIMD-ширина, скрытие задержек, банковские конфликты, coalesced доступы.
    • CPU (глава 16) — NUMA, thread affinity, SIMD-векторизация, AoS/SoA, влияние signed/unsigned индексов.
    • FPGA (глава 17) — pipelines, initiation interval, pipes, кастомные банки памяти. Это уникальный материал, который не найти в большинстве книг.
    1. Помощь в миграции с CUDA. Глава 21 — не просто сравнение синтаксиса, а полноценный гайд с примерами использования инструмента DPCT/SYCLomatic. Разбираются различия в memory model, порядке измерения (contiguous dimension), warp/sub-group размерах. Это делает книгу полезной для организаций, которые хотят получить код, работающий на любом GPU, а не только на NVIDIA.
    2. Открытый доступ. Книга распространяется под лицензией Creative Commons, что позволяет свободно её распространять и использовать в учебных целях. Код примеров находится на GitHub и регулярно обновляется.

    Слабые стороны и спорные моменты

    1. Высокий порог входа. Несмотря на то что авторы стараются вводить понятия постепенно, объём информации огромен. Разработчик, который никогда не сталкивался с GPU или FPGA, может почувствовать себя потерянным в терминах «sub-group», «barrier», «local memory», «pipeline». Книга — скорее учебник для подготовленных, чем для абсолютных новичков.
    2. Акцент на DPC++. Хотя все примеры используют стандартный SYCL, некоторые разделы (особенно глава 17) сильно завязаны на расширения Intel/DPC++. Авторы это честно оговаривают, но читатель, использующий другой компилятор (например, hipSYCL или ComputeCpp), должен будет адаптировать примеры под свои расширения.
    3. Отсутствие упражнений. Как и в предыдущих стабильных рецензиях, в книге нет практических заданий. Это серьёзное ограничение для самостоятельного изучения: читатель может всё прочитать, но отсутствие задач для закрепления снижает эффективность. Пришлось бы искать или выдумывать собственные упражнения.
    4. Неполное покрытие некоторых тем. Например, image объекты упомянуты лишь вскользь. sycl::stream описано, но без детального сравнения с printf внутри ядра. specialization constants только названы. Но это простительно, так как книга и так очень объёмна.

    Общее впечатление и оценка

    «Data Parallel C++» — это одна из лучших книг по параллельному программированию на современном C++. Она закрывает огромную нишу: единый язык для CPU, GPU и FPGA без привязки к одному вендору. Авторы — разработчики компилятора DPC++ и спецификации SYCL, поэтому материал не догадочен, а основан на реальном опыте.

    Книга идеально подходит как для самообразования (несмотря на отсутствие упражнений), так и для использования в университетских курсах по параллельным вычислениям. Её можно рекомендовать разработчикам, которые хотят уйти от проприетарных решений в сторону открытых стандартов, а также инженерам, занимающимся переносом кода с CUDA на портативные платформы.

    Вердикт:

    Если вы серьёзно работаете с C++ и хотите писать эффективные, переносимые между разными акселераторами приложения — эта книга станет вашим настольным справочником. Читать её нужно с карандашом и запущенным компилятором под рукой.

    Оценка: 9.5 из 10.

    (Полбалла снято за отсутствие задач и незначительную зависимость от расширений Intel в одной из глав).