muDNN C++ API 参考
| 成员 | 说明 |
|---|---|
namespace musa::dnn | |
struct musa::dnn::Convolution::FusedActivationDesc | 融合激活描述:模式(IDENTITY/RELU 等)与系数 (activAlpha, activBeta, activGamma) |
namespace musa::dnn
概览
| 成员 | 说明 |
|---|---|
enum Status | 库调用返回状态枚举。 |
public MUDNN_EXPORT Status SetCallBack(DebugInfo::Severity min, void * udata, CallBack f) | 设置全局调试回调。 |
public MUDNN_EXPORT void PrintVersionInfo(::std::ostream & os) | 将库版本信息(如版本号、构建信息等)输出到指定流。 |
public MUDNN_EXPORT size_t GetVersion() | 获取库版本号(通常为单一数值,如编码后的 major.minor.patch)。 |
class musa::dnn::BatchMatMul | 批量矩阵乘:每批独立计算 d = alpha * a * b + beta * c + gamma * bias,支持 stride、RunLt 低精度与 MatMulLtParam。 |
class musa::dnn::BatchNorm | 批归一化算子:out = (in - mean) / sqrt(var + epsilon) * scale + bias。 |
class musa::dnn::Binary | 二元算子描述符:对两个张量逐元素运算,遵循 NumPy 广播规则。 |
class musa::dnn::Concat | 沿指定轴拼接多张量的算子。 |
class musa::dnn::Convolution | 卷积算子:前向、融合(bias+add+激活)、反向数据、反向权值,支持 group、pad/stride/dilation、算法选择与 FusedActivationDesc。 |
class musa::dnn::CrossEntropyLoss | 交叉熵损失:结合 log_softmax 与 NLL,支持 label_smoothing、ignore_index、weight 与归约模式。 |
class musa::dnn::CTCLoss | CTC 损失(Connectionist Temporal Classification):用于序列标注,支持前向与反向、blank、loss 归一化等选项。 |
class musa::dnn::Cum | 累积运算(CumSum/CumProd 等):沿指定维度做前缀和/积,支 持初始值。 |
class musa::dnn::DebugInfo | 调试/日志信息结构,在回调中传递给用户,包含时间、设备、句柄等。 |
class musa::dnn::DeformableConv | 可变形卷积:Deformable Conv2d(无 mask)与 Modulate Deformable Conv2d(含 mask),支持 offset、mask、groups、deformable_groups。 |
class musa::dnn::Dot | 张量点积/批量矩阵乘(Dot):沿指定轴对 a、b 做矩阵乘,支持 bias 加项与确定性模式。 |
class musa::dnn::Dropout | Dropout:训练时按概率 p 将元素置零并缩放,支持 mask 输出、种子与偏移。 |
class musa::dnn::Fill | 用常量填充张量的算子,可选 mask 指定填充区域。 |
class musa::dnn::GatherX | Gather 算子:根据 index 张量从 in 中沿 axis Gather 到 out,支持 batch_dims 与多种模式。 |
class musa::dnn::Glu | GLU(Gated Linear Unit):沿 axis 将输入切半,做 sigmoid 门控后逐元素乘。 |
class musa::dnn::GroupedMatMul | 分组矩阵乘:每组独立计算 d[i] = alpha * a[i] * b[i] + beta * c[i] + gamma * bias[i],支持每组不同 m/n/k/ld,以及 RunLt 与 GroupGemmParam。 |
class musa::dnn::GroupGemmParam | 分组 GEMM 参数:Mask 模式或按专家 token 计数/起始的连 续模式(MoE 等)。 |
class musa::dnn::GroupNorm | 组归一化:在指定轴上分组,组内做归一化,out = (in - mean) / sqrt(var + eps) * gamma + beta。 |
class musa::dnn::Handle | muDNN 设备句柄,绑定到 MUSA 设备与流,所有算子执行均需通过 Handle。 |
class musa::dnn::ImplBase | 实现对象基类,持有底层 C 实现指针,供子类与 C API 交互。 |
class musa::dnn::Interpolate | 插值算子:NEAREST/NEAREST_EXACT/LINEAR/BICUBIC 等,支持 scale、align_corners、antialias。 |
class musa::dnn::KLDivLoss | KL 散度损失:输入与目标之间的 KL 散度,支持 log_target、归约模式与反向。 |
class musa::dnn::L2Loss | L2 损失:out = sum(in^2) / 2(或按元素),需工作区。 |
class musa::dnn::LayerNorm | 层归一化:在指定轴上计算均值和方差,out = (in - mean) / sqrt(var + eps) * gamma + beta。 |
class musa::dnn::LocalResponseNorm | 局部响应归一化(LRN):在通道/空间邻域上做归一化,常用 n, alpha, beta, k 四个参数。 |
class musa::dnn::MaskedScatter | 按 mask 将 source 中的值散布到 out 中(mask 为真的位置从 source 取)。 |
class musa::dnn::MaskedSelect | 按 mask 从 input 中选择元素写入 out(压缩为一维或保持结构由实现决定)。 |
class musa::dnn::MatMul | 矩阵乘(MatMul):d = alpha * a * b + beta * c + gamma * bias,支持转置、alpha/beta/gamma、工作区与显式维度/leading dimension。 |
class musa::dnn::MatMulLtParam | 低精度/量化 MatMul 的尾处理与缩放参数:epilogue 模式、scale_a/b/c/d、aux、amax_d、atomic_sync 等。 |
class musa::dnn::MatrixBase | 矩阵运算计算模式基类(如默认精度、TF32 等),仅用于继承。 |
class musa::dnn::MultiHeadAttention | 多头注意力:Q/K/V 线性变换 + 缩放点积注意力 + 输出线性,支持 mask 模式、key 格式、训练/推理、前向与反向及工作区查询。 |
class musa::dnn::NLLLoss | 负对数似然损失(NLL):与 log_softmax 配合用于分类,支持 ignore_index、weight、归约模式。 |
class musa::dnn::Nonzero | 返回 in 中非零元素的索引(坐标),输出形状为 (ndim, num_nonzero)。 |
class musa::dnn::Pad | 填充算子:在边界按 pad 与 mode 填充,支持常量填充值。 |
class musa::dnn::Permute | 张量维置换与切片算子:通过 ConfigDimStride 配置置换,通过 ConfigDimStrideForSlice 配置切片。 |
class musa::dnn::Pooling | 池化算子:Max/Avg 等,支持 kernel/pad/stride/dilation、divisor、indices 输出与反向。 |
class musa::dnn::Reduce | 归约算子:沿指定维度做 sum/max/min/mean 等,支持 argmax/argmin、带索引输出等。 |
class musa::dnn::RMSNorm | RMS 归一化:out = in / sqrt(mean(in^2) + eps) * gamma,无 beta,无均值输出。 |
class musa::dnn::RNN | RNN/LSTM/GRU 等循环网络:支持 SEQ_FIRST 格式、BiasMode、Direction、PackPadded/PadPacked 与反向。 |
class musa::dnn::Rope | |
class musa::dnn::ScaledDotProductAttention | 缩放点积注意力:Flash / FlashVarlen / Math 三种实现,支持 mask、causal、dropout、logsumexp、变长序列 cu_seqlens。 |
class musa::dnn::Scan | 扫描算子(前缀运算):沿指定维度执行 inclusive 或 exclusive 前缀计算,支持加法、乘法与初始值配置。 |
class musa::dnn::Scatter | Scatter:根据 idx 与 dim 将 update 散布到 self 或 out(inplace 与 outplace 两种 Run)。 |
class musa::dnn::ScatterND | 多维 Scatter:根据多维索引 idx 将 update 散布到 self(索引为多维坐标)。 |
class musa::dnn::Softmax | Softmax 算子:沿指定维度做 softmax,支持多种算法与模式、前向/反向及工作区查询。 |
class musa::dnn::Sort | 排序算子:沿 dim 对 in 排序,输出排序后的 out 与索引 indices;支持稳定排序与升/降序。 |
class musa::dnn::SortByKey | 按 key 排序:根据 key_in 对 key_in/value_in 一起排序,输出 key_out/value_out;当前仅支持升序、全量排序。 |
class musa::dnn::SwiGlu | SwiGLU:Swish 门控线性单元,前向与反向。 |
class musa::dnn::Tensor | 多维张量描述符,描述数据地址、类型、格式、维度与步长,用于所有算子的输入输出。 |
class musa::dnn::TensorBase | 张量数据类型与格式的基类,仅用于继承,不直接实例化。 |
class musa::dnn::Ternary | 三元算子描述符:对三个张量逐元素运算,支持 alpha/beta/gamma 缩放。 |
class musa::dnn::TopK | TopK:沿 dim 取最大或最小的 k 个元素及索引,支持 sorted、largest。 |
class musa::dnn::Unary | 一元算子描述符:对单张量逐元素运算(如激活、取反等),支持 alpha/beta 缩放。 |
class musa::dnn::Unfold | Unfold(滑动窗口展开):沿 axis 以 size 为窗口、step 为步长展开为多块。 |
class musa::dnn::Unique | Unique:去重,输出唯一值、逆索引与计数;支持多种 Mode。 |
class musa::dnn::WeightNorm | 权重归一化:沿指定轴对 weight 做归一化,weightV/weightG 为分解后的向量与标量。 |
成员
enum Status
库调用返回状态枚举。
枚举值含义:
-
SUCCESS: 调用成功
-
INVALID_PARAMETER: 无效参数
-
NOT_INITIALIZED: 未初始化
-
ALLOC_FAILED: 内存分配失败
-
NOT_SUPPORTED: 不支持的操作或配置
-
INTERNAL_ERROR: 内部错误
-
ARCH_MISMATCH: 架构不匹配
-
EXECUTION_FAILED: 执行失败
public MUDNN_EXPORT Status SetCallBack(DebugInfo::Severity min, void * udata, CallBack f)
设置全局调试回调。
参数
-
min仅触发严重级别 >= min 的消息 -
udata传递给回调的 user_data 指针 -
f回调函数;传空函数则恢复默认(输出到 cerr)
返回值
设置结果状态
public MUDNN_EXPORT void PrintVersionInfo(::std::ostream & os)
将库版本信息(如版本号、构建信息等)输出到指定流。
参数
os输出流,如 std::cout 或 std::cerr
public MUDNN_EXPORT size_t GetVersion()
获取库版本号(通常为单一数值,如编码后的 major.minor.patch)。
返回值
版本号
class musa::dnn::BatchMatMul
class musa::dnn::BatchMatMul
: public musa::dnn::ImplBase
: protected musa::dnn::MatrixBase
批量矩阵乘:每批独立计算 d = alpha * a * b + beta * c + gamma * bias,支持 stride、RunLt 低精度与 MatMulLtParam。
概览
成员
public BatchMatMul()
public ~BatchMatMul()
public Status SetComputeMode(ComputeMode mode)
参数
mode计算精度模式
public Status SetTranspose(bool trans_a,bool trans_b)
参数
-
trans_a是否转置 a; -
trans_b是否转置 b
public Status SetDeterministic(bool is_deterministic)
参数
is_deterministic是否确定性计算
public Status SetAlpha(double alpha)
参数
alpha乘子
public Status SetBeta(double beta)
参数
beta乘子
public Status SetGamma(double gamma)
参数
gamma乘子
public Status GetWorkspaceSize(Handle & h,size_t & size_in_bytes,const Tensor & d,const Tensor & a,const Tensor & b,const Tensor & c,const MatMulLtParam & param)
查询 Run/RunLt 工作区大小(含 RunLt 时需 param)
public Status SetMpCountTarget(int mp_count_target)
参数
mp_count_target多处理器数量目标(用于算法选择)
public Status Run(Handle & h,Tensor & c,const Tensor & a,const Tensor & b,const MemoryMaintainer & maintainer) const
公式:c = alpha * a * b + beta * c
参数
-
h执行句柄。 -
c输入/输出批矩阵张量。每个批次结果矩阵的逻辑形状为(m, n);leading dimension 与 batch stride 由张量描述符中的 real dimensions 和 stride 指定。 -
a左输入批矩阵张量。若trans_a == false,逻辑形状为(batch_a, m, k);若trans_a == true,逻辑形状为(batch_a, k, m)。batch_a支持广播到目标批大小。 -
b右输入批矩阵张量。若trans_b == false,逻辑形状为(batch_b, k, n);若trans_b == true,逻辑形状为(batch_b, n, k)。batch_b支持广播到目标批大小。 -
maintainer为所选算法预先分配的工作区管理器。
返回值
Status::SUCCESS 表示操作成功完成。
public Status RunWithBiasAdd(Handle & h,Tensor & d,const Tensor & a,const Tensor & b,const Tensor & c,const Tensor & bias,const MemoryMaintainer & maintainer) const
public Status RunWithBiasAdd(Handle & h,Tensor & c,const Tensor & a,const Tensor & b,const Tensor & bias,const MemoryMaintainer & maintainer) const
public Status Run(Handle & h,Tensor & c,const Tensor & a,const Tensor & b,const int64_t batch,const int64_t m,const int64_t n,const int64_t k,const int64_t lda,const int64_t ldb,const int64_t ldc,const int64_t stride_a,const int64_t stride_b,const int64_t stride_c,const MemoryMaintainer & maintainer) const
public Status RunWithBiasAdd(Handle & h,Tensor & d,const Tensor & a,const Tensor & b,const Tensor & c,const Tensor & bias,const int64_t batch,const int64_t m,const int64_t n,const int64_t k,const int64_t lda,const int64_t ldb,const int64_t ldc,const int64_t ldd,const int64_t stride_a,const int64_t stride_b,const int64_t stride_c,const int64_t stride_d,const MemoryMaintainer & maintainer) const
public Status RunWithBiasAdd(Handle & h,Tensor & c,const Tensor & a,const Tensor & b,const Tensor & bias,const int64_t batch,const int64_t m,const int64_t n,const int64_t k,const int64_t lda,const int64_t ldb,const int64_t ldc,const int64_t stride_a,const int64_t stride_b,const int64_t stride_c,const MemoryMaintainer & maintainer) const
public Status RunLt(Handle & h,Tensor & d,const Tensor & a,const Tensor & b,const Tensor & c,const Tensor & bias,const MatMulLtParam & param,const MemoryMaintainer & maintainer) const
低精度 批量乘:d_temp/aux_temp = Epilogue(α * scale_a * scale_b * a * b + β * scale_c * c + γ * bias),amax_d/amax_aux 输出,d/aux 再乘 scale_d/scale_aux
enum ComputeMode
计算模式枚举。
枚举值含义:TENSOR(张量/默认精度), SCALAR(标量模式)。
class musa::dnn::BatchNorm
class musa::dnn::BatchNorm
: public musa::dnn::ImplBase
批归一化算子:out = (in - mean) / sqrt(var + epsilon) * scale + bias。
支持纯推理(RunPure,使用固定 mean/var)与训练/融合(RunComposite,更新 running 统计量)。 根据 mean/variance/scale/bias 的 shape 与 format 自动选择 PER_ACTIVATION/PER_CHANNEL 等模式。
概览
成员
public BatchNorm()
public ~BatchNorm()
public Status SetMode(Mode m)
参数
m批归一化模式
public Status GetMode(Mode & m) const
参数
m输出:当前模式
public Status SetEpsilon(double epsilon)
方差稳定项,默认 0.0
public Status GetEpsilon(double & epsilon) const
参数
epsilon输出:当前 epsilon
public Status SetTraining(bool is_training)
是否为训练模式(影响是否更新 running 统计量),默认 true
public Status GetTraining(bool & is_training) const
参数
is_training输出:当前是否训练模式