以下是CUDA相关API的详细分类及功能说明:
核心API
-
CUDA Runtime API
- 功能:高级抽象接口,简化设备管理、内存分配、内核启动等操作。
- 特点:自动初始化,代码简洁,适合快速开发。
- 示例函数:
cudaMalloc
,cudaMemcpy
,<<<grid, block>>>
内核启动语法。
-
CUDA Driver API
- 功能:底层接口,提供对GPU的细粒度控制(如上下文管理、模块加载)。
- 特点:需手动初始化(
cuInit
),支持多线程和复杂内存操作,性能更高但开发难度大。 - 示例函数:
cuCtxCreate
,cuLaunchKernel
,cuModuleLoad
。
数学与计算库
-
CUDA Math API
- 功能:提供GPU加速的数学函数(如三角函数、指数函数)。
- 支持类型:单精度、双精度、半精度浮点运算。
-
cuBLAS
- 功能:基于CUDA的BLAS实现,加速线性代数运算(矩阵乘法、向量加法等)。
- 特点:支持单/双精度,但需手动管理多GPU并行。
- 示例函数:
cublasSgemm
(单精度矩阵乘法)。
-
cuSPARSE
- 功能:稀疏矩阵运算库(如SpMV、SpMM)。
- 支持格式:CSR、CSC等稀疏存储格式。
-
cuFFT
- 功能:快速傅里叶变换(FFT)库,支持1D/2D/3D变换。
- 变换类型:复数-复数(C2C)、实数-复数(R2C)等。
- 示例函数:
cufftPlan1d
,cufftExecC2C
。
-
cuSOLVER
- 功能:线性代数求解器库(如LU分解、特征值计算)。
- 应用场景:科学计算、工程仿真。
深度学习与图像处理
-
cuDNN
- 功能:深度神经网络加速库,优化卷积、池化等操作。
- 特点:自动选择最优算法,支持Tensor Core加速。
-
nvJPEG
- 功能:GPU加速的JPEG解码/编码库。
- 特点:支持批量处理,降低延迟,适用于计算机视觉任务。
-
NPP
- 功能:图像与视频处理库(如滤波、几何变换)。
- 特点:高性能,灵活性强。
并行算法与工具
-
Thrust
- 功能:C++模板库,提供类似STL的并行算法(如排序、归约)。
- 特点:基于CUDA实现,简化并行编程。
-
CUB
- 功能:底层CUDA原语库(如块扫描、归约)。
- 特点:高性能,需手动集成到项目中。
-
NVRTC
- 功能:运行时编译库,支持动态生成PTX代码。
- 特点:允许内核函数在运行时编译,优化灵活性。
随机数与文件I/O
-
cuRAND
- 功能:高性能随机数生成库(如Mersenne Twister算法)。
- 应用场景:蒙特卡洛模拟、机器学习。
-
cuFile API
- 功能:GPUDirect Storage(GDS)技术接口,加速主机与存储设备间数据传输。
- 特点:绕过CPU缓存,降低延迟。
其他工具库
-
nvJitLink
- 功能:动态链接库,支持运行时生成和加载GPU代码。
- 应用场景:JIT编译优化。
-
nvFatbin
- 功能:管理CUDA二进制文件(fatbinary)的工具库。
- 特点:支持跨平台兼容性。
-
NVBLAS
- 功能:多GPU加速的BLAS库,基于cuBLAS扩展。
- 特点:透明替换CPU版BLAS,但需注意半大矩阵乘法性能问题。