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.
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 для пространственных архитектур.
Структура и подача материала
Книга логически разбита на три части:
Такой подход позволяет читателю сначала получить рабочую картину, а затем постепенно углубляться в детали производительности и архитектурные особенности.
Сильные стороны
sycl/sycl.hpp, новый синтаксис device selector, удаление явного host-устройства. Также они честно указывают, где используются расширения DPC++ (FPGA selectors, pipes) и что стандарт этого не требует.accessorсоздаёт неявные зависимости,Слабые стороны и спорные моменты
imageобъекты упомянуты лишь вскользь.sycl::streamописано, но без детального сравнения сprintfвнутри ядра.specialization constantsтолько названы. Но это простительно, так как книга и так очень объёмна.Общее впечатление и оценка
«Data Parallel C++» — это одна из лучших книг по параллельному программированию на современном C++. Она закрывает огромную нишу: единый язык для CPU, GPU и FPGA без привязки к одному вендору. Авторы — разработчики компилятора DPC++ и спецификации SYCL, поэтому материал не догадочен, а основан на реальном опыте.
Книга идеально подходит как для самообразования (несмотря на отсутствие упражнений), так и для использования в университетских курсах по параллельным вычислениям. Её можно рекомендовать разработчикам, которые хотят уйти от проприетарных решений в сторону открытых стандартов, а также инженерам, занимающимся переносом кода с CUDA на портативные платформы.
Вердикт:
Если вы серьёзно работаете с C++ и хотите писать эффективные, переносимые между разными акселераторами приложения — эта книга станет вашим настольным справочником. Читать её нужно с карандашом и запущенным компилятором под рукой.
Оценка: 9.5 из 10.
(Полбалла снято за отсутствие задач и незначительную зависимость от расширений Intel в одной из глав).