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参考》。