4. 高性能库
MXMACA软件栈提供硬件高度适配的高性能算子库,包括mcDNN库、mcBLAS库、mcSOLVER库、mcRAND库、mcFFT库等,初步涵盖了计算机视觉、人工智能、优化求解、分子动力学等领域。
4.1. mcDNN库
mcDNN深度神经网络库是一个GPU加速的深度神经网络原语库。mcDNN为标准例程提供了高度调优的实现,例如前向和后向卷积、池化、规范化和激活层;加速了广泛使用的深度学习框架,包括Caffe2、Keras、PaddlePaddle和PyTorch等。
mcDNN库的主要功能特性包括:
张量核心加速支持所有流行的卷积操作,包括2D卷积、3D卷积、分组卷积、深度可分离卷积等,支持channel first和channel last的输入和输出数据排布
为计算机视觉和语音模型提供深度优化的内核算子,包括ResNet、ResNext、EfficientNet、EfficientDet、SSD、MaskRCNN、Unet、VNet、BERT、GPT-2、Tacotron2和WaveGlow等
支持FP32、FP16、BF16和TF32浮点格式和INT8
支持将内存受限的操作(如逐点和简化)与计算受限的操作(如卷积和matmul)融合在一起
mcDNN库的详细信息,参见《曦云® 系列通用GPU mcDNN API参考》。
4.2. mcBLAS库
mcBLAS库提供了基本线性代数子程序(BLAS)的GPU加速实现。通过针对曦云系列GPU高度优化的BLAS API,加速AI和HPC应用程序。
mcBLAS库的主要功能特性包括:
完全支持所有152个标准BLAS例程
支持半精度和整数矩阵乘法
硬件张量核心的GEMM和GEMM扩展优化
GEMM性能调整用于各种深度学习模型的规格和数据类型
支持流并发操作
mcBLAS库的详细信息,参见《曦云® 系列通用GPU mcBLAS API参考》。
4.3. mcSolverIT库
mcSolverIT库提供了密集和稀疏的直接线性求解器和特征求解器的集合。基于曦云系列GPU,为计算机视觉、CFD、ODE、计算化学和线性优化应用提供了显著加速。
mcSolverIT 库支持以下求解器或预条件器:
代数多网格(Algebraic Multigrid,AMG)提供经典的AMG和聚合AMG,其中包含AMG求解过程的不同选项
简单的松弛迭代求解器,例如高斯-赛戴尔(Gauss-Seidel)、雅可比(Jacobi)及其变体
多项式迭代求解器,例如切比雪夫多项式(Chebyshev Polynomial)方法
克雷洛夫求解器,例如共轭梯度(Conjugate Gradient,CG)、广义最小残差(Generalized Minimum Residual,GMRES)及其变体
不完全直接求解器,例如Cholesky分解,LU 分解,SVD分解和QR分解等
预条件求解器,例如预条件共轭梯度(Preconditioned Conjugate Gradient,PCG)、预条件广义最小残差(Preconditioned Generalized Minimum Residual,PGMRES)等
mcSolverIT库的详细信息,参见《曦云® 系列通用GPU mcSolverIT API参考》。
4.4. mcRAND库
mcRAND库提供高性能GPU加速随机数生成(RNG)。mcRAND库充分利用曦云系列GPU的高并发能力,以极致的速度提供高质量的随机数。
mcRAND库的主要功能特性包括:
灵活的使用模式
Host API用于在GPU上批量生成随机数
内联实现允许在GPU函数/内核中使用,或者在您的Host代码中使用
高质量的RNG算法
MRG32k3a
MTGP Merseinne Twister
XORWOW伪随机生成
Sobol的准随机数生成器,包括对加密的和64位RNG的支持
多个RNG分布选项
均匀分布
正态分布
对数正态分布
单精度或双精度
泊松分布
mcRAND库的详细信息,参见《曦云® 系列通用GPU mcRAND API参考》。
4.5. mcFFT库
mcFFT库是基于曦云系列GPU的快速傅里叶变换(FFT)的实现,用于构建跨学科的应用程序,如深度学习、计算机视觉、计算物理、分子动力学、量子化学以及地震和医学成像。使用mcFFT,应用程序自动受益于定期的性能改进和新的GPU架构。
mcFFT库的主要功能特性包括:
复数和实数类型的1D、2D、3D傅里叶变换算法
提供与Fastest Fourier Transform in the West(FFTW)类似的API接口
灵活的数据布局允许在单个元素和数组维度之间任意跨越
流式异步执行
半精度、单精度和双精度变换
批处理执行
In-place 和out-of-place转换
线程安全,可从多个主机线程调用
mcFFT库的详细信息,参见《曦云® 系列通用GPU mcFFT API参考》。
4.6. mcThrust库
Thrust是一个强大的并行算法和数据结构库,为GPU编程提供了一个灵活的高级接口,极大地提高了开发人员的工作效率。使用Thrust,C++开发人员只需编写几行代码就可以执行GPU加速的排序、扫描、转换和约简操作。Thrust为一些算法和数据结构提供类似STL的模板接口,这些算法和数据结构是为高性能异构并行计算而设计的。
为了减少用户迁移的成本,MXMACA软件栈提供了mcThrust,针对曦云系列GPU架构做了深层次的优化,但是面向用户的API接口不变。当用户的应用使用了Thrust的API接口,MXMACA软件栈提供了wrapper工具来帮助代码的移植。只需要切换到MXMACA软件栈的环境变量,相应的编译器工具mxcc将会自动参与后续的工作,对用户不感知。
mcThrust库的详细信息,参见《曦云® 系列通用GPU mcThrust API参考》。
4.7. mcCUB库
CUB是一个C++头文件only的函数库,为编程模型的每一层提供了最先进的可重用软件组件,包括并行的原语和一些工具。这些并行原语包括warp维度的原语、block维度的原语和device维度的原语。工具集包括智能迭代器、线程和线程块IO、device,kernel和存储管理。一般CUB会与Thrust库配合起来使用。
MXMACA软件栈提供了mcCUB,针对曦云系列GPU架构做了深层次的优化,但是面向用户的API接口不变。当安装了MXMACA软件栈的Toolkit以后,将会自动拷贝CUB和Thrust的头文件到系统中,默认是MXMACA软件栈路径。不需要单独构建CUB,要在代码中使用CUB原语,只需要获取最新的CUB发行版,并包含CUB原语的C++头文件<cub/cub.cuh>,或者特定的头文件。然后使用MXMACA软件栈的mxcc编译器编译您的程序即可。
mcCUB库的详细信息,参见《曦云® 系列通用GPU mcCUB API参考》。