最近涉及到异构计算在学习Oneapi,Oneapi的核心是一个名为DPC++的编程语言,DPC++本质上是添加对sycl的支持是对c++的扩展。
所以我将会更新学习Data Parallel C++的学习笔记
本文主要关于使用C++为数据并行性编程,对新手较为友好,若从未接触过SYCL或dpc++编译器也没关系。
SYCL是一个为异构系统的c++添加数据并行性,dpc++是基于SYCL以及一些扩展和广泛的异构支持,包括CPU,GPU,FPGA。
本书分为十九章
第一章:Introduction 简介。 简要介绍了sycl,以及异构需要的队列和一些操作,主机,设备,串行,并行,并发。
第二章:Where code executes 代码执行的位置。主机代码,设备代码分别执行的位置,以及如何为队列选定设备,以及如何在设备上创建一个工作。
第三章:Data management 数据管理。显示数据移动,隐式数据移动以及如何正确的选择管理内存,统一共享内存,缓冲区,对数据的排序。
第四章,Expressing Parallelism 并行性的表示。内核当中的并行性,数据并行内核,ND范围内核,将计算映射到work-items
第五章:Error handing 错误处理。错误的类型以及如何处理这些错误。
第六章:Unified shared Memory 统一共享内存。为什么我们需要用到USM,分配的类型,分配的内存,数据的管理。
第七章:Buffers 缓冲区。 缓冲区,访问器,以及如何创建缓冲区,访问器。
第八章:Scheduling kernels and data Movement 内核的调度和数据的移动。 图形调度,图形在dpc++中的工作。
第九章:Conmmunication and synchronization 通信和同步。work-groups,work-items,sub-groups,使用barrier进行同步,使用本地内存,广播,洗牌,投票。
第十章:Defining Kernels 定义内核。表达内核的三种方式。
第十一章:Vector 向量。向量的类型,接口,向量在并行内核中的执行,向量并行性。
第十二章:Device information 设备信息。内核代码的细化,枚举设备和功能,设备信息的描述。
第十三章:Practical tips 实用技巧。添加sycl到现有的c++程序当中,debug,数据的初始化和访问内核的输出,从cuda到sycl 的迁移。
第十四章:Common parallel pattern 常见的并行模式。使用内置的函数库,oneapi dpc++库,map,reduction。
第十五章:Programming for GPUS gpu编程。gpu如何工作的,如何将内核卸载到gpu上,gpu内核的实践。
第十六章:Programming for CPUS cpu编程。通用cpu编程,线程级并行,cpu上的simd向量化。
第十七章:Programming for FPGAS fpga编程。如何使用FPGA,如何允许FPGA,为FPGA编写内核。
第十八章:Libraries 库。内置函数,dpc++库。
第十九章:Memory model and atomics 内存模型和原子。内存模型当中的内容,内存模型,dpc++中的原子操作。
最后作者提到了 dpc++ 的未来发展方向以及前景。
接下来我会持续更新我在学习这本书的一些内容以及我的见解。