|
英伟达的GPU背后最大的功臣是CUDA生态,了解生态的组成部分,也就了解了英伟达的发展动态。

1:编程语言和APIs 最初,CUDA 仅支持用 C 语言编写程序(CUDA 1.0)。随着 CUDA 的发展,它逐步支持更多的高级语言,例如 C++、Fortran、Python 等。 英伟达发布到CUDA工具包提供了使用C/C++编程语言的开发环境,从而能够开发、优化和部署 GPU 加速的程序,英伟达还提供了一个PGI工具链,使用Fortran语言编写CUDA程序。 可以说CUDA工具包提供了低级的API和动态库,比如cudaMemcpy等等。 另外CUDA也有一些第三方工具支持,比如: • PyCUDA:在Python中调用CUDA API的接口,它底层使用了CUDA 的 C++ 接口,属于原生 CUDA 的封装。 • Altimesh Hybridizer:从 .NET 或 Java 程序中生成 CUDA C 源代码 • OpenCL:另外一种并行编程框架,与CUDA是不同的生态系统,但可以操作 CUDA GPU • OpenACC:使用PGI编辑器指令生成 CUDA 代码
2:Libraries 如果说CUDA API相当于操作系统级别的API,那包就是C语言,基于 CUDA 平台开发的模块,针对目标计算架构进行了精心优化,为常用的操作提供了实现,并简化开发工作。 大概的特点: • 提供针对特定计算的高效实现,例如矩阵运算(cuBLAS)、稀疏矩阵(cuSPARSE)等。 • 是直接可用的“插件”模块,开发者无需从头实现复杂的 GPU 算法。 • 多数库都封装了 CUDA API 的低级调用,从而实现了高层次的易用性。
CUDA 工具包提供了大量常用库,合作伙伴也在 CUDA 平台上提供了许多库: • 数学库:cuBLAS、cuRAND、cuFFT、cuSPARSE、cuTENSOR、cuSOLVER • 并行算法库:nvGRAPH、Thrust • 图像和视频库:nvJPEG、NPP、Optical Flow SDK • 通信库:NVSHMEM、NCCL • 深度学习库:cuDNN、TensorRT、Riva、DALI • 合作伙伴库:OpenCV、FFmpeg、ArrayFire、MAGMA
3:性能分析和调试工具 任何编程架构的重要组成部分之一是强大且高效的工具,用于编写、调试和优化程序,CUDA生态系统提供了必要的工具,方便快速、轻松且高效地编写程序。 4:数据中心工具和集群管理 GPU真正的应用在于数据中心和集群,现在的AI计算都需要GPU集群来加速训练和推理,需要通过高速网络连接GPU,这也是英伟达收购Mellanox原因之一,其开发的InfiniBand互联技术就是加速GPU集群通信能力。 英伟达通过和合作伙伴合作,为开发人员和 DevOps 提供 AI 和 HPC 软件生命周期的每个步骤所需的软件工具,包括: • 容器:NVIDIA NGC(NVIDIA GPU Cloud)平台,Google云、AWS相对来可能更擅长。 • 调度和协调:Kubernetes on NVIDIA GPUs,可以参考GPUs on Google GKE。 • 集群管理工具,比如Bright Cluster、Ganglia。 • 监控工具,比如DCGM工具。
5:围绕CUDA生态开发的应用程序 https://www.nvidia.com/en-us/accelerated-applications/ 这个列表列举了部分使用CUDA生态开发的系统,包括各行各业。 无处不在的GPUs,比如: • 消费级GeForce GPUs • 专业视觉化的Quadro GPU • 数据中心的GPU,比如H100 GPU • 嵌入式系统的Tegra GPU
作为普通开发者来说,学习英伟达GPU的第一课就是了解CUDA生态系统 |