本书结构
本书由十章组成,涵盖以下主题:
**第1章:CUDA的异构并行计算**
简要介绍了异构架构,它通过GPU补充CPU,并讨论了向异构并行编程的范式转变。
**第2章:CUDA编程模型**
介绍了CUDA编程模型及CUDA程序的基本结构。解释了CUDA中大规模并行计算的逻辑视图:通过编程模型直观地展示了两个级别的线程层次结构。还讨论了线程配置的启发式方法及其对性能的影响。
**第3章:CUDA执行模型**
从硬件角度检查内核执行,研究了数千个线程如何在GPU上调度。解释了计算资源在多级粒度下如何在线程之间划分。展示了如何利用硬件视图来指导内核设计,并通过性能分析的方法来开发和优化内核。然后,通过示例说明了CUDA动态并行性和嵌套执行。
**第4章:全局内存**
介绍了CUDA内存模型,探讨了全局内存数据布局,并分析了对全局内存的访问模式。解释了各种内存访问模式对性能的影响,并演示了CUDA 6中的新特性——统一内存如何简化CUDA编程并提高生产力。
**第5章:共享内存和常量内存**
解释了如何利用共享内存(一个程序管理的低延迟缓存)来提高内核性能。描述了共享内存的最佳数据布局,并展示了如何避免性能低下的问题。最后,说明了如何在相邻线程之间进行低延迟通信。
**第6章:流和并发**
描述了如何使用CUDA流实现多内核并发,如何重叠通信和计算,以及不同的任务调度策略如何影响内核间的并发性。
**第7章:指令级原语优化**
解释了浮点运算的性质、标准和内建数学函数以及CUDA原子操作。展示了如何使用相对低级的CUDA原语和编译器标志来调整应用程序的性能、准确性和正确性。
**第8章:GPU加速CUDA库和OpenACC**
介绍了CUDA领域特定库的新并行层,包括线性代数、傅里叶变换和随机数生成的具体示例。解释了OpenACC(基于编译器指令的GPU编程模型)如何通过提供更简单的方式来利用GPU计算能力,从而补充CUDA。
**第9章:多GPU编程**
介绍了GPUDirect技术,用于实现GPU之间的点对点内存访问。解释了如何在多个GPU之间管理和执行计算。还展示了如何通过使用CUDA感知MPI和GPUDirect RDMA,在GPU加速的计算集群上扩展应用程序,以实现接近线性的性能可扩展性。
**第10章:实施考虑**
讨论了CUDA开发过程和各种基于性能分析的优化策略。演示了如何使用CUDA调试工具来调试内核和内存错误。还提供了一个将传统C应用程序迁移到CUDA C的案例研究,通过逐步说明帮助巩固对方法论的理解、可视化过程和演示工具。