当今的高性能计算 (HPC) 和深度学习应用都离不开 GPU 集群的计算能力。编写能够在集群环境中正确有效地利用 GPU 的 CUDA® 应用程序需要一组独特的技能。在本课程中,您将学习可以有效地将CUDA C++ 应用程序扩展到 NVIDIA GPU 集群上所需的工具和技术。您将通过在交互式的由多个 NVIDIA GPU 支持的云环境中编写多个 CUDA C++ 应用程序的代码来实现此目的。您将先接触几个多 GPU 的编程方法,包括 CUDA 感知的消息传递接口 (MPI),然后再学习本课程的重点,即NVSHMEM™ 。
NVSHMEM 是一种基于 OpenSHMEM 的并行编程接口,它可为 NVIDIA GPU 集群提供高效且可扩展的通信。NVSHMEM 为跨越多个 GPU 的内存的数据创建一个全局地址空间,并且可以通过细粒度的 GPU 启动操作、CPU 启动操作和对 CUDA 流的操作对这个全局地址空间进行访问。 NVSHMEM 的异步的、由GPU 发起的数据传输消除了 CPU 和 GPU 之间的同步开销。它还支持既有通信又有计算的长时间运行的核函数,从而减少在强扩展时可能限制应用程序性能的开销。 NVSHMEM 已被用于多个系统,例如位于橡树岭的领先计算设施 (OLCF) 的 Summit 超级计算机、劳伦斯利弗莫尔国家实验室的 Sierra 超级计算机。
学习目标
完成本课程后,您将能够了解:
- 学习几种编写多 GPU CUDA C++ 应用程序的方法。
- 使用多种多 GPU 通信模式并了解它们在功能和性能方面所做的权衡。
- 使用支持 CUDA 的 MPI 和 NVSHMEM,通过单程序多数据 (SPMD) 范式编写可移植、可扩展的 CUDA 代码。
- 使用 NVSHMEM 的对称存储模型及其从 GPU 启动数据传输的能力,对多 GPU 的 SPMD 代码进行改进。
- 练习常见的多 GPU 编码范式,例如域分解和 Halo Exchange。
- 针对各种 GPU 集群配置,探索各个需要考虑的注意事项。
下载课程大纲 (PDF 79.5 KB)