11.5_本章小结

11.5 本章小结

我们在本章中看到了一些新的主机内存分配方式,所有这些内存都是通过cudaHostAlloc()来分配的。通过使用一组不同的标志,我们可以分配具备零拷贝、可移动或者合并式写入等属性的内存。通过使用零拷贝内存,可以避免CPU与GPU之间的显式复制操作,这对许多应用程序来说都可能会带来加速。通过使用支持线程的库,我们可以在同一个应用程序中对多个GPU进行操作,使点积运算能够跨越多个设备执行。最后,我们看到了通过可移动的固定内存使多个GPU共享固定内存。在最后一个示例中使用了可移动的固定内存,多个GPU,以及零拷贝内存,以演示第5章中点积运算的增强版。随着多GPU系统的日益普及,这些技术能帮助你充分发挥这些系统的总体计算能力。

第12章

后记

祝贺你!我们希望你能享受学习CUDA C的过程,并在GPU计算中使用它。从第1章到现在,我们经历了一段漫长的学习历程,接下来将简要地回顾一下。首先,我们学习了如何通过CUDA运行时的尖括号语法在多处理器上启动多个核函数副本。我们将这些概念进一步扩展为使用线程集和线程块集,实现对任意长度的输入数据都可以执行算术操作。这些复杂的核函数通过GPU上的共享内存来实现线程间通信,并采用了专门的同步原语,从而确保在支持数千个并行线程的环境中实现正确的操作。

在了解了如何在NVIDIA CUDA架构上实现并行编程的基本概念后,我们接下来介绍了NVIDIA提供的一些更高级的概念和API。事实证明,GPU中的专门图形硬件对于GPU计算来说是非常有用的,因此我们学习了如何利用纹理内存来加速一些常见的内存访问模式。由于许多用户都在他们的交互式图形应用程序中添加了GPU计算支持,因此我们介绍了CUDA C核函数与工业标准的图形API(例如OpenGL与 DirectX)之间的交互。全局内存和共享内存上的原子操作则实现了对共享内存的安全多线程访问。然后,我们还介绍了一些高级主题,流可以使系统尽可能地保持忙碌,在执行核函数的同时,还可以在主机和GPU之间执行内存复制操作。最后,我们学习了如何通过零拷贝内存在集成GPU上加速应用程序。此外,我们学习了如何初始化多个GPU设备以及如何分配可移动的固定内存,这使得CUDA C程序能够进一步发挥多GPU平台的强大功能。