1 介绍
CUDA
CUDA是Nvidia于2006年推出的一套通用并行计算架构,旨在解决在GPU上的并行计算问题。其易用性和便捷性能够方便开发者方便的进行GPU编程,充分利用GPU的并行能力,可以大幅提高程序的性能。
自从CUDA诞生以来,CUDA生态系统也迅速的发展,包括了大量的软件开发工具、服务和解决方案。CUDA Toolkit包括了库、调试和优化工具、编译器和运行时库。
ROCm
AMD ROCm是Radeon Open Compute (platform)的缩写,是2015年AMD公司为了对标CUDA生态而开发的一套用于HPC和超大规模GPU计算提供的开源软件开发平台,ROCm只支持Linux平台。
同样ROCm包含一些列的开发工具、软件框架、库、编译工具、编程模型等。
下图整理了Nvidia的CUDA生态和AMD的ROCm生态的对照。
2 CUDA生态和ROCm生态对比
2.1 编程模型和API
NVIDIA | AMD | 功能描述 |
CUDA | HIP | 为C/C++开发GPU加速程序提供全面的环境,API、Runtime、编译器、调试工具等。 |
OpenCL | OpenCL | 面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码, |
OpenACC | 并行计算指令,研究人员和技术程序员最常用的GPU并行编程模型。 | |
OpenMP | OpenMP是一套编译器指令、库例程和环境变量的规范,可用于指定Fortran和C/C++程序中的高级并行性。 |
2.2 编译及工具链
NVIDIA | AMD | 功能描述 |
NVCC | ROCmCC / HCC | 编译器 |
CUDA-GDB | ROCgdb | debug工具 |
HIPify | 将CUDA原生代码转换为HIP原生c++代码 | |
Nvidia Nsight | ROCm Profiling Tools | 性能分析工具 |
nvidia-smi | rocm-msi | 系统管理界面和命令行界面的工具 |
2.3 GPU加速库
CUDA和ROCm的基础框架提供众多的支持库,包括基础数学库、AI支持库、通信库、并行库等一些列,下面将列出来做个对照:
数学库
NVIDIA | AMD | 功能描述 |
cuBLAS | rocBLAS | 基本线性代数库(basic linear algebra,BLAS) |
cuFFT | rocFFT | 快速傅里叶变换库(Fast Fourier Transforms) |
CUDA Math Library | 标准数学函数库 | |
cuRAND | 随机数生成(random number generation,RNG) | |
cuSOLVER | rocSOLVER | 密集和稀疏直接求解器 |
cuSPARSE | rocSPARSE / rocALUTION | 稀疏矩阵BLAS |
cuTENSOR | rocWMMA | 张量线性代数库 |
AmgX | 用于模拟和隐式非结构化方法线性解算器 |
并行算法库
NVIDIA | AMD | 功能描述 |
Thrust | Parallel STL / rocThrust | C++并行算法和数据结构库 |
图像和视频库
NVIDIA | AMD | 功能描述 |
nvJPEG | 用于JPEG解码的高性能GPU加速库 | |
Nvidia Performance Primitive | 提供GPU加速的图像、视频和信号处理功能 | |
Nvidia Video Codec SDK | 硬件加速视频编码和解码的一整套API、示例和文档 |
通信库
NVIDIA | AMD | 功能描述 |
NVSHMEM | OpenSHMEM标准的GPU内存,具有扩展以提高GPU性能。 | |
NCCL | RCCL | 多GPU、多节点通信 |
深度学习/人工智能库
Nvidia | AMD |
|
|
2.4 开发工具
Nvidia | AMD |
|
|
参考资料:
Nvidia HPC Tools & Ecosystem
Nvidia CUDA Zone
AMD ROCm Docs
[CSDN] AMD ROCm 平台简介